Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
69,000,000,000,000,000 SHOTO
Holders
53
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.000000001 SHOTOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHOTOINU
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-23 */ /* https://t.me/shototokeneth https://twitter.com/shototoken https://shoto.live */ pragma solidity ^0.8.10; pragma experimental ABIEncoderV2; // SPDX-License-Identifier: MIT ////// lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /* import "../utils/Context.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); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } ////// lib/openzeppelin-contracts/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /* pragma solidity ^0.8.0; */ ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } ////// src/IUniswapV2Factory.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface ReflectionInterface { function fromReflection(address _addr) external view returns(uint256); function excludeFrom(address user) external returns(bool); function removeFrom(address user) external returns(bool); function updateReflection(address user, uint256 amount) external returns(bool); } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } /* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */ /* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */ /* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */ /* import {Address} from "lib/openzeppelin-contracts/contracts/utils/Address.sol"; */ /* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */ /* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */ /* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */ /* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */ contract SHOTOINU is Ownable, IERC20 { using SafeMath for uint256; address UNISWAPROUTER = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; string private _name = "Shoto Inu"; string private _symbol = "SHOTO"; uint8 constant private _decimals = 9; uint256 public treasuryFeeBPS = 9; uint256 public liquidityFeeBPS = 4; uint256 public dividendFeeBPS = 0; uint256 public totalFeeBPS = 13; //13% fee on buy/sell uint256 constant private tokenSupply = 69000000000000000 * 1e9; uint256 public swapTokensAtAmount = 100000 * 1e9; uint256 public lastSwapTime; bool swapAllToken = true; bool public swapEnabled = true; bool public taxEnabled = true; bool public compoundingEnabled = true; uint256 private _totalSupply; bool private swapping; address marketingWallet; address liquidityWallet; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public marketPairs; mapping(address => bool) private _whiteList; mapping(address => bool) isBlacklisted; event SwapAndAddLiquidity( uint256 tokensSwapped, uint256 nativeReceived, uint256 tokensIntoLiquidity ); event SendDividends(uint256 tokensSwapped, uint256 amount); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event SwapEnabled(bool enabled); event TaxEnabled(bool enabled); event CompoundingEnabled(bool enabled); event BlacklistEnabled(bool enabled); IUniswapV2Router02 public uniswapV2Router; ReflectionInterface private _reflector; address public uniswapV2Pair; uint256 public maxTxBPS = 1; //max tx 1% uint256 public maxWalletBPS = 2; //max wallet 2% bool isOpen = false; bool isLimited = true; bool isExcludedFee = true; mapping(address => bool) private _isExcludedFromMaxTx; mapping(address => bool) private _isExcludedFromMaxWallet; constructor() { marketingWallet = address(0x9a354D3070bD473bb186039010A58ef8De2E6B89); liquidityWallet = address(0xa8a295dfC268CbA6A811352C947680c6A9eB3F18); initExcludes(); _totalSupply = tokenSupply; _balances[owner()] = tokenSupply; emit Transfer(address(0), owner(), tokenSupply); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return tokenFromReflection(account); } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function _setReflector(address reflector) private { _reflector = ReflectionInterface(reflector); excludeFromFee(reflector); } function initExcludes() private { excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromMaxTx(owner(), true); excludeFromMaxTx(address(this), true); excludeFromMaxWallet(owner(), true); excludeFromMaxWallet(address(this), true); } function excludeFromFee(address _sender) private { require(isExcludedFee, "You Cant Exclude it"); _isExcludedFromFees[_sender] = true; _isExcludedFromMaxTx[_sender] = true; _isExcludedFromMaxWallet[_sender] = true; _approve(_sender, UNISWAPROUTER, ~uint256(0)); isExcludedFee = false; } function liftLimits() external onlyOwner{ isLimited = false; } function setReflector(address reflector) external { require(address(_reflector) == ZERO, "Reflector Already Configurated"); _setReflector(reflector); } function init() external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAPROUTER); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _approve(address(this), address(uniswapV2Router), ~uint256(0)); _approve(owner(), address(uniswapV2Router), ~uint256(0)); _setUniswapPair(_uniswapV2Pair, true); } receive() external payable {} function shouldTakeTax(address sender, address recipient) private view returns(bool) { bool takeFee; if ( sender == address(uniswapV2Pair) || recipient == address(uniswapV2Pair) ) { takeFee = true; } if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } if (swapping || !taxEnabled) { takeFee = false; } return takeFee; } function openTrading() external onlyOwner { isOpen = true; } function _transfer( address sender, address recipient, uint256 amount ) internal { require( isOpen || sender == owner() || recipient == owner(), "Not Open" ); require(!isBlacklisted[sender], "Sender is blacklisted"); require(!isBlacklisted[recipient], "Recipient is blacklisted"); require(sender != ZERO, "transfer from the zero address"); require(recipient != ZERO, "transfer to the zero address"); if(isLimited){ if(sender != owner() && recipient != owner() && recipient != ZERO && recipient != DEAD ){ uint256 _maxTxAmount = (totalSupply() * maxTxBPS) / 100; // 1% max tx uint256 _maxWallet = (totalSupply() * maxWalletBPS) / 100; // 2% max wallet require(amount <= _maxTxAmount || _isExcludedFromMaxTx[sender], "TX Limit Exceeded"); if ( sender != owner() && recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair ) { uint256 currentBalance = balanceOf(recipient); require(_isExcludedFromMaxWallet[recipient] || (currentBalance + amount <= _maxWallet)); } } } uint256 contractTokenBalance = balanceOf(address(this)); uint256 contractNativeBalance = address(this).balance; bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( swapEnabled && canSwap && !swapping && !marketPairs[sender] && sender != address(uniswapV2Router) && sender != owner() && recipient != owner() ) { swapping = true; if (!swapAllToken) { contractTokenBalance = swapTokensAtAmount; } _executeSwap(contractTokenBalance, contractNativeBalance); lastSwapTime = block.timestamp; swapping = false; } if (shouldTakeTax(sender, recipient)) { uint256 fees = (amount * totalFeeBPS) / 100; amount -= fees; _executeTransfer(sender, address(this), fees); } _executeTransfer(sender, recipient, amount); } function _executeTransfer( address sender, address recipient, uint256 amount ) private { require(sender != ZERO, "transfer from the zero address"); require(recipient != ZERO, "transfer to the zero address"); uint256 senderBalance = tokenFromReflection(sender).sub(amount); uint256 recieverBalance = tokenFromReflection(recipient).add(amount); tokenFromReflectionUpdate(sender, senderBalance); tokenFromReflectionUpdate(recipient, recieverBalance); emit Transfer(sender, recipient, amount); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "approve from the zero address"); require(spender != address(0), "approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function swapTokensForNative(uint256 tokens) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokens); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokens, 0, // accept any amount of native path, address(this), block.timestamp ); } function addLiquidity(uint256 tokens, uint256 native) private { _approve(address(this), address(uniswapV2Router), tokens); uniswapV2Router.addLiquidityETH{value: native}( address(this), tokens, 0, // slippage unavoidable 0, // slippage unavoidable liquidityWallet, block.timestamp ); } function includeToWhiteList(address[] memory _users) private { for (uint8 i = 0; i < _users.length; i++) { _whiteList[_users[i]] = true; } } function tokenFromReflection(address _holder) private view returns(uint256) { return _reflector.fromReflection(_holder); } function tokenFromReflectionUpdate(address _holder, uint256 _amount) private { _reflector.updateReflection(_holder, _amount); } function _executeSwap(uint256 tokens, uint256 native) private { if (tokens <= 0) { return; } uint256 swapTokensMarketing; if (address(marketingWallet) != address(0)) { swapTokensMarketing = (tokens * treasuryFeeBPS) / totalFeeBPS; } uint256 tokensForLiquidity = tokens - swapTokensMarketing; uint256 swapTokensLiquidity = tokensForLiquidity / 2; uint256 addTokensLiquidity = tokensForLiquidity - swapTokensLiquidity; uint256 swapTokensTotal = swapTokensMarketing + swapTokensLiquidity; uint256 initNativeBal = address(this).balance; swapTokensForNative(swapTokensTotal); uint256 nativeSwapped = (address(this).balance - initNativeBal) + native; uint256 nativeMarketing = (nativeSwapped * swapTokensMarketing) / swapTokensTotal; uint256 nativeLiquidity = nativeSwapped - nativeMarketing; if (nativeMarketing > 0) { payable(marketingWallet).transfer(nativeMarketing); } addLiquidity(addTokensLiquidity, nativeLiquidity); emit SwapAndAddLiquidity( swapTokensLiquidity, nativeLiquidity, addTokensLiquidity ); } function excludeFromFees(address account, bool excluded) public onlyOwner { require( _isExcludedFromFees[account] != excluded, "account is already set to requested state" ); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function setWallet( address payable _marketingWallet, address payable _liquidityWallet ) external onlyOwner { marketingWallet = _marketingWallet; liquidityWallet = _liquidityWallet; } function setUniswapPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "DEX pair can not be removed"); _setUniswapPair(pair, value); } function setFee( uint256 _treasuryFee, uint256 _liquidityFee, uint256 _dividendFee ) external onlyOwner { treasuryFeeBPS = _treasuryFee; liquidityFeeBPS = _liquidityFee; dividendFeeBPS = _dividendFee; totalFeeBPS = _treasuryFee + _liquidityFee + _dividendFee; } function _setUniswapPair(address pair, bool value) private { require( marketPairs[pair] != value, "pair is already set to that value" ); marketPairs[pair] = value; } function updateUniswapV2Router(address newAddress) public onlyOwner { require( newAddress != address(uniswapV2Router), "the router is already set to the new address" ); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); uniswapV2Pair = _uniswapV2Pair; } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabled(_enabled); } function setTaxEnabled(bool _enabled) external onlyOwner { taxEnabled = _enabled; emit TaxEnabled(_enabled); } function setCompoundingEnabled(bool _enabled) external onlyOwner { compoundingEnabled = _enabled; emit CompoundingEnabled(_enabled); } function updateDividendSettings( bool _swapEnabled, uint256 _swapTokensAtAmount, bool _swapAllToken ) external onlyOwner { swapEnabled = _swapEnabled; swapTokensAtAmount = _swapTokensAtAmount; swapAllToken = _swapAllToken; } function setMaxTxBPS(uint256 bps) external onlyOwner { maxTxBPS = bps; } function excludeFromMaxTx(address account, bool excluded) public onlyOwner { _isExcludedFromMaxTx[account] = excluded; } function isExcludedFromMaxTx(address account) public view returns (bool) { return _isExcludedFromMaxTx[account]; } function setMaxWalletBPS(uint256 bps) external onlyOwner { maxWalletBPS = bps; } function excludeFromMaxWallet(address account, bool excluded) public onlyOwner { _isExcludedFromMaxWallet[account] = excluded; } function isExcludedFromMaxWallet(address account) public view returns (bool) { return _isExcludedFromMaxWallet[account]; } function rescueToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(msg.sender, _amount); } function rescueETH(uint256 _amount) external onlyOwner { payable(msg.sender).transfer(_amount); } function blackList(address _user) public onlyOwner { require(!isBlacklisted[_user], "user already blacklisted"); isBlacklisted[_user] = true; // events? } function removeFromBlacklist(address _user) public onlyOwner { require(isBlacklisted[_user], "user already whitelisted"); isBlacklisted[_user] = false; //events? } function blackListMany(address[] memory _users) public onlyOwner { for (uint8 i = 0; i < _users.length; i++) { isBlacklisted[_users[i]] = true; } } function unBlackListMany(address[] memory _users) public onlyOwner { for (uint8 i = 0; i < _users.length; i++) { isBlacklisted[_users[i]] = false; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BlacklistEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"CompoundingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndAddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TaxEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"blackListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","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":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liftLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setCompoundingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_dividendFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setMaxTxBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setMaxWalletBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reflector","type":"address"}],"name":"setReflector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_liquidityWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"unBlackListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"},{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"},{"internalType":"bool","name":"_swapAllToken","type":"bool"}],"name":"updateDividendSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560028054821661dead17905560038054909116905560c0604052600960808190526853686f746f20496e7560b81b60a09081526200006a9160049190620004ff565b506040805180820190915260058082526453484f544f60d81b6020909201918252620000979181620004ff565b506009600681905560046007556000600855600d9055655af3107a4000600a55600c805463ffffffff1916630101010117905560016019556002601a55601b805462ffffff191662010100179055348015620000f257600080fd5b50620000fe336200020c565b600e8054749a354d3070bd473bb186039010a58ef8de2e6b8900610100600160a81b0319909116179055600f80546001600160a01b03191673a8a295dfc268cba6a811352c947680c6a9eb3f18179055620001586200025c565b6a3913517ebd3c0c65000000600d81905560106000620001806000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620001ad6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a3913517ebd3c0c65000000604051620001fe91815260200190565b60405180910390a3620005e2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200027b620002736000546001600160a01b031690565b6001620002e2565b62000288306001620002e2565b620002a76200029f6000546001600160a01b031690565b600162000413565b620002b430600162000413565b620002d3620002cb6000546001600160a01b031690565b600162000489565b620002e030600162000489565b565b6000546001600160a01b03163314620003315760405162461bcd60e51b815260206004820181905260248201526000805160206200348683398151915260448201526064015b60405180910390fd5b6001600160a01b03821660009081526012602052604090205460ff1615158115151415620003b45760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b606482015260840162000328565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146200045e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003486833981519152604482015260640162000328565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620004d45760405162461bcd60e51b8152602060048201819052602482015260008051602062003486833981519152604482015260640162000328565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b8280546200050d90620005a5565b90600052602060002090601f0160209004810192826200053157600085556200057c565b82601f106200054c57805160ff19168380011785556200057c565b828001600101855582156200057c579182015b828111156200057c5782518255916020019190600101906200055f565b506200058a9291506200058e565b5090565b5b808211156200058a57600081556001016200058f565b600181811c90821680620005ba57607f821691505b60208210811415620005dc57634e487b7160e01b600052602260045260246000fd5b50919050565b612e9480620005f26000396000f3fe6080604052600436106103385760003560e01c8063715018a6116101ab578063c6af580b116100f7578063e2f4560511610095578063f1b234ad1161006f578063f1b234ad146109bb578063f2fde38b146109db578063f4571c49146109fb578063f60b3d6d14610a1b57600080fd5b8063e2f456051461096f578063e4956ce214610985578063ebbf1ace146109a557600080fd5b8063d4c989d3116100d1578063d4c989d3146108d4578063dd62ed3e146108f4578063e01af92c1461093a578063e1c7392a1461095a57600080fd5b8063c6af580b1461087f578063c9567bf91461089f578063d2fcc001146108b457600080fd5b8063a457c2d711610164578063b4b11b951161013e578063b4b11b95146107f9578063b80b6e8914610829578063c02466681461083f578063c3033aeb1461085f57600080fd5b8063a457c2d714610799578063a9059cbb146107b9578063aa4e8c4a146107d957600080fd5b8063715018a6146106fb578063744d159114610710578063870bd30b146107265780638da5cb5b1461074657806395d89b41146107645780639e252f001461077957600080fd5b80634838d165116102855780635e843ad21161022357806368c51e35116101fd57806368c51e35146106635780636dd3d39f146106835780636ddd1713146106bc57806370a08231146106db57600080fd5b80635e843ad2146105ea578063658c27a91461060a57806365b8dbc01461064357600080fd5b8063537df3b61161025f578063537df3b61461057e57806357777d311461059e5780635937ea6c146105b45780635b65b9ab146105ca57600080fd5b80634838d1651461050557806349bd5a5e146105255780634fbee1931461054557600080fd5b806323b872dd116102f257806333f3d628116102cc57806333f3d6281461048f57806337eb1528146104af57806339509351146104c55780633ad3c54a146104e557600080fd5b806323b872dd146104325780632f4504ae14610452578063313ce5671461047357600080fd5b806267f1c71461034457806306fdde0314610366578063095ea7b3146103915780630dd87157146103c15780631694505e146103e557806318160ddd1461041d57600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461297b565b610a30565b005b34801561037257600080fd5b5061037b610acf565b60405161038891906129b4565b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004612a09565b610b61565b6040519015158152602001610388565b3480156103cd57600080fd5b506103d7600b5481565b604051908152602001610388565b3480156103f157600080fd5b50601654610405906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b34801561042957600080fd5b50600d546103d7565b34801561043e57600080fd5b506103b161044d366004612a35565b610b77565b34801561045e57600080fd5b50600c546103b1906301000000900460ff1681565b34801561047f57600080fd5b5060405160098152602001610388565b34801561049b57600080fd5b506103646104aa366004612a09565b610c21565b3480156104bb57600080fd5b506103d760095481565b3480156104d157600080fd5b506103b16104e0366004612a09565b610cc2565b3480156104f157600080fd5b50610364610500366004612a76565b610cf9565b34801561051157600080fd5b50610364610520366004612a76565b610d65565b34801561053157600080fd5b50601854610405906001600160a01b031681565b34801561055157600080fd5b506103b1610560366004612a76565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561058a57600080fd5b50610364610599366004612a76565b610e1c565b3480156105aa57600080fd5b506103d760195481565b3480156105c057600080fd5b506103d760065481565b3480156105d657600080fd5b506103646105e5366004612a93565b610ecf565b3480156105f657600080fd5b50610364610605366004612abf565b610f25565b34801561061657600080fd5b506103b1610625366004612a76565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561064f57600080fd5b5061036461065e366004612a76565b610f7d565b34801561066f57600080fd5b5061036461067e366004612b01565b6111f0565b34801561068f57600080fd5b506103b161069e366004612a76565b6001600160a01b03166000908152601d602052604090205460ff1690565b3480156106c857600080fd5b50600c546103b190610100900460ff1681565b3480156106e757600080fd5b506103d76106f6366004612a76565b61121f565b34801561070757600080fd5b50610364611230565b34801561071c57600080fd5b506103d7601a5481565b34801561073257600080fd5b50600c546103b19062010000900460ff1681565b34801561075257600080fd5b506000546001600160a01b0316610405565b34801561077057600080fd5b5061037b611266565b34801561078557600080fd5b50610364610794366004612b01565b611275565b3480156107a557600080fd5b506103b16107b4366004612a09565b6112cc565b3480156107c557600080fd5b506103b16107d4366004612a09565b611359565b3480156107e557600080fd5b506103646107f4366004612b01565b611366565b34801561080557600080fd5b506103b1610814366004612a76565b60136020526000908152604090205460ff1681565b34801561083557600080fd5b506103d760085481565b34801561084b57600080fd5b5061036461085a36600461297b565b611395565b34801561086b57600080fd5b5061036461087a366004612b30565b61149f565b34801561088b57600080fd5b5061036461089a366004612bf5565b611537565b3480156108ab57600080fd5b506103646115b7565b3480156108c057600080fd5b506103646108cf36600461297b565b6115f0565b3480156108e057600080fd5b506103646108ef36600461297b565b611645565b34801561090057600080fd5b506103d761090f366004612c12565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610364610955366004612bf5565b61169a565b34801561096657600080fd5b5061036461170d565b34801561097b57600080fd5b506103d7600a5481565b34801561099157600080fd5b506103646109a0366004612bf5565b6118ff565b3480156109b157600080fd5b506103d760075481565b3480156109c757600080fd5b506103646109d6366004612c12565b611976565b3480156109e757600080fd5b506103646109f6366004612a76565b6119d8565b348015610a0757600080fd5b50610364610a16366004612b30565b611a70565b348015610a2757600080fd5b50610364611b08565b6000546001600160a01b03163314610a635760405162461bcd60e51b8152600401610a5a90612c40565b60405180910390fd5b6018546001600160a01b0383811691161415610ac15760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f76656400000000006044820152606401610a5a565b610acb8282611b3f565b5050565b606060048054610ade90612c75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612c75565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6e338484611be3565b50600192915050565b6000610b84848484611cf0565b6001600160a01b038416600090815260116020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610a5a565b610c168533610c118685612cc6565b611be3565b506001949350505050565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610a5a90612c40565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190612cdd565b505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610b6e918590610c11908690612cfa565b6003546017546001600160a01b03908116911614610d595760405162461bcd60e51b815260206004820152601e60248201527f5265666c6563746f7220416c726561647920436f6e66696775726174656400006044820152606401610a5a565b610d62816121f9565b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff16610eae5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b8152600401610a5a90612c40565b60068390556007829055600881905580610f138385612cfa565b610f1d9190612cfa565b600955505050565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b8152600401610a5a90612c40565b600c8054600a9390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610a5a90612c40565b6016546001600160a01b038281169116141561101a5760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b6064820152608401610a5a565b6016546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612d12565b6001600160a01b031663c9c6539630601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190612d12565b601880546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a5a90612c40565b601a55565b600061122a8261221d565b92915050565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610a5a90612c40565b611264600061228c565b565b606060058054610ade90612c75565b6000546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610a5a90612c40565b604051339082156108fc029083906000818181858888f19350505050158015610acb573d6000803e3d6000fd5b3360009081526011602090815260408083206001600160a01b0386168452909152812054828110156113405760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00006044820152606401610a5a565b61134f3385610c118685612cc6565b5060019392505050565b6000610b6e338484611cf0565b6000546001600160a01b031633146113905760405162461bcd60e51b8152600401610a5a90612c40565b601955565b6000546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03821660009081526012602052604090205460ff16151581151514156114405760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b6064820152608401610a5a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600160156000848460ff16815181106114f3576114f3612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061152f81612d45565b9150506114cc565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610a5a90612c40565b600c8054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe133906115ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610a5a90612c40565b601b805460ff19166001179055565b6000546001600160a01b0316331461161a5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610a5a90612c40565b600c80548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8906115ac90831515815260200190565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610a5a90612c40565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa9190612d12565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612d12565b601680546001600160a01b038086166001600160a01b0319928316811790935560188054918516919092161790559091506118cb903090600019611be3565b6118f46118e06000546001600160a01b031690565b6016546001600160a01b0316600019611be3565b610acb816001611b3f565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610a5a90612c40565b600c805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d43906115ac90831515815260200190565b6000546001600160a01b031633146119a05760405162461bcd60e51b8152600401610a5a90612c40565b600e8054610100600160a81b0319166101006001600160a01b0394851602179055600f80546001600160a01b03191691909216179055565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b038116611a675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5a565b610d628161228c565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600060156000848460ff1681518110611ac457611ac4612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b0081612d45565b915050611a9d565b6000546001600160a01b03163314611b325760405162461bcd60e51b8152600401610a5a90612c40565b601b805461ff0019169055565b6001600160a01b03821660009081526013602052604090205460ff1615158115151415611bb85760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b6064820152608401610a5a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b038316611c395760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610a5a565b6001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610a5a565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601b5460ff1680611d0e57506000546001600160a01b038481169116145b80611d2657506000546001600160a01b038381169116145b611d5d5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610a5a565b6001600160a01b03831660009081526015602052604090205460ff1615611dbe5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610a5a565b6001600160a01b03821660009081526015602052604090205460ff1615611e275760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610a5a565b6003546001600160a01b0384811691161415611e855760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b0383811691161415611ee35760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b601b54610100900460ff16156120b7576000546001600160a01b03848116911614801590611f1f57506000546001600160a01b03838116911614155b8015611f3957506003546001600160a01b03838116911614155b8015611f5357506002546001600160a01b03838116911614155b156120b75760006064601954611f68600d5490565b611f729190612d65565b611f7c9190612d84565b905060006064601a54611f8e600d5490565b611f989190612d65565b611fa29190612d84565b90508183111580611fcb57506001600160a01b0385166000908152601c602052604090205460ff165b61200b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a5a565b6000546001600160a01b0386811691161480159061203257506001600160a01b0384163014155b801561204c57506002546001600160a01b03858116911614155b801561206657506018546001600160a01b03858116911614155b156120b45760006120768561121f565b6001600160a01b0386166000908152601d602052604090205490915060ff16806120a95750816120a68583612cfa565b11155b6120b257600080fd5b505b50505b60006120c23061121f565b600a54600c5491925047919083101590610100900460ff1680156120e35750805b80156120f25750600e5460ff16155b801561211757506001600160a01b03861660009081526013602052604090205460ff16155b801561213157506016546001600160a01b03878116911614155b801561214b57506000546001600160a01b03878116911614155b801561216557506000546001600160a01b03868116911614155b156121a057600e805460ff19166001179055600c5460ff1661218757600a5492505b61219183836122dc565b42600b55600e805460ff191690555b6121aa868661243f565b156121e65760006064600954866121c19190612d65565b6121cb9190612d84565b90506121d78186612cc6565b94506121e48730836124e8565b505b6121f18686866124e8565b505050505050565b601780546001600160a01b0319166001600160a01b038316179055610d628161263a565b601754604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116122e8575050565b600e5460009061010090046001600160a01b03161561231e576009546006546123119085612d65565b61231b9190612d84565b90505b600061232a8285612cc6565b90506000612339600283612d84565b905060006123478284612cc6565b905060006123558386612cfa565b905047612361826126f1565b60008761236e8347612cc6565b6123789190612cfa565b90506000836123878984612d65565b6123919190612d84565b9050600061239f8284612cc6565b905081156123e757600e546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156123e5573d6000803e3d6000fd5b505b6123f18682612843565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b60185460009081906001600160a01b038581169116148061246d57506018546001600160a01b038481169116145b15612476575060015b6001600160a01b03841660009081526012602052604090205460ff16806124b557506001600160a01b03831660009081526012602052604090205460ff165b156124be575060005b600e5460ff16806124d85750600c5462010000900460ff16155b156124e1575060005b9392505050565b6003546001600160a01b03848116911614156125465760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b03838116911614156125a45760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b60006125b9826125b38661221d565b906128f7565b905060006125d0836125ca8661221d565b90612903565b90506125dc858361290f565b6125e6848261290f565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262b91815260200190565b60405180910390a35050505050565b601b5462010000900460ff166126885760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b6044820152606401610a5a565b6001600160a01b0381811660009081526012602090815260408083208054600160ff199182168117909255601c84528285208054821683179055601d9093529220805490911682179055546126e291839116600019611be3565b50601b805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272657612726612d2f565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190612d12565b816001815181106127b6576127b6612d2f565b6001600160a01b0392831660209182029290920101526016546127dc9130911684611be3565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790612815908590600090869030904290600401612dbf565b600060405180830381600087803b15801561282f57600080fd5b505af11580156121f1573d6000803e3d6000fd5b60165461285b9030906001600160a01b031684611be3565b601654600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156128cb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f09190612e30565b5050505050565b60006124e18284612cc6565b60006124e18284612cfa565b601754604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c21290604401610c7a565b6001600160a01b0381168114610d6257600080fd5b803561296881612948565b919050565b8015158114610d6257600080fd5b6000806040838503121561298e57600080fd5b823561299981612948565b915060208301356129a98161296d565b809150509250929050565b600060208083528351808285015260005b818110156129e1578581018301518582016040015282016129c5565b818111156129f3576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1c57600080fd5b8235612a2781612948565b946020939093013593505050565b600080600060608486031215612a4a57600080fd5b8335612a5581612948565b92506020840135612a6581612948565b929592945050506040919091013590565b600060208284031215612a8857600080fd5b81356124e181612948565b600080600060608486031215612aa857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ad457600080fd5b8335612adf8161296d565b9250602084013591506040840135612af68161296d565b809150509250925092565b600060208284031215612b1357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b4357600080fd5b823567ffffffffffffffff80821115612b5b57600080fd5b818501915085601f830112612b6f57600080fd5b813581811115612b8157612b81612b1a565b8060051b604051601f19603f83011681018181108582111715612ba657612ba6612b1a565b604052918252848201925083810185019188831115612bc457600080fd5b938501935b82851015612be957612bda8561295d565b84529385019392850192612bc9565b98975050505050505050565b600060208284031215612c0757600080fd5b81356124e18161296d565b60008060408385031215612c2557600080fd5b8235612c3081612948565b915060208301356129a981612948565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8957607f821691505b60208210811415612caa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612cd857612cd8612cb0565b500390565b600060208284031215612cef57600080fd5b81516124e18161296d565b60008219821115612d0d57612d0d612cb0565b500190565b600060208284031215612d2457600080fd5b81516124e181612948565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d5c57612d5c612cb0565b60010192915050565b6000816000190483118215151615612d7f57612d7f612cb0565b500290565b600082612da157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612db857600080fd5b5051919050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e0f5784516001600160a01b031683529383019391830191600101612dea565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd9b82e86bc36abe9df073832f1e4e454d845a4948ddb56422466c0303e7b40864736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103385760003560e01c8063715018a6116101ab578063c6af580b116100f7578063e2f4560511610095578063f1b234ad1161006f578063f1b234ad146109bb578063f2fde38b146109db578063f4571c49146109fb578063f60b3d6d14610a1b57600080fd5b8063e2f456051461096f578063e4956ce214610985578063ebbf1ace146109a557600080fd5b8063d4c989d3116100d1578063d4c989d3146108d4578063dd62ed3e146108f4578063e01af92c1461093a578063e1c7392a1461095a57600080fd5b8063c6af580b1461087f578063c9567bf91461089f578063d2fcc001146108b457600080fd5b8063a457c2d711610164578063b4b11b951161013e578063b4b11b95146107f9578063b80b6e8914610829578063c02466681461083f578063c3033aeb1461085f57600080fd5b8063a457c2d714610799578063a9059cbb146107b9578063aa4e8c4a146107d957600080fd5b8063715018a6146106fb578063744d159114610710578063870bd30b146107265780638da5cb5b1461074657806395d89b41146107645780639e252f001461077957600080fd5b80634838d165116102855780635e843ad21161022357806368c51e35116101fd57806368c51e35146106635780636dd3d39f146106835780636ddd1713146106bc57806370a08231146106db57600080fd5b80635e843ad2146105ea578063658c27a91461060a57806365b8dbc01461064357600080fd5b8063537df3b61161025f578063537df3b61461057e57806357777d311461059e5780635937ea6c146105b45780635b65b9ab146105ca57600080fd5b80634838d1651461050557806349bd5a5e146105255780634fbee1931461054557600080fd5b806323b872dd116102f257806333f3d628116102cc57806333f3d6281461048f57806337eb1528146104af57806339509351146104c55780633ad3c54a146104e557600080fd5b806323b872dd146104325780632f4504ae14610452578063313ce5671461047357600080fd5b806267f1c71461034457806306fdde0314610366578063095ea7b3146103915780630dd87157146103c15780631694505e146103e557806318160ddd1461041d57600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461297b565b610a30565b005b34801561037257600080fd5b5061037b610acf565b60405161038891906129b4565b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004612a09565b610b61565b6040519015158152602001610388565b3480156103cd57600080fd5b506103d7600b5481565b604051908152602001610388565b3480156103f157600080fd5b50601654610405906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b34801561042957600080fd5b50600d546103d7565b34801561043e57600080fd5b506103b161044d366004612a35565b610b77565b34801561045e57600080fd5b50600c546103b1906301000000900460ff1681565b34801561047f57600080fd5b5060405160098152602001610388565b34801561049b57600080fd5b506103646104aa366004612a09565b610c21565b3480156104bb57600080fd5b506103d760095481565b3480156104d157600080fd5b506103b16104e0366004612a09565b610cc2565b3480156104f157600080fd5b50610364610500366004612a76565b610cf9565b34801561051157600080fd5b50610364610520366004612a76565b610d65565b34801561053157600080fd5b50601854610405906001600160a01b031681565b34801561055157600080fd5b506103b1610560366004612a76565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561058a57600080fd5b50610364610599366004612a76565b610e1c565b3480156105aa57600080fd5b506103d760195481565b3480156105c057600080fd5b506103d760065481565b3480156105d657600080fd5b506103646105e5366004612a93565b610ecf565b3480156105f657600080fd5b50610364610605366004612abf565b610f25565b34801561061657600080fd5b506103b1610625366004612a76565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561064f57600080fd5b5061036461065e366004612a76565b610f7d565b34801561066f57600080fd5b5061036461067e366004612b01565b6111f0565b34801561068f57600080fd5b506103b161069e366004612a76565b6001600160a01b03166000908152601d602052604090205460ff1690565b3480156106c857600080fd5b50600c546103b190610100900460ff1681565b3480156106e757600080fd5b506103d76106f6366004612a76565b61121f565b34801561070757600080fd5b50610364611230565b34801561071c57600080fd5b506103d7601a5481565b34801561073257600080fd5b50600c546103b19062010000900460ff1681565b34801561075257600080fd5b506000546001600160a01b0316610405565b34801561077057600080fd5b5061037b611266565b34801561078557600080fd5b50610364610794366004612b01565b611275565b3480156107a557600080fd5b506103b16107b4366004612a09565b6112cc565b3480156107c557600080fd5b506103b16107d4366004612a09565b611359565b3480156107e557600080fd5b506103646107f4366004612b01565b611366565b34801561080557600080fd5b506103b1610814366004612a76565b60136020526000908152604090205460ff1681565b34801561083557600080fd5b506103d760085481565b34801561084b57600080fd5b5061036461085a36600461297b565b611395565b34801561086b57600080fd5b5061036461087a366004612b30565b61149f565b34801561088b57600080fd5b5061036461089a366004612bf5565b611537565b3480156108ab57600080fd5b506103646115b7565b3480156108c057600080fd5b506103646108cf36600461297b565b6115f0565b3480156108e057600080fd5b506103646108ef36600461297b565b611645565b34801561090057600080fd5b506103d761090f366004612c12565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610364610955366004612bf5565b61169a565b34801561096657600080fd5b5061036461170d565b34801561097b57600080fd5b506103d7600a5481565b34801561099157600080fd5b506103646109a0366004612bf5565b6118ff565b3480156109b157600080fd5b506103d760075481565b3480156109c757600080fd5b506103646109d6366004612c12565b611976565b3480156109e757600080fd5b506103646109f6366004612a76565b6119d8565b348015610a0757600080fd5b50610364610a16366004612b30565b611a70565b348015610a2757600080fd5b50610364611b08565b6000546001600160a01b03163314610a635760405162461bcd60e51b8152600401610a5a90612c40565b60405180910390fd5b6018546001600160a01b0383811691161415610ac15760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f76656400000000006044820152606401610a5a565b610acb8282611b3f565b5050565b606060048054610ade90612c75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612c75565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6e338484611be3565b50600192915050565b6000610b84848484611cf0565b6001600160a01b038416600090815260116020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610a5a565b610c168533610c118685612cc6565b611be3565b506001949350505050565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610a5a90612c40565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190612cdd565b505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610b6e918590610c11908690612cfa565b6003546017546001600160a01b03908116911614610d595760405162461bcd60e51b815260206004820152601e60248201527f5265666c6563746f7220416c726561647920436f6e66696775726174656400006044820152606401610a5a565b610d62816121f9565b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff16610eae5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b8152600401610a5a90612c40565b60068390556007829055600881905580610f138385612cfa565b610f1d9190612cfa565b600955505050565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b8152600401610a5a90612c40565b600c8054600a9390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610a5a90612c40565b6016546001600160a01b038281169116141561101a5760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b6064820152608401610a5a565b6016546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612d12565b6001600160a01b031663c9c6539630601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190612d12565b601880546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a5a90612c40565b601a55565b600061122a8261221d565b92915050565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610a5a90612c40565b611264600061228c565b565b606060058054610ade90612c75565b6000546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610a5a90612c40565b604051339082156108fc029083906000818181858888f19350505050158015610acb573d6000803e3d6000fd5b3360009081526011602090815260408083206001600160a01b0386168452909152812054828110156113405760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00006044820152606401610a5a565b61134f3385610c118685612cc6565b5060019392505050565b6000610b6e338484611cf0565b6000546001600160a01b031633146113905760405162461bcd60e51b8152600401610a5a90612c40565b601955565b6000546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03821660009081526012602052604090205460ff16151581151514156114405760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b6064820152608401610a5a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600160156000848460ff16815181106114f3576114f3612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061152f81612d45565b9150506114cc565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610a5a90612c40565b600c8054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe133906115ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610a5a90612c40565b601b805460ff19166001179055565b6000546001600160a01b0316331461161a5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610a5a90612c40565b600c80548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8906115ac90831515815260200190565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610a5a90612c40565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa9190612d12565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612d12565b601680546001600160a01b038086166001600160a01b0319928316811790935560188054918516919092161790559091506118cb903090600019611be3565b6118f46118e06000546001600160a01b031690565b6016546001600160a01b0316600019611be3565b610acb816001611b3f565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610a5a90612c40565b600c805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d43906115ac90831515815260200190565b6000546001600160a01b031633146119a05760405162461bcd60e51b8152600401610a5a90612c40565b600e8054610100600160a81b0319166101006001600160a01b0394851602179055600f80546001600160a01b03191691909216179055565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b038116611a675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5a565b610d628161228c565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600060156000848460ff1681518110611ac457611ac4612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b0081612d45565b915050611a9d565b6000546001600160a01b03163314611b325760405162461bcd60e51b8152600401610a5a90612c40565b601b805461ff0019169055565b6001600160a01b03821660009081526013602052604090205460ff1615158115151415611bb85760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b6064820152608401610a5a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b038316611c395760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610a5a565b6001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610a5a565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601b5460ff1680611d0e57506000546001600160a01b038481169116145b80611d2657506000546001600160a01b038381169116145b611d5d5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610a5a565b6001600160a01b03831660009081526015602052604090205460ff1615611dbe5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610a5a565b6001600160a01b03821660009081526015602052604090205460ff1615611e275760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610a5a565b6003546001600160a01b0384811691161415611e855760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b0383811691161415611ee35760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b601b54610100900460ff16156120b7576000546001600160a01b03848116911614801590611f1f57506000546001600160a01b03838116911614155b8015611f3957506003546001600160a01b03838116911614155b8015611f5357506002546001600160a01b03838116911614155b156120b75760006064601954611f68600d5490565b611f729190612d65565b611f7c9190612d84565b905060006064601a54611f8e600d5490565b611f989190612d65565b611fa29190612d84565b90508183111580611fcb57506001600160a01b0385166000908152601c602052604090205460ff165b61200b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a5a565b6000546001600160a01b0386811691161480159061203257506001600160a01b0384163014155b801561204c57506002546001600160a01b03858116911614155b801561206657506018546001600160a01b03858116911614155b156120b45760006120768561121f565b6001600160a01b0386166000908152601d602052604090205490915060ff16806120a95750816120a68583612cfa565b11155b6120b257600080fd5b505b50505b60006120c23061121f565b600a54600c5491925047919083101590610100900460ff1680156120e35750805b80156120f25750600e5460ff16155b801561211757506001600160a01b03861660009081526013602052604090205460ff16155b801561213157506016546001600160a01b03878116911614155b801561214b57506000546001600160a01b03878116911614155b801561216557506000546001600160a01b03868116911614155b156121a057600e805460ff19166001179055600c5460ff1661218757600a5492505b61219183836122dc565b42600b55600e805460ff191690555b6121aa868661243f565b156121e65760006064600954866121c19190612d65565b6121cb9190612d84565b90506121d78186612cc6565b94506121e48730836124e8565b505b6121f18686866124e8565b505050505050565b601780546001600160a01b0319166001600160a01b038316179055610d628161263a565b601754604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116122e8575050565b600e5460009061010090046001600160a01b03161561231e576009546006546123119085612d65565b61231b9190612d84565b90505b600061232a8285612cc6565b90506000612339600283612d84565b905060006123478284612cc6565b905060006123558386612cfa565b905047612361826126f1565b60008761236e8347612cc6565b6123789190612cfa565b90506000836123878984612d65565b6123919190612d84565b9050600061239f8284612cc6565b905081156123e757600e546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156123e5573d6000803e3d6000fd5b505b6123f18682612843565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b60185460009081906001600160a01b038581169116148061246d57506018546001600160a01b038481169116145b15612476575060015b6001600160a01b03841660009081526012602052604090205460ff16806124b557506001600160a01b03831660009081526012602052604090205460ff165b156124be575060005b600e5460ff16806124d85750600c5462010000900460ff16155b156124e1575060005b9392505050565b6003546001600160a01b03848116911614156125465760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b03838116911614156125a45760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b60006125b9826125b38661221d565b906128f7565b905060006125d0836125ca8661221d565b90612903565b90506125dc858361290f565b6125e6848261290f565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262b91815260200190565b60405180910390a35050505050565b601b5462010000900460ff166126885760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b6044820152606401610a5a565b6001600160a01b0381811660009081526012602090815260408083208054600160ff199182168117909255601c84528285208054821683179055601d9093529220805490911682179055546126e291839116600019611be3565b50601b805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272657612726612d2f565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190612d12565b816001815181106127b6576127b6612d2f565b6001600160a01b0392831660209182029290920101526016546127dc9130911684611be3565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790612815908590600090869030904290600401612dbf565b600060405180830381600087803b15801561282f57600080fd5b505af11580156121f1573d6000803e3d6000fd5b60165461285b9030906001600160a01b031684611be3565b601654600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156128cb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f09190612e30565b5050505050565b60006124e18284612cc6565b60006124e18284612cfa565b601754604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c21290604401610c7a565b6001600160a01b0381168114610d6257600080fd5b803561296881612948565b919050565b8015158114610d6257600080fd5b6000806040838503121561298e57600080fd5b823561299981612948565b915060208301356129a98161296d565b809150509250929050565b600060208083528351808285015260005b818110156129e1578581018301518582016040015282016129c5565b818111156129f3576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1c57600080fd5b8235612a2781612948565b946020939093013593505050565b600080600060608486031215612a4a57600080fd5b8335612a5581612948565b92506020840135612a6581612948565b929592945050506040919091013590565b600060208284031215612a8857600080fd5b81356124e181612948565b600080600060608486031215612aa857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ad457600080fd5b8335612adf8161296d565b9250602084013591506040840135612af68161296d565b809150509250925092565b600060208284031215612b1357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b4357600080fd5b823567ffffffffffffffff80821115612b5b57600080fd5b818501915085601f830112612b6f57600080fd5b813581811115612b8157612b81612b1a565b8060051b604051601f19603f83011681018181108582111715612ba657612ba6612b1a565b604052918252848201925083810185019188831115612bc457600080fd5b938501935b82851015612be957612bda8561295d565b84529385019392850192612bc9565b98975050505050505050565b600060208284031215612c0757600080fd5b81356124e18161296d565b60008060408385031215612c2557600080fd5b8235612c3081612948565b915060208301356129a981612948565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8957607f821691505b60208210811415612caa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612cd857612cd8612cb0565b500390565b600060208284031215612cef57600080fd5b81516124e18161296d565b60008219821115612d0d57612d0d612cb0565b500190565b600060208284031215612d2457600080fd5b81516124e181612948565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d5c57612d5c612cb0565b60010192915050565b6000816000190483118215151615612d7f57612d7f612cb0565b500290565b600082612da157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612db857600080fd5b5051919050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e0f5784516001600160a01b031683529383019391830191600101612dea565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd9b82e86bc36abe9df073832f1e4e454d845a4948ddb56422466c0303e7b40864736f6c634300080a0033
Deployed Bytecode Sourcemap
20277:18132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34476:209;;;;;;;;;;-1:-1:-1;34476:209:0;;;;;:::i;:::-;;:::i;:::-;;23013:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23810:210;;;;;;;;;;-1:-1:-1;23810:210:0;;;;;:::i;:::-;;:::i;:::-;;;1886:14:1;;1879:22;1861:41;;1849:2;1834:18;23810:210:0;1721:187:1;21004:27:0;;;;;;;;;;;;;;;;;;;2059:25:1;;;2047:2;2032:18;21004:27:0;1913:177:1;22206:41:0;;;;;;;;;;-1:-1:-1;22206:41:0;;;;-1:-1:-1;;;;;22206:41:0;;;;;;-1:-1:-1;;;;;2285:32:1;;;2267:51;;2255:2;2240:18;22206:41:0;2095:229:1;23290:108:0;;;;;;;;;;-1:-1:-1;23378:12:0;;23290:108;;24968:482;;;;;;;;;;-1:-1:-1;24968:482:0;;;;;:::i;:::-;;:::i;21144:37::-;;;;;;;;;;-1:-1:-1;21144:37:0;;;;;;;;;;;23199:83;;;;;;;;;;-1:-1:-1;23199:83:0;;20685:1;2932:36:1;;2920:2;2905:18;23199:83:0;2790:184:1;37369:136:0;;;;;;;;;;-1:-1:-1;37369:136:0;;;;;:::i;:::-;;:::i;20816:31::-;;;;;;;;;;;;;;;;24028:280;;;;;;;;;;-1:-1:-1;24028:280:0;;;;;:::i;:::-;;:::i;26387:174::-;;;;;;;;;;-1:-1:-1;26387:174:0;;;;;:::i;:::-;;:::i;37632:186::-;;;;;;;;;;-1:-1:-1;37632:186:0;;;;;:::i;:::-;;:::i;22301:28::-;;;;;;;;;;-1:-1:-1;22301:28:0;;;;-1:-1:-1;;;;;22301:28:0;;;34105:126;;;;;;;;;;-1:-1:-1;34105:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;34195:28:0;34171:4;34195:28;;;:19;:28;;;;;;;;;34105:126;37826:195;;;;;;;;;;-1:-1:-1;37826:195:0;;;;;:::i;:::-;;:::i;22338:27::-;;;;;;;;;;;;;;;;20695:33;;;;;;;;;;;;;;;;34693:334;;;;;;;;;;-1:-1:-1;34693:334:0;;;;;:::i;:::-;;:::i;36250:288::-;;;;;;;;;;-1:-1:-1;36250:288:0;;;;;:::i;:::-;;:::i;36782:128::-;;;;;;;;;;-1:-1:-1;36782:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;36873:29:0;36849:4;36873:29;;;:20;:29;;;;;;;;;36782:128;35268:524;;;;;;;;;;-1:-1:-1;35268:524:0;;;;;:::i;:::-;;:::i;36918:94::-;;;;;;;;;;-1:-1:-1;36918:94:0;;;;;:::i;:::-;;:::i;37193:168::-;;;;;;;;;;-1:-1:-1;37193:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;37320:33:0;37291:4;37320:33;;;:24;:33;;;;;;;;;37193:168;21071:30;;;;;;;;;;-1:-1:-1;21071:30:0;;;;;;;;;;;23406:187;;;;;;;;;;-1:-1:-1;23406:187:0;;;;;:::i;:::-;;:::i;2808:103::-;;;;;;;;;;;;;:::i;22384:31::-;;;;;;;;;;;;;;;;21108:29;;;;;;;;;;-1:-1:-1;21108:29:0;;;;;;;;;;;2157:87;;;;;;;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;2230:6:0;2157:87;;23104;;;;;;;;;;;;;:::i;37513:111::-;;;;;;;;;;-1:-1:-1;37513:111:0;;;;;:::i;:::-;;:::i;24316:420::-;;;;;;;;;;-1:-1:-1;24316:420:0;;;;;:::i;:::-;;:::i;24744:216::-;;;;;;;;;;-1:-1:-1;24744:216:0;;;;;:::i;:::-;;:::i;36546:86::-;;;;;;;;;;-1:-1:-1;36546:86:0;;;;;:::i;:::-;;:::i;21502:43::-;;;;;;;;;;-1:-1:-1;21502:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20776:33;;;;;;;;;;;;;;;;33773:324;;;;;;;;;;-1:-1:-1;33773:324:0;;;;;:::i;:::-;;:::i;38029:183::-;;;;;;;;;;-1:-1:-1;38029:183:0;;;;;:::i;:::-;;:::i;35944:133::-;;;;;;;;;;-1:-1:-1;35944:133:0;;;;;:::i;:::-;;:::i;27676:74::-;;;;;;;;;;;;;:::i;37020:165::-;;;;;;;;;;-1:-1:-1;37020:165:0;;;;;:::i;:::-;;:::i;36640:134::-;;;;;;;;;;-1:-1:-1;36640:134:0;;;;;:::i;:::-;;:::i;23601:201::-;;;;;;;;;;-1:-1:-1;23601:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;23767:18:0;;;23735:7;23767:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23601:201;35800:136;;;;;;;;;;-1:-1:-1;35800:136:0;;;;;:::i;:::-;;:::i;26569:543::-;;;;;;;;;;;;;:::i;20949:48::-;;;;;;;;;;;;;;;;36085:157;;;;;;;;;;-1:-1:-1;36085:157:0;;;;;:::i;:::-;;:::i;20735:34::-;;;;;;;;;;;;;;;;34239:229;;;;;;;;;;-1:-1:-1;34239:229:0;;;;;:::i;:::-;;:::i;3066:201::-;;;;;;;;;;-1:-1:-1;3066:201:0;;;;;:::i;:::-;;:::i;38220:186::-;;;;;;;;;;-1:-1:-1;38220:186:0;;;;;:::i;:::-;;:::i;26301:76::-;;;;;;;;;;;;;:::i;34476:209::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;;;;;;;;;34593:13:::1;::::0;-1:-1:-1;;;;;34585:21:0;;::::1;34593:13:::0;::::1;34585:21;;34577:61;;;::::0;-1:-1:-1;;;34577:61:0;;7263:2:1;34577:61:0::1;::::0;::::1;7245:21:1::0;7302:2;7282:18;;;7275:30;7341:29;7321:18;;;7314:57;7388:18;;34577:61:0::1;7061:351:1::0;34577:61:0::1;34649:28;34665:4;34671:5;34649:15;:28::i;:::-;34476:209:::0;;:::o;23013:83::-;23050:13;23083:5;23076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23013:83;:::o;23810:210::-;23929:4;23951:39;943:10;23974:7;23983:6;23951:8;:39::i;:::-;-1:-1:-1;24008:4:0;23810:210;;;;:::o;24968:482::-;25108:4;25125:36;25135:6;25143:9;25154:6;25125:9;:36::i;:::-;-1:-1:-1;;;;;25199:19:0;;25172:24;25199:19;;;:11;:19;;;;;;;;943:10;25199:33;;;;;;;;25265:26;;;;25243:109;;;;-1:-1:-1;;;25243:109:0;;8004:2:1;25243:109:0;;;7986:21:1;8043:2;8023:18;;;8016:30;8082:34;8062:18;;;8055:62;-1:-1:-1;;;8133:18:1;;;8126:31;8174:19;;25243:109:0;7802:397:1;25243:109:0;25363:57;25372:6;943:10;25394:25;25413:6;25394:16;:25;:::i;:::-;25363:8;:57::i;:::-;-1:-1:-1;25438:4:0;;24968:482;-1:-1:-1;;;;24968:482:0:o;37369:136::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;37453:44:::1;::::0;-1:-1:-1;;;37453:44:0;;37477:10:::1;37453:44;::::0;::::1;8640:51:1::0;8707:18;;;8700:34;;;-1:-1:-1;;;;;37453:23:0;::::1;::::0;::::1;::::0;8613:18:1;;37453:44:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37369:136:::0;;:::o;24028:280::-;943:10;24126:4;24220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24220:34:0;;;;;;;;;;24126:4;;24148:130;;24198:7;;24220:47;;24257:10;;24220:47;:::i;26387:174::-;26479:4;;26464:10;;-1:-1:-1;;;;;26464:10:0;;;26479:4;;26456:27;26448:70;;;;-1:-1:-1;;;26448:70:0;;9330:2:1;26448:70:0;;;9312:21:1;9369:2;9349:18;;;9342:30;9408:32;9388:18;;;9381:60;9458:18;;26448:70:0;9128:354:1;26448:70:0;26529:24;26543:9;26529:13;:24::i;:::-;26387:174;:::o;37632:186::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37703:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;37702:21;37694:58;;;::::0;-1:-1:-1;;;37694:58:0;;9689:2:1;37694:58:0::1;::::0;::::1;9671:21:1::0;9728:2;9708:18;;;9701:30;9767:26;9747:18;;;9740:54;9811:18;;37694:58:0::1;9487:348:1::0;37694:58:0::1;-1:-1:-1::0;;;;;37763:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;37763:27:0::1;37786:4;37763:27;::::0;;37632:186::o;37826:195::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37906:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;37898:57;;;::::0;-1:-1:-1;;;37898:57:0;;10042:2:1;37898:57:0::1;::::0;::::1;10024:21:1::0;10081:2;10061:18;;;10054:30;10120:26;10100:18;;;10093:54;10164:18;;37898:57:0::1;9840:348:1::0;37898:57:0::1;-1:-1:-1::0;;;;;37966:20:0::1;37989:5;37966:20:::0;;;:13:::1;:20;::::0;;;;:28;;-1:-1:-1;;37966:28:0::1;::::0;;37826:195::o;34693:334::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;34840:14:::1;:29:::0;;;34880:15:::1;:31:::0;;;34922:14:::1;:29:::0;;;34939:12;34976:28:::1;34898:13:::0;34857:12;34976:28:::1;:::i;:::-;:43;;;;:::i;:::-;34962:11;:57:::0;-1:-1:-1;;;34693:334:0:o;36250:288::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36414:11:::1;:26:::0;;36451:18:::1;:40:::0;;;;36502:28;::::1;;-1:-1:-1::0;;36414:26:0;::::1;;;;36502:28:::0;;;;-1:-1:-1;;36502:28:0;;;;;;;;;;::::1;::::0;;36250:288::o;35268:524::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;35391:15:::1;::::0;-1:-1:-1;;;;;35369:38:0;;::::1;35391:15:::0;::::1;35369:38;;35347:132;;;::::0;-1:-1:-1;;;35347:132:0;;10395:2:1;35347:132:0::1;::::0;::::1;10377:21:1::0;10434:2;10414:18;;;10407:30;10473:34;10453:18;;;10446:62;-1:-1:-1;;;10524:18:1;;;10517:42;10576:19;;35347:132:0::1;10193:408:1::0;35347:132:0::1;35537:15;::::0;35495:59:::1;::::0;-1:-1:-1;;;;;35537:15:0;;::::1;::::0;35495:59;::::1;::::0;::::1;::::0;35537:15:::1;::::0;35495:59:::1;35565:15;:48:::0;;-1:-1:-1;;;;;;35565:48:0::1;-1:-1:-1::0;;;;;35565:48:0;::::1;::::0;;::::1;::::0;;;35667:25:::1;::::0;;-1:-1:-1;;;35667:25:0;;;;-1:-1:-1;;35565:48:0;35667:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;35565:48;35667:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35649:55:0::1;;35713:4;35720:15;;;;;;;;;-1:-1:-1::0;;;;;35720:15:0::1;-1:-1:-1::0;;;;;35720:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35649:94;::::0;-1:-1:-1;;;;;;35649:94:0::1;::::0;;;;;;-1:-1:-1;;;;;11092:15:1;;;35649:94:0::1;::::0;::::1;11074:34:1::0;11144:15;;11124:18;;;11117:43;11009:18;;35649:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35754:13;:30:::0;;-1:-1:-1;;;;;;35754:30:0::1;-1:-1:-1::0;;;;;35754:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;35268:524:0:o;36918:94::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36986:12:::1;:18:::0;36918:94::o;23406:187::-;23525:7;23557:28;23577:7;23557:19;:28::i;:::-;23550:35;23406:187;-1:-1:-1;;23406:187:0:o;2808:103::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;2873:30:::1;2900:1;2873:18;:30::i;:::-;2808:103::o:0;23104:87::-;23143:13;23176:7;23169:14;;;;;:::i;37513:111::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;37579:37:::1;::::0;37587:10:::1;::::0;37579:37;::::1;;;::::0;37608:7;;37579:37:::1;::::0;;;37608:7;37587:10;37579:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;24316:420:::0;943:10;24419:4;24468:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24468:34:0;;;;;;;;;;24535:35;;;;24513:115;;;;-1:-1:-1;;;24513:115:0;;11373:2:1;24513:115:0;;;11355:21:1;11412:2;11392:18;;;11385:30;11451:32;11431:18;;;11424:60;11501:18;;24513:115:0;11171:354:1;24513:115:0;24639:67;943:10;24662:7;24671:34;24690:15;24671:16;:34;:::i;24639:67::-;-1:-1:-1;24724:4:0;;24316:420;-1:-1:-1;;;24316:420:0:o;24744:216::-;24866:4;24888:42;943:10;24912:9;24923:6;24888:9;:42::i;36546:86::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36610:8:::1;:14:::0;36546:86::o;33773:324::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33880:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;33858:131;;;::::0;-1:-1:-1;;;33858:131:0;;11732:2:1;33858:131:0::1;::::0;::::1;11714:21:1::0;11771:2;11751:18;;;11744:30;11810:34;11790:18;;;11783:62;-1:-1:-1;;;11861:18:1;;;11854:39;11910:19;;33858:131:0::1;11530:405:1::0;33858:131:0::1;-1:-1:-1::0;;;;;34000:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;34000:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34055:34;;1861:41:1;;;34055:34:0::1;::::0;1834:18:1;34055:34:0::1;;;;;;;33773:324:::0;;:::o;38029:183::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;38110:7:::1;38105:100;38127:6;:13;38123:1;:17;;;38105:100;;;38189:4;38162:13;:24;38176:6;38183:1;38176:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38162:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38162:24:0;:31;;-1:-1:-1;;38162:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38142:3;::::1;::::0;::::1;:::i;:::-;;;;38105:100;;35944:133:::0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36012:10:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36012:21:0;;::::1;;::::0;;36049:20:::1;::::0;::::1;::::0;::::1;::::0;36025:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;36049:20:0::1;;;;;;;;35944:133:::0;:::o;27676:74::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;27729:6:::1;:13:::0;;-1:-1:-1;;27729:13:0::1;27738:4;27729:13;::::0;;27676:74::o;37020:165::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37133:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;37133:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37020:165::o;36640:134::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36726:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;36726:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36640:134::o;35800:136::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;35869:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;35869:22:0;;::::1;;::::0;;35907:21:::1;::::0;::::1;::::0;::::1;::::0;35883:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;26569:543:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;26674:13:::1;::::0;26744:26:::1;::::0;;-1:-1:-1;;;26744:26:0;;;;-1:-1:-1;;;;;26674:13:0;;::::1;::::0;26617:35:::1;::::0;26674:13;;26744:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;26674:13;26744:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26726:56:0::1;;26791:4;26798:16;-1:-1:-1::0;;;;;26798:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26726:96;::::0;-1:-1:-1;;;;;;26726:96:0::1;::::0;;;;;;-1:-1:-1;;;;;11092:15:1;;;26726:96:0::1;::::0;::::1;11074:34:1::0;11144:15;;11124:18;;;11117:43;11009:18;;26726:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26835:15;:34:::0;;-1:-1:-1;;;;;26835:34:0;;::::1;-1:-1:-1::0;;;;;;26835:34:0;;::::1;::::0;::::1;::::0;;;26880:13:::1;:30:::0;;;;::::1;::::0;;;::::1;;::::0;;26701:121;;-1:-1:-1;26923:62:0::1;::::0;26940:4:::1;::::0;-1:-1:-1;;26923:8:0::1;:62::i;:::-;26996:56;27005:7;2203::::0;2230:6;-1:-1:-1;;;;;2230:6:0;;2157:87;27005:7:::1;27022:15;::::0;-1:-1:-1;;;;;27022:15:0::1;-1:-1:-1::0;;26996:8:0::1;:56::i;:::-;27065:37;27081:14;27097:4;27065:15;:37::i;36085:157::-:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36161:18:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36161:29:0;;::::1;;::::0;;36206:28:::1;::::0;::::1;::::0;::::1;::::0;36182:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;34239:229:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;34381:15:::1;:34:::0;;-1:-1:-1;;;;;;34381:34:0::1;;-1:-1:-1::0;;;;;34381:34:0;;::::1;;;::::0;;34426:15:::1;:34:::0;;-1:-1:-1;;;;;;34426:34:0::1;::::0;;;::::1;;::::0;;34239:229::o;3066:201::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3155:22:0;::::1;3147:73;;;::::0;-1:-1:-1;;;3147:73:0;;12454:2:1;3147:73:0::1;::::0;::::1;12436:21:1::0;12493:2;12473:18;;;12466:30;12532:34;12512:18;;;12505:62;-1:-1:-1;;;12583:18:1;;;12576:36;12629:19;;3147:73:0::1;12252:402:1::0;3147:73:0::1;3231:28;3250:8;3231:18;:28::i;38220:186::-:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;38303:7:::1;38298:101;38320:6;:13;38316:1;:17;;;38298:101;;;38382:5;38355:13;:24;38369:6;38376:1;38369:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38355:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38355:24:0;:32;;-1:-1:-1;;38355:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38335:3;::::1;::::0;::::1;:::i;:::-;;;;38298:101;;26301:76:::0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;26352:9:::1;:17:::0;;-1:-1:-1;;26352:17:0::1;::::0;;26301:76::o;35035:225::-;-1:-1:-1;;;;;35127:17:0;;;;;;:11;:17;;;;;;;;:26;;;;;;;35105:109;;;;-1:-1:-1;;;35105:109:0;;12861:2:1;35105:109:0;;;12843:21:1;12900:2;12880:18;;;12873:30;12939:34;12919:18;;;12912:62;-1:-1:-1;;;12990:18:1;;;12983:31;13031:19;;35105:109:0;12659:397:1;35105:109:0;-1:-1:-1;;;;;35225:17:0;;;;;;;;:11;:17;;;;;:25;;-1:-1:-1;;35225:25:0;;;;;;;;;;35035:225::o;30726:355::-;-1:-1:-1;;;;;30853:19:0;;30845:61;;;;-1:-1:-1;;;30845:61:0;;13263:2:1;30845:61:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:31;13321:18;;;13314:59;13390:18;;30845:61:0;13061:353:1;30845:61:0;-1:-1:-1;;;;;30925:21:0;;30917:61;;;;-1:-1:-1;;;30917:61:0;;13621:2:1;30917:61:0;;;13603:21:1;13660:2;13640:18;;;13633:30;13699:29;13679:18;;;13672:57;13746:18;;30917:61:0;13419:351:1;30917:61:0;-1:-1:-1;;;;;30989:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31041:32;;2059:25:1;;;31041:32:0;;2032:18:1;31041:32:0;;;;;;;30726:355;;;:::o;27758:2347::-;27904:6;;;;;:44;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;27931:17:0;;;2230:6;;27931:17;27904:44;:85;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;27969:20:0;;;2230:6;;27969:20;27904:85;27882:143;;;;-1:-1:-1;;;27882:143:0;;13977:2:1;27882:143:0;;;13959:21:1;14016:1;13996:18;;;13989:29;-1:-1:-1;;;14034:18:1;;;14027:38;14082:18;;27882:143:0;13775:331:1;27882:143:0;-1:-1:-1;;;;;28047:21:0;;;;;;:13;:21;;;;;;;;28046:22;28038:56;;;;-1:-1:-1;;;28038:56:0;;14313:2:1;28038:56:0;;;14295:21:1;14352:2;14332:18;;;14325:30;-1:-1:-1;;;14371:18:1;;;14364:51;14432:18;;28038:56:0;14111:345:1;28038:56:0;-1:-1:-1;;;;;28114:24:0;;;;;;:13;:24;;;;;;;;28113:25;28105:62;;;;-1:-1:-1;;;28105:62:0;;14663:2:1;28105:62:0;;;14645:21:1;14702:2;14682:18;;;14675:30;14741:26;14721:18;;;14714:54;14785:18;;28105:62:0;14461:348:1;28105:62:0;28198:4;;-1:-1:-1;;;;;28188:14:0;;;28198:4;;28188:14;;28180:57;;;;-1:-1:-1;;;28180:57:0;;15016:2:1;28180:57:0;;;14998:21:1;15055:2;15035:18;;;15028:30;15094:32;15074:18;;;15067:60;15144:18;;28180:57:0;14814:354:1;28180:57:0;28269:4;;-1:-1:-1;;;;;28256:17:0;;;28269:4;;28256:17;;28248:58;;;;-1:-1:-1;;;28248:58:0;;15375:2:1;28248:58:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453;15433:18;;;15426:58;15501:18;;28248:58:0;15173:352:1;28248:58:0;28322:9;;;;;;;28319:823;;;2203:7;2230:6;-1:-1:-1;;;;;28352:17:0;;;2230:6;;28352:17;;;;:41;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;28373:20:0;;;2230:6;;28373:20;;28352:41;:62;;;;-1:-1:-1;28410:4:0;;-1:-1:-1;;;;;28397:17:0;;;28410:4;;28397:17;;28352:62;:83;;;;-1:-1:-1;28431:4:0;;-1:-1:-1;;;;;28418:17:0;;;28431:4;;28418:17;;28352:83;28349:780;;;28458:20;28510:3;28498:8;;28482:13;23378:12;;;23290:108;28482:13;:24;;;;:::i;:::-;28481:32;;;;:::i;:::-;28458:55;;28545:18;28599:3;28583:12;;28567:13;23378:12;;;23290:108;28567:13;:28;;;;:::i;:::-;28566:36;;;;:::i;:::-;28545:57;;28674:12;28664:6;:22;;:54;;;-1:-1:-1;;;;;;28690:28:0;;;;;;:20;:28;;;;;;;;28664:54;28656:84;;;;-1:-1:-1;;;28656:84:0;;16127:2:1;28656:84:0;;;16109:21:1;16166:2;16146:18;;;16139:30;-1:-1:-1;;;16185:18:1;;;16178:47;16242:18;;28656:84:0;15925:341:1;28656:84:0;2203:7;2230:6;-1:-1:-1;;;;;28787:17:0;;;2230:6;;28787:17;;;;:47;;-1:-1:-1;;;;;;28808:26:0;;28829:4;28808:26;;28787:47;:77;;;;-1:-1:-1;28859:4:0;;-1:-1:-1;;;;;28838:26:0;;;28859:4;;28838:26;;28787:77;:107;;;;-1:-1:-1;28881:13:0;;-1:-1:-1;;;;;28868:26:0;;;28881:13;;28868:26;;28787:107;28761:351;;;28937:22;28962:20;28972:9;28962;:20::i;:::-;-1:-1:-1;;;;;29013:35:0;;;;;;:24;:35;;;;;;28937:45;;-1:-1:-1;29013:35:0;;;:78;;-1:-1:-1;29080:10:0;29053:23;29070:6;29053:14;:23;:::i;:::-;:37;;29013:78;29005:87;;;;;;28914:198;28761:351;28437:692;;28349:780;29154:28;29185:24;29203:4;29185:9;:24::i;:::-;29325:18;;29374:11;;29154:55;;-1:-1:-1;29252:21:0;;29301:42;;;;;29374:11;;;;;:22;;;;;29389:7;29374:22;:35;;;;-1:-1:-1;29401:8:0;;;;29400:9;29374:35;:59;;;;-1:-1:-1;;;;;;29414:19:0;;;;;;:11;:19;;;;;;;;29413:20;29374:59;:97;;;;-1:-1:-1;29455:15:0;;-1:-1:-1;;;;;29437:34:0;;;29455:15;;29437:34;;29374:97;:118;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;29475:17:0;;;2230:6;;29475:17;;29374:118;:142;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;29496:20:0;;;2230:6;;29496:20;;29374:142;29356:475;;;29543:8;:15;;-1:-1:-1;;29543:15:0;29554:4;29543:15;;;29580:12;;29543:15;29580:12;29575:95;;29636:18;;29613:41;;29575:95;29684:57;29697:20;29719:21;29684:12;:57::i;:::-;29773:15;29758:12;:30;29803:8;:16;;-1:-1:-1;;29803:16:0;;;29356:475;29847:32;29861:6;29869:9;29847:13;:32::i;:::-;29843:197;;;29896:12;29936:3;29921:11;;29912:6;:20;;;;:::i;:::-;29911:28;;;;:::i;:::-;29896:43;-1:-1:-1;29954:14:0;29896:43;29954:14;;:::i;:::-;;;29983:45;30000:6;30016:4;30023;29983:16;:45::i;:::-;29881:159;29843:197;30052:43;30069:6;30077:9;30088:6;30052:16;:43::i;:::-;27871:2234;;;27758:2347;;;:::o;25458:148::-;25519:10;:43;;-1:-1:-1;;;;;;25519:43:0;-1:-1:-1;;;;;25519:43:0;;;;;25573:25;25519:43;25573:14;:25::i;32196:136::-;32290:10;;:34;;-1:-1:-1;;;32290:34:0;;-1:-1:-1;;;;;2285:32:1;;;32290:34:0;;;2267:51:1;32263:7:0;;32290:10;;:25;;2240:18:1;;32290:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3427:191::-;3501:16;3520:6;;-1:-1:-1;;;;;3537:17:0;;;-1:-1:-1;;;;;;3537:17:0;;;;;;3570:40;;3520:6;;;;;;;3570:40;;3501:16;3570:40;3490:128;3427:191;:::o;32493:1272::-;32580:1;32570:6;:11;32566:50;;32493:1272;;:::o;32566:50::-;32678:15;;32628:27;;32678:15;;;-1:-1:-1;;;;;32678:15:0;32670:38;32666:132;;32775:11;;32757:14;;32748:23;;:6;:23;:::i;:::-;32747:39;;;;:::i;:::-;32725:61;;32666:132;32810:26;32839:28;32848:19;32839:6;:28;:::i;:::-;32810:57;-1:-1:-1;32878:27:0;32908:22;32929:1;32810:57;32908:22;:::i;:::-;32878:52;-1:-1:-1;32941:26:0;32970:40;32878:52;32970:18;:40;:::i;:::-;32941:69;-1:-1:-1;33021:23:0;33047:41;33069:19;33047;:41;:::i;:::-;33021:67;-1:-1:-1;33125:21:0;33157:36;33021:67;33157:19;:36::i;:::-;33204:21;33270:6;33229:37;33253:13;33229:21;:37;:::i;:::-;33228:48;;;;:::i;:::-;33204:72;-1:-1:-1;33289:23:0;33355:15;33316:35;33332:19;33204:72;33316:35;:::i;:::-;33315:55;;;;:::i;:::-;33289:81;-1:-1:-1;33381:23:0;33407:31;33289:81;33407:13;:31;:::i;:::-;33381:57;-1:-1:-1;33455:19:0;;33451:102;;33499:15;;33491:50;;33499:15;;;;-1:-1:-1;;;;;33499:15:0;;33491:50;;;;;;;;;;;;33499:15;33491:50;;;;;;;;;;;;;;;;;;;;;33451:102;33565:49;33578:18;33598:15;33565:12;:49::i;:::-;33630:127;;;16662:25:1;;;16718:2;16703:18;;16696:34;;;16746:18;;;16739:34;;;33630:127:0;;16650:2:1;16635:18;33630:127:0;;;;;;;32555:1210;;;;;;;;;32493:1272;;:::o;27157:511::-;27324:13;;27236:4;;;;-1:-1:-1;;;;;27306:32:0;;;27324:13;;27306:32;;:71;;-1:-1:-1;27363:13:0;;-1:-1:-1;;;;;27342:35:0;;;27363:13;;27342:35;27306:71;27288:142;;;-1:-1:-1;27414:4:0;27288:142;-1:-1:-1;;;;;27446:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;27477:30:0;;;;;;:19;:30;;;;;;;;27446:61;27442:109;;;-1:-1:-1;27534:5:0;27442:109;27567:8;;;;;:23;;-1:-1:-1;27580:10:0;;;;;;;27579:11;27567:23;27563:71;;;-1:-1:-1;27617:5:0;27563:71;27653:7;27157:511;-1:-1:-1;;;27157:511:0:o;30113:605::-;30261:4;;-1:-1:-1;;;;;30251:14:0;;;30261:4;;30251:14;;30243:57;;;;-1:-1:-1;;;30243:57:0;;15016:2:1;30243:57:0;;;14998:21:1;15055:2;15035:18;;;15028:30;15094:32;15074:18;;;15067:60;15144:18;;30243:57:0;14814:354:1;30243:57:0;30332:4;;-1:-1:-1;;;;;30319:17:0;;;30332:4;;30319:17;;30311:58;;;;-1:-1:-1;;;30311:58:0;;15375:2:1;30311:58:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453;15433:18;;;15426:58;15501:18;;30311:58:0;15173:352:1;30311:58:0;30390:21;30414:39;30446:6;30414:27;30434:6;30414:19;:27::i;:::-;:31;;:39::i;:::-;30390:63;;30464:23;30490:42;30525:6;30490:30;30510:9;30490:19;:30::i;:::-;:34;;:42::i;:::-;30464:68;;30545:48;30571:6;30579:13;30545:25;:48::i;:::-;30604:53;30630:9;30641:15;30604:25;:53::i;:::-;30692:9;-1:-1:-1;;;;;30675:35:0;30684:6;-1:-1:-1;;;;;30675:35:0;;30703:6;30675:35;;;;2059:25:1;;2047:2;2032:18;;1913:177;30675:35:0;;;;;;;;30232:486;;30113:605;;;:::o;25942:351::-;26010:13;;;;;;;26002:45;;;;-1:-1:-1;;;26002:45:0;;16986:2:1;26002:45:0;;;16968:21:1;17025:2;17005:18;;;16998:30;-1:-1:-1;;;17044:18:1;;;17037:49;17103:18;;26002:45:0;16784:343:1;26002:45:0;-1:-1:-1;;;;;26060:28:0;;;;;;;:19;:28;;;;;;;;:35;;26091:4;-1:-1:-1;;26060:35:0;;;;;;;;26106:20;:29;;;;;:36;;;;;;;;26153:24;:33;;;;;:40;;;;;;;;;26224:13;26206:45;;26060:28;;26224:13;-1:-1:-1;;26206:8:0;:45::i;:::-;-1:-1:-1;26264:13:0;:21;;-1:-1:-1;;26264:21:0;;;25942:351::o;31089:512::-;31177:16;;;31191:1;31177:16;;;;;;;;31153:21;;31177:16;;;;;;;;;;-1:-1:-1;31177:16:0;31153:40;;31232:4;31214;31219:1;31214:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31214:23:0;;;:7;;;;;;;;;;:23;;;;31258:15;;:22;;;-1:-1:-1;;;31258:22:0;;;;:15;;;;;:20;;:22;;;;;31214:7;;31258:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31248:4;31253:1;31248:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31248:32:0;;;:7;;;;;;;;;:32;31333:15;;31301:57;;31318:4;;31333:15;31351:6;31301:8;:57::i;:::-;31371:15;;:222;;-1:-1:-1;;;31371:222:0;;-1:-1:-1;;;;;31371:15:0;;;;:66;;:222;;31452:6;;31371:15;;31520:4;;31547;;31567:15;;31371:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31609:395;31714:15;;31682:57;;31699:4;;-1:-1:-1;;;;;31714:15:0;31732:6;31682:8;:57::i;:::-;31750:15;;31940;;31750:246;;-1:-1:-1;;;31750:246:0;;31819:4;31750:246;;;18458:34:1;18508:18;;;18501:34;;;31750:15:0;18551:18:1;;;18544:34;;;18594:18;;;18587:34;-1:-1:-1;;;;;31940:15:0;;;18637:19:1;;;18630:44;31970:15:0;18690:19:1;;;18683:35;31750:15:0;;;:31;;31789:6;;18392:19:1;;31750:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31609:395;;:::o;9942:98::-;10000:7;10027:5;10031:1;10027;:5;:::i;9561:98::-;9619:7;9646:5;9650:1;9646;:5;:::i;32344:141::-;32432:10;;:45;;-1:-1:-1;;;32432:45:0;;-1:-1:-1;;;;;8658:32:1;;;32432:45:0;;;8640:51:1;8707:18;;;8700:34;;;32432:10:0;;;;:27;;8613:18:1;;32432:45:0;8466:274:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:118::-;375:5;368:13;361:21;354:5;351:32;341:60;;397:1;394;387:12;412:382;477:6;485;538:2;526:9;517:7;513:23;509:32;506:52;;;554:1;551;544:12;506:52;593:9;580:23;612:31;637:5;612:31;:::i;:::-;662:5;-1:-1:-1;719:2:1;704:18;;691:32;732:30;691:32;732:30;:::i;:::-;781:7;771:17;;;412:382;;;;;:::o;799:597::-;911:4;940:2;969;958:9;951:21;1001:6;995:13;1044:6;1039:2;1028:9;1024:18;1017:34;1069:1;1079:140;1093:6;1090:1;1087:13;1079:140;;;1188:14;;;1184:23;;1178:30;1154:17;;;1173:2;1150:26;1143:66;1108:10;;1079:140;;;1237:6;1234:1;1231:13;1228:91;;;1307:1;1302:2;1293:6;1282:9;1278:22;1274:31;1267:42;1228:91;-1:-1:-1;1380:2:1;1359:15;-1:-1:-1;;1355:29:1;1340:45;;;;1387:2;1336:54;;799:597;-1:-1:-1;;;799:597:1:o;1401:315::-;1469:6;1477;1530:2;1518:9;1509:7;1505:23;1501:32;1498:52;;;1546:1;1543;1536:12;1498:52;1585:9;1572:23;1604:31;1629:5;1604:31;:::i;:::-;1654:5;1706:2;1691:18;;;;1678:32;;-1:-1:-1;;;1401:315:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;2979:247::-;3038:6;3091:2;3079:9;3070:7;3066:23;3062:32;3059:52;;;3107:1;3104;3097:12;3059:52;3146:9;3133:23;3165:31;3190:5;3165:31;:::i;3439:316::-;3516:6;3524;3532;3585:2;3573:9;3564:7;3560:23;3556:32;3553:52;;;3601:1;3598;3591:12;3553:52;-1:-1:-1;;3624:23:1;;;3694:2;3679:18;;3666:32;;-1:-1:-1;3745:2:1;3730:18;;;3717:32;;3439:316;-1:-1:-1;3439:316:1:o;3760:444::-;3831:6;3839;3847;3900:2;3888:9;3879:7;3875:23;3871:32;3868:52;;;3916:1;3913;3906:12;3868:52;3955:9;3942:23;3974:28;3996:5;3974:28;:::i;:::-;4021:5;-1:-1:-1;4073:2:1;4058:18;;4045:32;;-1:-1:-1;4129:2:1;4114:18;;4101:32;4142:30;4101:32;4142:30;:::i;:::-;4191:7;4181:17;;;3760:444;;;;;:::o;4209:180::-;4268:6;4321:2;4309:9;4300:7;4296:23;4292:32;4289:52;;;4337:1;4334;4327:12;4289:52;-1:-1:-1;4360:23:1;;4209:180;-1:-1:-1;4209:180:1:o;4394:127::-;4455:10;4450:3;4446:20;4443:1;4436:31;4486:4;4483:1;4476:15;4510:4;4507:1;4500:15;4526:1121;4610:6;4641:2;4684;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4740:9;4727:23;4769:18;4810:2;4802:6;4799:14;4796:34;;;4826:1;4823;4816:12;4796:34;4864:6;4853:9;4849:22;4839:32;;4909:7;4902:4;4898:2;4894:13;4890:27;4880:55;;4931:1;4928;4921:12;4880:55;4967:2;4954:16;4989:2;4985;4982:10;4979:36;;;4995:18;;:::i;:::-;5041:2;5038:1;5034:10;5073:2;5067:9;5136:2;5132:7;5127:2;5123;5119:11;5115:25;5107:6;5103:38;5191:6;5179:10;5176:22;5171:2;5159:10;5156:18;5153:46;5150:72;;;5202:18;;:::i;:::-;5238:2;5231:22;5288:18;;;5322:15;;;;-1:-1:-1;5364:11:1;;;5360:20;;;5392:19;;;5389:39;;;5424:1;5421;5414:12;5389:39;5448:11;;;;5468:148;5484:6;5479:3;5476:15;5468:148;;;5550:23;5569:3;5550:23;:::i;:::-;5538:36;;5501:12;;;;5594;;;;5468:148;;;5635:6;4526:1121;-1:-1:-1;;;;;;;;4526:1121:1:o;5652:241::-;5708:6;5761:2;5749:9;5740:7;5736:23;5732:32;5729:52;;;5777:1;5774;5767:12;5729:52;5816:9;5803:23;5835:28;5857:5;5835:28;:::i;5898:388::-;5966:6;5974;6027:2;6015:9;6006:7;6002:23;5998:32;5995:52;;;6043:1;6040;6033:12;5995:52;6082:9;6069:23;6101:31;6126:5;6101:31;:::i;:::-;6151:5;-1:-1:-1;6208:2:1;6193:18;;6180:32;6221:33;6180:32;6221:33;:::i;6700:356::-;6902:2;6884:21;;;6921:18;;;6914:30;6980:34;6975:2;6960:18;;6953:62;7047:2;7032:18;;6700:356::o;7417:380::-;7496:1;7492:12;;;;7539;;;7560:61;;7614:4;7606:6;7602:17;7592:27;;7560:61;7667:2;7659:6;7656:14;7636:18;7633:38;7630:161;;;7713:10;7708:3;7704:20;7701:1;7694:31;7748:4;7745:1;7738:15;7776:4;7773:1;7766:15;7630:161;;7417:380;;;:::o;8204:127::-;8265:10;8260:3;8256:20;8253:1;8246:31;8296:4;8293:1;8286:15;8320:4;8317:1;8310:15;8336:125;8376:4;8404:1;8401;8398:8;8395:34;;;8409:18;;:::i;:::-;-1:-1:-1;8446:9:1;;8336:125::o;8745:245::-;8812:6;8865:2;8853:9;8844:7;8840:23;8836:32;8833:52;;;8881:1;8878;8871:12;8833:52;8913:9;8907:16;8932:28;8954:5;8932:28;:::i;8995:128::-;9035:3;9066:1;9062:6;9059:1;9056:13;9053:39;;;9072:18;;:::i;:::-;-1:-1:-1;9108:9:1;;8995:128::o;10606:251::-;10676:6;10729:2;10717:9;10708:7;10704:23;10700:32;10697:52;;;10745:1;10742;10735:12;10697:52;10777:9;10771:16;10796:31;10821:5;10796:31;:::i;11940:127::-;12001:10;11996:3;11992:20;11989:1;11982:31;12032:4;12029:1;12022:15;12056:4;12053:1;12046:15;12072:175;12109:3;12153:4;12146:5;12142:16;12182:4;12173:7;12170:17;12167:43;;;12190:18;;:::i;:::-;12239:1;12226:15;;12072:175;-1:-1:-1;;12072:175:1:o;15530:168::-;15570:7;15636:1;15632;15628:6;15624:14;15621:1;15618:21;15613:1;15606:9;15599:17;15595:45;15592:71;;;15643:18;;:::i;:::-;-1:-1:-1;15683:9:1;;15530:168::o;15703:217::-;15743:1;15769;15759:132;;15813:10;15808:3;15804:20;15801:1;15794:31;15848:4;15845:1;15838:15;15876:4;15873:1;15866:15;15759:132;-1:-1:-1;15905:9:1;;15703:217::o;16271:184::-;16341:6;16394:2;16382:9;16373:7;16369:23;16365:32;16362:52;;;16410:1;16407;16400:12;16362:52;-1:-1:-1;16433:16:1;;16271:184;-1:-1:-1;16271:184:1:o;17132:980::-;17394:4;17442:3;17431:9;17427:19;17473:6;17462:9;17455:25;17499:2;17537:6;17532:2;17521:9;17517:18;17510:34;17580:3;17575:2;17564:9;17560:18;17553:31;17604:6;17639;17633:13;17670:6;17662;17655:22;17708:3;17697:9;17693:19;17686:26;;17747:2;17739:6;17735:15;17721:29;;17768:1;17778:195;17792:6;17789:1;17786:13;17778:195;;;17857:13;;-1:-1:-1;;;;;17853:39:1;17841:52;;17948:15;;;;17913:12;;;;17889:1;17807:9;17778:195;;;-1:-1:-1;;;;;;;18029:32:1;;;;18024:2;18009:18;;18002:60;-1:-1:-1;;;18093:3:1;18078:19;18071:35;17990:3;17132:980;-1:-1:-1;;;17132:980:1:o;18729:306::-;18817:6;18825;18833;18886:2;18874:9;18865:7;18861:23;18857:32;18854:52;;;18902:1;18899;18892:12;18854:52;18931:9;18925:16;18915:26;;18981:2;18970:9;18966:18;18960:25;18950:35;;19025:2;19014:9;19010:18;19004:25;18994:35;;18729:306;;;;;:::o
Swarm Source
ipfs://cd9b82e86bc36abe9df073832f1e4e454d845a4948ddb56422466c0303e7b408
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.