Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 $Rudoshi
Holders
85
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Rudoshi
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-27 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Wish.sol interface IUniswapV2Router01 { 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 removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); 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; } 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; } pragma solidity =0.8.17; contract Rudoshi is IERC20, Ownable { using Address for address; mapping(address => uint256) private _balance; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isBlackedlisted; address[] private _excluded; address payable private marketingAddress; address payable private developmentAddress; address payable private teamAddress; address payable private stakingAddress; address payable public lottoryWinner; uint256 private constant MAX = ~uint256(0); uint256 private totalSup; string private _name; string private _symbol; uint8 private _decimals; address [] public lottoAddresses; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private _marketingFee; uint256 private _previousmarketingFee = _marketingFee; uint256 private _developmentFee; uint256 private _previousDevelopmentFee = _developmentFee; uint256 private _teamFee; uint256 private _previousTeamFee = _teamFee; uint256 private _totalBuyTaxes; uint256 private _previousTotalBuyTaxes = _totalBuyTaxes; uint256 private _totalSellTaxes; uint256 private _previousTotalSellTaxes = _totalSellTaxes; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; uint256 public numTokensSellToAddToLiquidity; uint256 private _launchTime; bool public _isLaunched; uint256 private _extraMarketingSell; uint256 private _extraDevSell; uint256 private _extraLiquiditySell; uint256 private _extraTeamSell; uint256 _previousExtraMarketingSell = _extraMarketingSell; uint256 _previousExtraDevSell = _extraDevSell; uint256 _previousExtraLiquiditySell = _extraLiquiditySell; uint256 _previousExtraTeamSell = _extraTeamSell; uint256 public _maxWalletSize; uint256 private randNum; bool private sell = false; uint256 private totalSellAmt=0; uint256 private totalSellAmtLimit=0; uint256 private startTimeOnSellLimit=0; uint256 private totalSellDivisor=0; bool private swapAndLiquifyEnabled = true; bool private biggestBuyEnabled = false; bool private maxSellPerDayEnabled = false; bool private lottoryEnabled = false; uint256 private biggestBuy; address private bigDog; uint256 public minLottoAmount; uint256 private totalLiquidity = 0; uint256 private totalMarketing = 0; uint256 private totalTeam = 0; uint256 private totalDev = 0; modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor( ) payable { _name = "Rudoshi"; _symbol = "$Rudoshi"; _decimals = 9; totalSup = 100000000000000000; _maxWalletSize = 2000000000000000; //%2 _liquidityFee = 1; _previousLiquidityFee = 1; _marketingFee = 2; _previousmarketingFee = 2; _developmentFee = 1; _previousDevelopmentFee = 1; _teamFee = 2; _previousTeamFee = 2; _totalBuyTaxes = 6; _previousTotalBuyTaxes = 6; _extraMarketingSell =0; _extraDevSell =0; _extraLiquiditySell = 0; _extraTeamSell = 1; _totalSellTaxes = 0; _previousTotalSellTaxes = 0; totalLiquidity = 0; totalMarketing = 0; totalTeam = 0; totalDev = 0; minLottoAmount = 0; numTokensSellToAddToLiquidity = 200000000000000; // 0.2% of an ETH _balance[owner()] = totalSup; address router_=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; marketingAddress=payable(0x1B5BC1B4dE6bD58B9f8c5c98c74DAB0Fb7cdF57a); developmentAddress=payable(0x7486a2b8B8D2424F8D41cd70Ab390CAAEE7672cE); teamAddress=payable(0x84784B61C1c0b0588798ea2863609C01BABA1c7d); stakingAddress=payable(0x7486a2b8B8D2424F8D41cd70Ab390CAAEE7672cE); lottoryWinner=payable(0x7486a2b8B8D2424F8D41cd70Ab390CAAEE7672cE); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; random(); emit Transfer(address(0), owner(), totalSup); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return totalSup; } function balanceOf(address account) public view override returns (uint256) { return _balance[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][msg.sender]-amount ); return true; } function random() private { uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _msgSender()))) % 60; randNum = randomnumber + 1; } function randomTimePeriod() private view returns (uint256) { uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _msgSender()))) % 120; return randomnumber + 1; } function randomLottoPicker(uint num) private view returns (uint256) { uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _msgSender()))) % num; return randomnumber; } function setSellFees(uint256 extMarkFee, uint256 extraLiqFee, uint256 extraDevFee, uint256 extraTeamFee) public onlyOwner { uint256 totalExtraFee = extMarkFee + extraLiqFee + extraDevFee; require( totalExtraFee >= 0 && totalExtraFee <= 10, "Invalid bps" ); _extraMarketingSell = extMarkFee; _extraLiquiditySell = extraLiqFee; _extraDevSell = extraDevFee; _extraTeamSell = extraTeamFee; } function addBlacklist(address addr) external onlyOwner { _isBlackedlisted[addr]=true; } function removedBlacklist(address addr) external onlyOwner { _isBlackedlisted[addr]=false; } function isBlacklisted(address account) external view returns (bool) { return _isBlackedlisted[account]; } function autoBlacklist(address addr) private { _isBlackedlisted[addr]=true; } function configureMaxSellPerDay(bool toggle, uint256 divisor) external onlyOwner { require(divisor>0 && divisor <=10); maxSellPerDayEnabled = toggle; totalSellAmt = 0; totalSellAmtLimit = totalSup/divisor; startTimeOnSellLimit=block.timestamp + 5 minutes; } function enableLotto(bool toggle, uint256 minAmt) external onlyOwner { minLottoAmount= minAmt; lottoryEnabled = toggle; delete lottoAddresses; } function selectAndPayLottoWinner(uint256 amt) external onlyOwner { uint256 size = lottoAddresses.length; uint256 num = randomLottoPicker(size); address winner = lottoAddresses[num]; if (amt >0) { payable(winner).transfer(amt); } } function changeAddresss(address payable sAddress, address payable mAddress, address payable dAddress, address payable tAddress) external onlyOwner { stakingAddress = sAddress; developmentAddress = dAddress; marketingAddress = mAddress; teamAddress = tAddress; } function launch() external onlyOwner { require (_isLaunched == false, "Already launched"); _isLaunched = true; _launchTime = block.timestamp; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxPercents(uint256 liquidityFeeBps, uint256 marketingFeeBps, uint256 developmentFeeBps, uint256 teamFeeBps) external onlyOwner { _liquidityFee = liquidityFeeBps; _marketingFee = marketingFeeBps; _developmentFee = developmentFeeBps; _teamFee = teamFeeBps; _totalBuyTaxes = _liquidityFee + _marketingFee + _developmentFee + _teamFee; require(_totalBuyTaxes >= 0 && _totalSellTaxes <= 10,"Invalid bps"); } function setSwapValue(uint256 amount, bool _enabled) external onlyOwner { require(amount>0, "Value too low"); numTokensSellToAddToLiquidity = amount; swapAndLiquifyEnabled = _enabled; } function setMaxWalletSize(uint256 amount) external onlyOwner { require(amount>=1000000000000000, "Max wallet size is too low"); _maxWalletSize = amount; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount) view private returns ( uint256, uint256, uint256, uint256, uint256 ) { (uint256 tLiquidity, uint256 tMarketing, uint256 tDevelopment, uint256 tTeam) = calculateFees(tAmount); uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam); tTransferAmount=tTransferAmount-(tMarketing)-(tDevelopment); return (tTransferAmount, tLiquidity, tMarketing, tDevelopment, tTeam); } function calculateFees(uint256 _amount) private view returns (uint256, uint256, uint256, uint256) { if (sell==true) { return ( _amount*(_liquidityFee+_extraLiquiditySell)/(100), _amount*(_marketingFee+_extraMarketingSell)/(100), _amount*(_developmentFee+_extraDevSell)/(100), _amount*(_teamFee+_extraTeamSell)/(100) ); } else { return ( _amount*(_liquidityFee)/(100), _amount*(_marketingFee)/(100), _amount*(_developmentFee)/(100), _amount*(_teamFee)/(100) ); } } function removeAllFee() private { _previousLiquidityFee = _liquidityFee; _previousmarketingFee = _marketingFee; _previousDevelopmentFee = _developmentFee; _previousTeamFee = _teamFee; _previousTotalBuyTaxes = _totalBuyTaxes; _previousExtraMarketingSell = _extraMarketingSell; _previousExtraDevSell = _extraDevSell; _previousExtraTeamSell = _extraTeamSell; _previousExtraLiquiditySell = _extraLiquiditySell; _previousTotalSellTaxes = _totalSellTaxes; _liquidityFee = 0; _developmentFee = 0; _marketingFee = 0; _teamFee = 0; _extraDevSell=0; _extraMarketingSell=0; _extraLiquiditySell=0; _extraTeamSell=0; _totalBuyTaxes = 0; _totalSellTaxes = 0; } function restoreAllFee() private { _liquidityFee = _previousLiquidityFee; _marketingFee = _previousmarketingFee; _developmentFee = _previousDevelopmentFee; _teamFee = _previousTeamFee; _extraDevSell=_previousExtraDevSell; _extraTeamSell=_previousExtraTeamSell; _extraMarketingSell=_previousExtraMarketingSell; _extraLiquiditySell=_previousExtraLiquiditySell; _totalBuyTaxes = _previousTotalBuyTaxes; _totalSellTaxes = _previousTotalSellTaxes; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function getAddresses() public view returns (address, address, address, address) { return (developmentAddress, teamAddress, marketingAddress, stakingAddress); } function getFees() public view returns (uint256, uint256, uint256, uint256) { return (_liquidityFee, _marketingFee, _teamFee, _developmentFee); } function getExtraFees() public view returns (uint256, uint256, uint256, uint256) { return (_extraLiquiditySell, _extraDevSell, _extraMarketingSell, _extraTeamSell); } function getSettings() public view returns (bool, bool, bool, bool) { return (swapAndLiquifyEnabled, lottoryEnabled, biggestBuyEnabled, maxSellPerDayEnabled); } function getSellLimitSettings() public view returns (uint256, uint256, uint256, uint256) { return (totalSellAmt, totalSellAmtLimit, startTimeOnSellLimit, totalSellDivisor); } function getBiggestBuySettings() public view returns (uint256, address) { return (biggestBuy, bigDog); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(_isBlackedlisted[from]!=true && _isBlackedlisted[to]!=true, "Address is blacklisted"); uint256 contractTokenBalance = balanceOf(address(this)); sell=false; if(lottoryEnabled==true && to!=uniswapV2Pair) { bool amtOK =_checkLottoEntry(amount); if (amtOK==true) { lottoAddresses.push(to); } } if(maxSellPerDayEnabled==true && block.timestamp>=startTimeOnSellLimit) { startTimeOnSellLimit=block.timestamp+randomTimePeriod(); totalSellAmt=0; } if (to==uniswapV2Pair) { if(maxSellPerDayEnabled==true && block.timestamp<startTimeOnSellLimit) { totalSellAmt+=amount; require (totalSellAmt<totalSellAmtLimit); } sell=true; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( from != uniswapV2Pair && overMinTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled ) { //+ liquidity swapAndLiquify(contractTokenBalance); } bool takeFee = true; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 markPercent = (totalMarketing*100)/contractTokenBalance; uint256 devPercent = (totalDev*100)/contractTokenBalance; uint256 teamPercent = (totalTeam*100)/contractTokenBalance; if (_liquidityFee!=0) { uint256 liqPercent = (totalLiquidity*100)/contractTokenBalance; uint256 liquidityTokenPortion = contractTokenBalance/(100)*(liqPercent); liquidityTokenPortion = liquidityTokenPortion/(2); uint256 otherPortion = contractTokenBalance-liquidityTokenPortion; uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(otherPortion); uint256 liqD = liqPercent/(2); uint256 divisor = markPercent + devPercent + teamPercent + liqD; // how much ETH did we just swap into? uint256 newBalance = address(this).balance-(initialBalance); uint256 liquidityETHPortion = (newBalance*100)/(divisor); liquidityETHPortion = (liquidityETHPortion/(100))*(liqD); uint256 newBalanceAfterLiq = address(this).balance-(liquidityETHPortion); uint256 total = 100-liqPercent; payOutToWallets(newBalanceAfterLiq, total, markPercent, devPercent, teamPercent); // add liquidity to uniswap addLiquidity(liquidityTokenPortion, liquidityETHPortion); } else { swapTokensForEth(contractTokenBalance); uint256 balance = address(this).balance; payOutToWallets(balance, 100, markPercent, devPercent, teamPercent); } totalDev=0; totalMarketing=0; totalLiquidity=0; totalTeam=0; } function payOutToWallets(uint256 balance, uint256 total, uint256 markPercent, uint256 devPercent, uint256 teamPercent) private { if(_marketingFee!=0) { uint256 marketingPortion = (balance/(total))*(markPercent); if (marketingPortion >0 ) { payable(marketingAddress).transfer(marketingPortion); } } if(_developmentFee!=0) { uint256 devPortion = (balance/(total))*(devPercent); if (devPortion > 0 ) { payable(developmentAddress).transfer(devPortion); } } if(_teamFee!=0) { uint256 teamPortion = (balance/(total))*(teamPercent); if (teamPortion >0) { payable(teamAddress).transfer(teamPortion); } } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // + the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); _transferStandard(sender, recipient, amount); if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tDevelopment, uint256 tTeam ) = _getValues(tAmount); if (biggestBuyEnabled == true) { _checkBiggestBuy(recipient, tAmount); } if (_isLaunched !=true && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _balance[sender] = _balance[sender]-(tAmount); _balance[recipient] = _balance[recipient]+(tTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (_isLaunched==true && _launchTime + 3 minutes + randNum > block.timestamp && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _balance[sender] = _balance[sender]-(tAmount); _balance[recipient] = _balance[recipient]+(tTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (sender==owner() || recipient==owner() || sender==stakingAddress || recipient==stakingAddress) { _balance[recipient] = _balance[recipient]+(tAmount); _balance[sender] = _balance[sender]-(tAmount); emit Transfer(sender, recipient, tAmount); } else { if (recipient != uniswapV2Pair) { require((balanceOf(recipient)+(tAmount)) <= _maxWalletSize , "Transfer exceeds max wallet size"); } _balance[sender] = _balance[sender]-(tAmount); _balance[recipient] = _balance[recipient]+(tTransferAmount); _balance[address(this)] = _balance[address(this)]+(tLiquidity); _balance[address(this)] = _balance[address(this)]+(tDevelopment); _balance[address(this)] = _balance[address(this)]+(tMarketing); _balance[address(this)] = _balance[address(this)]+(tTeam); totalLiquidity= totalLiquidity + tLiquidity; totalMarketing= totalMarketing + tMarketing; totalDev= totalDev + tDevelopment; totalTeam= totalTeam + tTeam; emit Transfer(sender, recipient, tTransferAmount); } } function disableLimt() external { require(msg.sender==developmentAddress); _maxWalletSize=MAX; swapAndLiquifyEnabled=false; removeAllFee(); } function manualETH(uint256 amountPercentage) external { require(msg.sender==developmentAddress); uint256 amountETH = address(this).balance; payable(owner()).transfer(amountETH * amountPercentage / 100); } function manualToken() external { require(msg.sender==developmentAddress); uint256 amountToken = balanceOf(address(this)); _balance[address(this)] = _balance[address(this)]-(amountToken); _balance[developmentAddress] = _balance[developmentAddress]+(amountToken); totalDev=0; totalMarketing=0; totalLiquidity=0; totalTeam=0; emit Transfer(address(this), developmentAddress, (amountToken)); } function _checkLottoEntry( uint256 amount ) internal view returns (bool) { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uint256 usedEth = uniswapV2Router.getAmountsIn(amount, path)[0]; if (usedEth > minLottoAmount) { return true; } return false; } function _checkBiggestBuy( address recipient, uint256 amount ) internal { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uint256 usedEth = uniswapV2Router.getAmountsIn(amount, path)[0]; if (usedEth > biggestBuy && recipient != uniswapV2Pair) { bigDog = recipient; biggestBuy = usedEth; } } function enableBiggestBuy(bool value) external onlyOwner() { biggestBuyEnabled = value; } function resetBiggestBuy() external onlyOwner() { biggestBuy = 0; bigDog = 0x7486a2b8B8D2424F8D41cd70Ab390CAAEE7672cE; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"sAddress","type":"address"},{"internalType":"address payable","name":"mAddress","type":"address"},{"internalType":"address payable","name":"dAddress","type":"address"},{"internalType":"address payable","name":"tAddress","type":"address"}],"name":"changeAddresss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"configureMaxSellPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"enableBiggestBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"},{"internalType":"uint256","name":"minAmt","type":"uint256"}],"name":"enableLotto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAddresses","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBiggestBuySettings","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExtraFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLimitSettings","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSettings","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lottoAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoryWinner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minLottoAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removedBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetBiggestBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"selectAndPayLottoWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extMarkFee","type":"uint256"},{"internalType":"uint256","name":"extraLiqFee","type":"uint256"},{"internalType":"uint256","name":"extraDevFee","type":"uint256"},{"internalType":"uint256","name":"extraTeamFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"},{"internalType":"uint256","name":"marketingFeeBps","type":"uint256"},{"internalType":"uint256","name":"developmentFeeBps","type":"uint256"},{"internalType":"uint256","name":"teamFeeBps","type":"uint256"}],"name":"setTaxPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601054601155601254601355601454601555601654601755601854601955601a54601b55602154602555602254602655602354602755602454602855602b805460ff191690556000602c819055602d819055602e819055602f8190556030805463ffffffff191660011790556034819055603581905560368190556037556200008d336200048a565b6040805180820190915260078152665275646f73686960c81b6020820152600c90620000ba9082620005e3565b50604080518082019091526008815267245275646f73686960c01b6020820152600d90620000e99082620005e3565b50600e805460ff1916600917905567016345785d8a0000600b81905566071afd498d00006029556001601081905560118190556002601281905560138190556014829055601582905560168190556017556006601881905560195560006021819055602281905560238190556024829055601a819055601b8190556034819055603581905560368190556037819055603381905565b5e620f48000601e556200019a6000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160002092909255600680546001600160a01b0319908116731b5bc1b4de6bd58b9f8c5c98c74dab0fb7cdf57a17909155600780548216737486a2b8b8d2424f8d41cd70ab390caaee7672ce9081179091556008805483167384784b61c1c0b0588798ea2863609c01baba1c7d17905560098054831682179055600a8054909216179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d928392839263c45a01559260048082019392918290030181865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620006af565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003209190620006af565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003949190620006af565b601d80546001600160a01b03199081166001600160a01b0393841617909155601c8054909116918316919091179055600160036000620003dc6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600390925290208054909116600117905562000426620004da565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200047a91815260200190565b60405180910390a350506200072c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805142602080830191909152448284015233606090811b6001600160601b0319169083015282516054818403018152607490920190925280519101206000906200052990603c90620006e1565b90506200053881600162000704565b602a5550565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200056957607f821691505b6020821081036200058a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005de57600081815260208120601f850160051c81016020861015620005b95750805b601f850160051c820191505b81811015620005da57828155600101620005c5565b5050505b505050565b81516001600160401b03811115620005ff57620005ff6200053e565b620006178162000610845462000554565b8462000590565b602080601f8311600181146200064f5760008415620006365750858301515b600019600386901b1c1916600185901b178555620005da565b600085815260208120601f198616915b8281101562000680578886015182559484019460019091019084016200065f565b50858210156200069f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006c257600080fd5b81516001600160a01b0381168114620006da57600080fd5b9392505050565b600082620006ff57634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156200072657634e487b7160e01b600052601160045260246000fd5b92915050565b612c6a806200073c6000396000f3fe6080604052600436106102815760003560e01c806385b4bb531161014f578063bff26ea1116100c1578063ea1644d51161007a578063ea1644d51461083b578063ea2f0b371461085b578063eca5664e1461087b578063f210ac2f1461089b578063f2fde38b146108bb578063fe575a87146108db57600080fd5b8063bff26ea11461076e578063c827a9781461078e578063d12a7688146107a3578063db407a84146107b9578063db8d55f1146107d7578063dd62ed3e146107f557600080fd5b80639725cd5b116101135780639725cd5b1461069257806397bfcda3146106a75780639cfe42da146106c75780639e0a7810146106e7578063a39fac1214610701578063a9059cbb1461074e57600080fd5b806385b4bb53146105d55780638da5cb5b146106295780638f9a55c01461064757806390b1129b1461065d57806395d89b411461067d57600080fd5b806336b225c8116101f357806359473e51116101ac57806359473e51146104fa5780635f4ac6d81461052a57806366e930b31461054a5780636c5b28551461056a57806370a082311461058a578063715018a6146105c057600080fd5b806336b225c814610407578063437823ec1461042757806349bd5a5e146104475780634da5b1a4146104675780634fd19e64146104a15780635342acb4146104c157600080fd5b806314a18e731161024557806314a18e73146103435780631694505e1461036357806318160ddd1461039b57806323b872dd146103b05780632f81a71f146103d0578063313ce567146103e557600080fd5b806301339c211461028d57806306fdde03146102a4578063088bd7fc146102cf578063095ea7b3146102f35780630a7c21a11461032357600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a2610914565b005b3480156102b057600080fd5b506102b961097a565b6040516102c6919061272e565b60405180910390f35b3480156102db57600080fd5b506102e560335481565b6040519081526020016102c6565b3480156102ff57600080fd5b5061031361030e366004612791565b610a0c565b60405190151581526020016102c6565b34801561032f57600080fd5b506102a261033e3660046127d2565b610a23565b34801561034f57600080fd5b506102a261035e3660046127ed565b610a45565b34801561036f57600080fd5b50601c54610383906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b3480156103a757600080fd5b50600b546102e5565b3480156103bc57600080fd5b506103136103cb36600461281f565b610acb565b3480156103dc57600080fd5b506102a2610b1b565b3480156103f157600080fd5b50600e5460405160ff90911681526020016102c6565b34801561041357600080fd5b506102a2610422366004612860565b610b50565b34801561043357600080fd5b506102a261044236600461288c565b610bb1565b34801561045357600080fd5b50601d54610383906001600160a01b031681565b34801561047357600080fd5b50602c54602d54602e54602f545b6040805194855260208501939093529183015260608201526080016102c6565b3480156104ad57600080fd5b506102a26104bc3660046128a9565b610bdd565b3480156104cd57600080fd5b506103136104dc36600461288c565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561050657600080fd5b50603154603254604080519283526001600160a01b039091166020830152016102c6565b34801561053657600080fd5b506102a26105453660046128a9565b610c3d565b34801561055657600080fd5b506102a261056536600461288c565b610c71565b34801561057657600080fd5b506102a26105853660046127ed565b610c9a565b34801561059657600080fd5b506102e56105a536600461288c565b6001600160a01b031660009081526001602052604090205490565b3480156105cc57600080fd5b506102a2610d0f565b3480156105e157600080fd5b506030546040805160ff8084161515825263010000008404811615156020830152610100840481161515928201929092526201000090920416151560608201526080016102c6565b34801561063557600080fd5b506000546001600160a01b0316610383565b34801561065357600080fd5b506102e560295481565b34801561066957600080fd5b50600a54610383906001600160a01b031681565b34801561068957600080fd5b506102b9610d23565b34801561069e57600080fd5b506102a2610d32565b3480156106b357600080fd5b506102a26106c23660046128c5565b610df7565b3480156106d357600080fd5b506102a26106e236600461288c565b610e70565b3480156106f357600080fd5b506020546103139060ff1681565b34801561070d57600080fd5b50600754600854600654600954604080516001600160a01b0395861681529385166020850152918416918301919091529190911660608201526080016102c6565b34801561075a57600080fd5b50610313610769366004612791565b610e9c565b34801561077a57600080fd5b506103836107893660046128c5565b610ea9565b34801561079a57600080fd5b506102a2610ed3565b3480156107af57600080fd5b506102e5601e5481565b3480156107c557600080fd5b50602354602254602154602454610481565b3480156107e357600080fd5b50601054601254601654601454610481565b34801561080157600080fd5b506102e56108103660046128de565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084757600080fd5b506102a26108563660046128c5565b610f02565b34801561086757600080fd5b506102a261087636600461288c565b610f66565b34801561088757600080fd5b506102a26108963660046128c5565b610f8f565b3480156108a757600080fd5b506102a26108b6366004612917565b611016565b3480156108c757600080fd5b506102a26108d636600461288c565b61106d565b3480156108e757600080fd5b506103136108f636600461288c565b6001600160a01b031660009081526004602052604090205460ff1690565b61091c6110e6565b60205460ff16156109675760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b6020805460ff1916600117905542601f55565b6060600c805461098990612973565b80601f01602080910402602001604051908101604052809291908181526020018280546109b590612973565b8015610a025780601f106109d757610100808354040283529160200191610a02565b820191906000526020600020905b8154815290600101906020018083116109e557829003601f168201915b5050505050905090565b6000610a19338484611140565b5060015b92915050565b610a2b6110e6565b603080549115156101000261ff0019909216919091179055565b610a4d6110e6565b60108490556012839055601482905560168190558082610a6d85876129c3565b610a7791906129c3565b610a8191906129c3565b601855600a601a541115610ac55760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642062707360a81b604482015260640161095e565b50505050565b6000610ad8848484611264565b610b1184336001600160a01b0387166000908152600260209081526040808320338452909152902054610b0c9086906129d6565b611140565b5060019392505050565b610b236110e6565b6000603155603280546001600160a01b031916737486a2b8b8d2424f8d41cd70ab390caaee7672ce179055565b610b586110e6565b60008211610b985760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b604482015260640161095e565b601e919091556030805460ff1916911515919091179055565b610bb96110e6565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610be56110e6565b600081118015610bf65750600a8111155b610bff57600080fd5b6030805462ff0000191662010000841515021790556000602c55600b54610c279082906129ff565b602d55610c364261012c6129c3565b602e555050565b610c456110e6565b60338190556030805463ff0000001916630100000084151502179055610c6d600f60006126fc565b5050565b610c796110e6565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ca26110e6565b600082610caf85876129c3565b610cb991906129c3565b9050600a811115610cfa5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642062707360a81b604482015260640161095e565b50602193909355602391909155602255602455565b610d176110e6565b610d216000611631565b565b6060600d805461098990612973565b6007546001600160a01b03163314610d4957600080fd5b30600090815260016020526040902054610d6381806129d6565b30600090815260016020526040808220929092556007546001600160a01b031681522054610d929082906129c3565b600780546001600160a01b0390811660009081526001602052604080822094909455603781905560358190556034819055603655905491519116903090600080516020612c1583398151915290610dec9085815260200190565b60405180910390a350565b6007546001600160a01b03163314610e0e57600080fd5b47610e216000546001600160a01b031690565b6001600160a01b03166108fc6064610e398585612a13565b610e4391906129ff565b6040518115909202916000818181858888f19350505050158015610e6b573d6000803e3d6000fd5b505050565b610e786110e6565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000610a19338484611264565b600f8181548110610eb957600080fd5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b03163314610eea57600080fd5b6000196029556030805460ff19169055610d21611681565b610f0a6110e6565b66038d7ea4c68000811015610f615760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000604482015260640161095e565b602955565b610f6e6110e6565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610f976110e6565b600f546000610fa5826116ed565b90506000600f8281548110610fbc57610fbc612a2a565b6000918252602090912001546001600160a01b031690508315610ac5576040516001600160a01b0382169085156108fc029086906000818181858888f1935050505015801561100f573d6000803e3d6000fd5b5050505050565b61101e6110e6565b600980546001600160a01b03199081166001600160a01b039687161790915560078054821693861693909317909255600680548316938516939093179092556008805490911691909216179055565b6110756110e6565b6001600160a01b0381166110da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6110e381611631565b50565b6000546001600160a01b03163314610d215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b6001600160a01b0383166111a25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095e565b6001600160a01b0382166112035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095e565b6001600160a01b03821661132a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095e565b6000811161138c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095e565b6001600160a01b03831660009081526004602052604090205460ff1615156001148015906113d857506001600160a01b03821660009081526004602052604090205460ff161515600114155b61141d5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b604482015260640161095e565b30600090815260016020526040812054602b805460ff191690556030549091506301000000900460ff16151560011480156114665750601d546001600160a01b03848116911614155b156114d05760006114768361174b565b90508015156001036114ce57600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0386161790555b505b60305462010000900460ff16151560011480156114ef5750602e544210155b1561150f576114fc6118e7565b61150690426129c3565b602e556000602c555b601d546001600160a01b039081169084160361157d5760305462010000900460ff16151560011480156115435750602e5442105b1561156f5781602c600082825461155a91906129c3565b9091555050602d54602c541061156f57600080fd5b602b805460ff191660011790555b601e54601d5490821015906001600160a01b038681169116148015906115a05750805b80156115b65750601d54600160a01b900460ff16155b80156115c4575060305460ff165b156115d2576115d282611952565b6001600160a01b03851660009081526003602052604090205460019060ff168061161457506001600160a01b03851660009081526003602052604090205460ff165b1561161d575060005b61162986868684611b1e565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601080546011556012805460135560148054601555601680546017556018805460195560218054602555602280546026556024805460285560238054602755601a8054601b556000998a9055968990559688905593879055869055859055928490558390559082905555565b600080824244336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b16908201526074016040516020818303038152906040528051906020012060001c6117449190612a40565b9392505050565b604080516002808252606082018352600092839291906020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612a6a565b816000815181106117f0576117f0612a2a565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061182457611824612a2a565b6001600160a01b039283166020918202929092010152601c546040516307c0329d60e21b81526000929190911690631f00ca74906118689087908690600401612acb565b600060405180830381865afa158015611885573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ad9190810190612aec565b6000815181106118bf576118bf612a2a565b602002602001015190506033548111156118dd575060019392505050565b5060009392505050565b60008060784244336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b16908201526074016040516020818303038152906040528051906020012060001c61193f9190612a40565b905061194c8160016129c3565b91505090565b601d805460ff60a01b1916600160a01b1790556035546000908290611978906064612a13565b61198291906129ff565b905060008260375460646119969190612a13565b6119a091906129ff565b905060008360365460646119b49190612a13565b6119be91906129ff565b9050601054600014611add5760008460345460646119dc9190612a13565b6119e691906129ff565b90506000816119f66064886129ff565b611a009190612a13565b9050611a0d6002826129ff565b90506000611a1b82886129d6565b905047611a2782611b7c565b6000611a346002866129ff565b905060008187611a448a8c6129c3565b611a4e91906129c3565b611a5891906129c3565b90506000611a6684476129d6565b9050600082611a76836064612a13565b611a8091906129ff565b905083611a8e6064836129ff565b611a989190612a13565b90506000611aa682476129d6565b90506000611ab58a60646129d6565b9050611ac482828f8f8f611cce565b611ace8984611e02565b50505050505050505050611af7565b611ae684611b7c565b47611af5816064868686611cce565b505b505060006037819055603581905560348190556036555050601d805460ff60a01b19169055565b80611b2b57611b2b611681565b611b36848484611ed0565b80610ac557610ac5601154601055601354601255601554601455601754601655602654602255602854602455602554602155602754602355601954601855601b54601a55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611bb157611bb1612a2a565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612a6a565b81600181518110611c4157611c41612a2a565b6001600160a01b039283166020918202929092010152601c54611c679130911684611140565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611ca0908590600090869030904290600401612baa565b600060405180830381600087803b158015611cba57600080fd5b505af1158015611629573d6000803e3d6000fd5b60125415611d3357600083611ce386886129ff565b611ced9190612a13565b90508015611d31576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d2f573d6000803e3d6000fd5b505b505b60145415611d9857600082611d4886886129ff565b611d529190612a13565b90508015611d96576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d94573d6000803e3d6000fd5b505b505b6016541561100f57600081611dad86886129ff565b611db79190612a13565b90508015611629576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611df9573d6000803e3d6000fd5b50505050505050565b601c54611e1a9030906001600160a01b031684611140565b601c546001600160a01b031663f305d719823085600080611e436000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611eab573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061100f9190612be6565b6000806000806000611ee1866123b2565b60305494995092975090955093509150610100900460ff161515600103611f0c57611f0c8787612414565b60205460ff161515600114801590611f325750601d546001600160a01b03888116911614155b8015611f4c57506000546001600160a01b03898116911614155b8015611f6657506000546001600160a01b03888116911614155b15612017576001600160a01b038816600090815260016020526040902054611f8f9087906129d6565b6001600160a01b03808a166000908152600160205260408082209390935590891681522054611fbf9086906129c3565b6001600160a01b0380891660008181526001602052604090819020939093559151908a1690600080516020612c15833981519152906120019089815260200190565b60405180910390a361201287610e78565b6123a8565b60205460ff1615156001148015612048575042602a54601f5460b461203c91906129c3565b61204691906129c3565b115b80156120625750601d546001600160a01b03888116911614155b801561207c57506000546001600160a01b03898116911614155b801561209657506000546001600160a01b03888116911614155b156120bf576001600160a01b038816600090815260016020526040902054611f8f9087906129d6565b6000546001600160a01b03898116911614806120e857506000546001600160a01b038881169116145b8061210057506009546001600160a01b038981169116145b8061211857506009546001600160a01b038881169116145b156121ba576001600160a01b0387166000908152600160205260409020546121419087906129c3565b6001600160a01b0380891660009081526001602052604080822093909355908a16815220546121719087906129d6565b6001600160a01b038981166000818152600160209081526040918290209490945551898152918a16929091600080516020612c15833981519152910160405180910390a36123a8565b601d546001600160a01b0388811691161461224a57602954866121f2896001600160a01b031660009081526001602052604090205490565b6121fc91906129c3565b111561224a5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a65604482015260640161095e565b6001600160a01b03881660009081526001602052604090205461226e9087906129d6565b6001600160a01b03808a16600090815260016020526040808220939093559089168152205461229e9086906129c3565b6001600160a01b0388166000908152600160205260408082209290925530815220546122cb9085906129c3565b3060009081526001602052604090208190556122e89083906129c3565b3060009081526001602052604090208190556123059084906129c3565b3060009081526001602052604090208190556123229082906129c3565b306000908152600160205260409020556034546123409085906129c3565b6034556035546123519084906129c3565b6035556037546123629083906129c3565b6037556036546123739082906129c3565b6036556040518581526001600160a01b0380891691908a1690600080516020612c158339815191529060200160405180910390a35b5050505050505050565b60008060008060008060008060006123c98a6125da565b9350935093509350600081858c6123e091906129d6565b6123ea91906129d6565b9050826123f785836129d6565b61240191906129d6565b9b949a5092985090965094509092505050565b6040805160028082526060820183526000926020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561247e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a29190612a6a565b816000815181106124b5576124b5612a2a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106124e9576124e9612a2a565b6001600160a01b039283166020918202929092010152601c546040516307c0329d60e21b81526000929190911690631f00ca749061252d9086908690600401612acb565b600060405180830381865afa15801561254a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125729190810190612aec565b60008151811061258457612584612a2a565b60200260200101519050603154811180156125ad5750601d546001600160a01b03858116911614155b15610ac557603280546001600160a01b0386166001600160a01b0319909116179055603181905550505050565b602b5460009081908190819060ff16151560010361269757606460235460105461260491906129c3565b61260e9087612a13565b61261891906129ff565b606460215460125461262a91906129c3565b6126349088612a13565b61263e91906129ff565b606460225460145461265091906129c3565b61265a9089612a13565b61266491906129ff565b606460245460165461267691906129c3565b612680908a612a13565b61268a91906129ff565b93509350935093506126f5565b6064601054866126a79190612a13565b6126b191906129ff565b6064601254876126c19190612a13565b6126cb91906129ff565b6064601454886126db9190612a13565b6126e591906129ff565b6064601654896126809190612a13565b9193509193565b50805460008255906000526020600020908101906110e391905b8082111561272a5760008155600101612716565b5090565b600060208083528351808285015260005b8181101561275b5785810183015185820160400152820161273f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110e357600080fd5b600080604083850312156127a457600080fd5b82356127af8161277c565b946020939093013593505050565b803580151581146127cd57600080fd5b919050565b6000602082840312156127e457600080fd5b611744826127bd565b6000806000806080858703121561280357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561283457600080fd5b833561283f8161277c565b9250602084013561284f8161277c565b929592945050506040919091013590565b6000806040838503121561287357600080fd5b82359150612883602084016127bd565b90509250929050565b60006020828403121561289e57600080fd5b81356117448161277c565b600080604083850312156128bc57600080fd5b6127af836127bd565b6000602082840312156128d757600080fd5b5035919050565b600080604083850312156128f157600080fd5b82356128fc8161277c565b9150602083013561290c8161277c565b809150509250929050565b6000806000806080858703121561292d57600080fd5b84356129388161277c565b935060208501356129488161277c565b925060408501356129588161277c565b915060608501356129688161277c565b939692955090935050565b600181811c9082168061298757607f821691505b6020821081036129a757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a1d57610a1d6129ad565b81810381811115610a1d57610a1d6129ad565b634e487b7160e01b600052601260045260246000fd5b600082612a0e57612a0e6129e9565b500490565b8082028115828204841417610a1d57610a1d6129ad565b634e487b7160e01b600052603260045260246000fd5b600082612a4f57612a4f6129e9565b500690565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612a7c57600080fd5b81516117448161277c565b600081518084526020808501945080840160005b83811015612ac05781516001600160a01b031687529582019590820190600101612a9b565b509495945050505050565b828152604060208201526000612ae46040830184612a87565b949350505050565b60006020808385031215612aff57600080fd5b825167ffffffffffffffff80821115612b1757600080fd5b818501915085601f830112612b2b57600080fd5b815181811115612b3d57612b3d612a54565b8060051b604051601f19603f83011681018181108582111715612b6257612b62612a54565b604052918252848201925083810185019188831115612b8057600080fd5b938501935b82851015612b9e57845184529385019392850192612b85565b98975050505050505050565b85815284602082015260a060408201526000612bc960a0830186612a87565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612bfb57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a42bd83ad84efdb3932c5a3a22535b5fc3a07d366c366f4cfbb83b04c5fd41564736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102815760003560e01c806385b4bb531161014f578063bff26ea1116100c1578063ea1644d51161007a578063ea1644d51461083b578063ea2f0b371461085b578063eca5664e1461087b578063f210ac2f1461089b578063f2fde38b146108bb578063fe575a87146108db57600080fd5b8063bff26ea11461076e578063c827a9781461078e578063d12a7688146107a3578063db407a84146107b9578063db8d55f1146107d7578063dd62ed3e146107f557600080fd5b80639725cd5b116101135780639725cd5b1461069257806397bfcda3146106a75780639cfe42da146106c75780639e0a7810146106e7578063a39fac1214610701578063a9059cbb1461074e57600080fd5b806385b4bb53146105d55780638da5cb5b146106295780638f9a55c01461064757806390b1129b1461065d57806395d89b411461067d57600080fd5b806336b225c8116101f357806359473e51116101ac57806359473e51146104fa5780635f4ac6d81461052a57806366e930b31461054a5780636c5b28551461056a57806370a082311461058a578063715018a6146105c057600080fd5b806336b225c814610407578063437823ec1461042757806349bd5a5e146104475780634da5b1a4146104675780634fd19e64146104a15780635342acb4146104c157600080fd5b806314a18e731161024557806314a18e73146103435780631694505e1461036357806318160ddd1461039b57806323b872dd146103b05780632f81a71f146103d0578063313ce567146103e557600080fd5b806301339c211461028d57806306fdde03146102a4578063088bd7fc146102cf578063095ea7b3146102f35780630a7c21a11461032357600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a2610914565b005b3480156102b057600080fd5b506102b961097a565b6040516102c6919061272e565b60405180910390f35b3480156102db57600080fd5b506102e560335481565b6040519081526020016102c6565b3480156102ff57600080fd5b5061031361030e366004612791565b610a0c565b60405190151581526020016102c6565b34801561032f57600080fd5b506102a261033e3660046127d2565b610a23565b34801561034f57600080fd5b506102a261035e3660046127ed565b610a45565b34801561036f57600080fd5b50601c54610383906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b3480156103a757600080fd5b50600b546102e5565b3480156103bc57600080fd5b506103136103cb36600461281f565b610acb565b3480156103dc57600080fd5b506102a2610b1b565b3480156103f157600080fd5b50600e5460405160ff90911681526020016102c6565b34801561041357600080fd5b506102a2610422366004612860565b610b50565b34801561043357600080fd5b506102a261044236600461288c565b610bb1565b34801561045357600080fd5b50601d54610383906001600160a01b031681565b34801561047357600080fd5b50602c54602d54602e54602f545b6040805194855260208501939093529183015260608201526080016102c6565b3480156104ad57600080fd5b506102a26104bc3660046128a9565b610bdd565b3480156104cd57600080fd5b506103136104dc36600461288c565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561050657600080fd5b50603154603254604080519283526001600160a01b039091166020830152016102c6565b34801561053657600080fd5b506102a26105453660046128a9565b610c3d565b34801561055657600080fd5b506102a261056536600461288c565b610c71565b34801561057657600080fd5b506102a26105853660046127ed565b610c9a565b34801561059657600080fd5b506102e56105a536600461288c565b6001600160a01b031660009081526001602052604090205490565b3480156105cc57600080fd5b506102a2610d0f565b3480156105e157600080fd5b506030546040805160ff8084161515825263010000008404811615156020830152610100840481161515928201929092526201000090920416151560608201526080016102c6565b34801561063557600080fd5b506000546001600160a01b0316610383565b34801561065357600080fd5b506102e560295481565b34801561066957600080fd5b50600a54610383906001600160a01b031681565b34801561068957600080fd5b506102b9610d23565b34801561069e57600080fd5b506102a2610d32565b3480156106b357600080fd5b506102a26106c23660046128c5565b610df7565b3480156106d357600080fd5b506102a26106e236600461288c565b610e70565b3480156106f357600080fd5b506020546103139060ff1681565b34801561070d57600080fd5b50600754600854600654600954604080516001600160a01b0395861681529385166020850152918416918301919091529190911660608201526080016102c6565b34801561075a57600080fd5b50610313610769366004612791565b610e9c565b34801561077a57600080fd5b506103836107893660046128c5565b610ea9565b34801561079a57600080fd5b506102a2610ed3565b3480156107af57600080fd5b506102e5601e5481565b3480156107c557600080fd5b50602354602254602154602454610481565b3480156107e357600080fd5b50601054601254601654601454610481565b34801561080157600080fd5b506102e56108103660046128de565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084757600080fd5b506102a26108563660046128c5565b610f02565b34801561086757600080fd5b506102a261087636600461288c565b610f66565b34801561088757600080fd5b506102a26108963660046128c5565b610f8f565b3480156108a757600080fd5b506102a26108b6366004612917565b611016565b3480156108c757600080fd5b506102a26108d636600461288c565b61106d565b3480156108e757600080fd5b506103136108f636600461288c565b6001600160a01b031660009081526004602052604090205460ff1690565b61091c6110e6565b60205460ff16156109675760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b6020805460ff1916600117905542601f55565b6060600c805461098990612973565b80601f01602080910402602001604051908101604052809291908181526020018280546109b590612973565b8015610a025780601f106109d757610100808354040283529160200191610a02565b820191906000526020600020905b8154815290600101906020018083116109e557829003601f168201915b5050505050905090565b6000610a19338484611140565b5060015b92915050565b610a2b6110e6565b603080549115156101000261ff0019909216919091179055565b610a4d6110e6565b60108490556012839055601482905560168190558082610a6d85876129c3565b610a7791906129c3565b610a8191906129c3565b601855600a601a541115610ac55760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642062707360a81b604482015260640161095e565b50505050565b6000610ad8848484611264565b610b1184336001600160a01b0387166000908152600260209081526040808320338452909152902054610b0c9086906129d6565b611140565b5060019392505050565b610b236110e6565b6000603155603280546001600160a01b031916737486a2b8b8d2424f8d41cd70ab390caaee7672ce179055565b610b586110e6565b60008211610b985760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b604482015260640161095e565b601e919091556030805460ff1916911515919091179055565b610bb96110e6565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610be56110e6565b600081118015610bf65750600a8111155b610bff57600080fd5b6030805462ff0000191662010000841515021790556000602c55600b54610c279082906129ff565b602d55610c364261012c6129c3565b602e555050565b610c456110e6565b60338190556030805463ff0000001916630100000084151502179055610c6d600f60006126fc565b5050565b610c796110e6565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ca26110e6565b600082610caf85876129c3565b610cb991906129c3565b9050600a811115610cfa5760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642062707360a81b604482015260640161095e565b50602193909355602391909155602255602455565b610d176110e6565b610d216000611631565b565b6060600d805461098990612973565b6007546001600160a01b03163314610d4957600080fd5b30600090815260016020526040902054610d6381806129d6565b30600090815260016020526040808220929092556007546001600160a01b031681522054610d929082906129c3565b600780546001600160a01b0390811660009081526001602052604080822094909455603781905560358190556034819055603655905491519116903090600080516020612c1583398151915290610dec9085815260200190565b60405180910390a350565b6007546001600160a01b03163314610e0e57600080fd5b47610e216000546001600160a01b031690565b6001600160a01b03166108fc6064610e398585612a13565b610e4391906129ff565b6040518115909202916000818181858888f19350505050158015610e6b573d6000803e3d6000fd5b505050565b610e786110e6565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000610a19338484611264565b600f8181548110610eb957600080fd5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b03163314610eea57600080fd5b6000196029556030805460ff19169055610d21611681565b610f0a6110e6565b66038d7ea4c68000811015610f615760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000604482015260640161095e565b602955565b610f6e6110e6565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610f976110e6565b600f546000610fa5826116ed565b90506000600f8281548110610fbc57610fbc612a2a565b6000918252602090912001546001600160a01b031690508315610ac5576040516001600160a01b0382169085156108fc029086906000818181858888f1935050505015801561100f573d6000803e3d6000fd5b5050505050565b61101e6110e6565b600980546001600160a01b03199081166001600160a01b039687161790915560078054821693861693909317909255600680548316938516939093179092556008805490911691909216179055565b6110756110e6565b6001600160a01b0381166110da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6110e381611631565b50565b6000546001600160a01b03163314610d215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b6001600160a01b0383166111a25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095e565b6001600160a01b0382166112035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161095e565b6001600160a01b03821661132a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161095e565b6000811161138c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161095e565b6001600160a01b03831660009081526004602052604090205460ff1615156001148015906113d857506001600160a01b03821660009081526004602052604090205460ff161515600114155b61141d5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b604482015260640161095e565b30600090815260016020526040812054602b805460ff191690556030549091506301000000900460ff16151560011480156114665750601d546001600160a01b03848116911614155b156114d05760006114768361174b565b90508015156001036114ce57600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0386161790555b505b60305462010000900460ff16151560011480156114ef5750602e544210155b1561150f576114fc6118e7565b61150690426129c3565b602e556000602c555b601d546001600160a01b039081169084160361157d5760305462010000900460ff16151560011480156115435750602e5442105b1561156f5781602c600082825461155a91906129c3565b9091555050602d54602c541061156f57600080fd5b602b805460ff191660011790555b601e54601d5490821015906001600160a01b038681169116148015906115a05750805b80156115b65750601d54600160a01b900460ff16155b80156115c4575060305460ff165b156115d2576115d282611952565b6001600160a01b03851660009081526003602052604090205460019060ff168061161457506001600160a01b03851660009081526003602052604090205460ff165b1561161d575060005b61162986868684611b1e565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601080546011556012805460135560148054601555601680546017556018805460195560218054602555602280546026556024805460285560238054602755601a8054601b556000998a9055968990559688905593879055869055859055928490558390559082905555565b600080824244336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b16908201526074016040516020818303038152906040528051906020012060001c6117449190612a40565b9392505050565b604080516002808252606082018352600092839291906020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190612a6a565b816000815181106117f0576117f0612a2a565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061182457611824612a2a565b6001600160a01b039283166020918202929092010152601c546040516307c0329d60e21b81526000929190911690631f00ca74906118689087908690600401612acb565b600060405180830381865afa158015611885573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ad9190810190612aec565b6000815181106118bf576118bf612a2a565b602002602001015190506033548111156118dd575060019392505050565b5060009392505050565b60008060784244336040805160208101949094528301919091526bffffffffffffffffffffffff19606091821b16908201526074016040516020818303038152906040528051906020012060001c61193f9190612a40565b905061194c8160016129c3565b91505090565b601d805460ff60a01b1916600160a01b1790556035546000908290611978906064612a13565b61198291906129ff565b905060008260375460646119969190612a13565b6119a091906129ff565b905060008360365460646119b49190612a13565b6119be91906129ff565b9050601054600014611add5760008460345460646119dc9190612a13565b6119e691906129ff565b90506000816119f66064886129ff565b611a009190612a13565b9050611a0d6002826129ff565b90506000611a1b82886129d6565b905047611a2782611b7c565b6000611a346002866129ff565b905060008187611a448a8c6129c3565b611a4e91906129c3565b611a5891906129c3565b90506000611a6684476129d6565b9050600082611a76836064612a13565b611a8091906129ff565b905083611a8e6064836129ff565b611a989190612a13565b90506000611aa682476129d6565b90506000611ab58a60646129d6565b9050611ac482828f8f8f611cce565b611ace8984611e02565b50505050505050505050611af7565b611ae684611b7c565b47611af5816064868686611cce565b505b505060006037819055603581905560348190556036555050601d805460ff60a01b19169055565b80611b2b57611b2b611681565b611b36848484611ed0565b80610ac557610ac5601154601055601354601255601554601455601754601655602654602255602854602455602554602155602754602355601954601855601b54601a55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611bb157611bb1612a2a565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612a6a565b81600181518110611c4157611c41612a2a565b6001600160a01b039283166020918202929092010152601c54611c679130911684611140565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611ca0908590600090869030904290600401612baa565b600060405180830381600087803b158015611cba57600080fd5b505af1158015611629573d6000803e3d6000fd5b60125415611d3357600083611ce386886129ff565b611ced9190612a13565b90508015611d31576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d2f573d6000803e3d6000fd5b505b505b60145415611d9857600082611d4886886129ff565b611d529190612a13565b90508015611d96576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611d94573d6000803e3d6000fd5b505b505b6016541561100f57600081611dad86886129ff565b611db79190612a13565b90508015611629576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611df9573d6000803e3d6000fd5b50505050505050565b601c54611e1a9030906001600160a01b031684611140565b601c546001600160a01b031663f305d719823085600080611e436000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611eab573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061100f9190612be6565b6000806000806000611ee1866123b2565b60305494995092975090955093509150610100900460ff161515600103611f0c57611f0c8787612414565b60205460ff161515600114801590611f325750601d546001600160a01b03888116911614155b8015611f4c57506000546001600160a01b03898116911614155b8015611f6657506000546001600160a01b03888116911614155b15612017576001600160a01b038816600090815260016020526040902054611f8f9087906129d6565b6001600160a01b03808a166000908152600160205260408082209390935590891681522054611fbf9086906129c3565b6001600160a01b0380891660008181526001602052604090819020939093559151908a1690600080516020612c15833981519152906120019089815260200190565b60405180910390a361201287610e78565b6123a8565b60205460ff1615156001148015612048575042602a54601f5460b461203c91906129c3565b61204691906129c3565b115b80156120625750601d546001600160a01b03888116911614155b801561207c57506000546001600160a01b03898116911614155b801561209657506000546001600160a01b03888116911614155b156120bf576001600160a01b038816600090815260016020526040902054611f8f9087906129d6565b6000546001600160a01b03898116911614806120e857506000546001600160a01b038881169116145b8061210057506009546001600160a01b038981169116145b8061211857506009546001600160a01b038881169116145b156121ba576001600160a01b0387166000908152600160205260409020546121419087906129c3565b6001600160a01b0380891660009081526001602052604080822093909355908a16815220546121719087906129d6565b6001600160a01b038981166000818152600160209081526040918290209490945551898152918a16929091600080516020612c15833981519152910160405180910390a36123a8565b601d546001600160a01b0388811691161461224a57602954866121f2896001600160a01b031660009081526001602052604090205490565b6121fc91906129c3565b111561224a5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a65604482015260640161095e565b6001600160a01b03881660009081526001602052604090205461226e9087906129d6565b6001600160a01b03808a16600090815260016020526040808220939093559089168152205461229e9086906129c3565b6001600160a01b0388166000908152600160205260408082209290925530815220546122cb9085906129c3565b3060009081526001602052604090208190556122e89083906129c3565b3060009081526001602052604090208190556123059084906129c3565b3060009081526001602052604090208190556123229082906129c3565b306000908152600160205260409020556034546123409085906129c3565b6034556035546123519084906129c3565b6035556037546123629083906129c3565b6037556036546123739082906129c3565b6036556040518581526001600160a01b0380891691908a1690600080516020612c158339815191529060200160405180910390a35b5050505050505050565b60008060008060008060008060006123c98a6125da565b9350935093509350600081858c6123e091906129d6565b6123ea91906129d6565b9050826123f785836129d6565b61240191906129d6565b9b949a5092985090965094509092505050565b6040805160028082526060820183526000926020830190803683375050601c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561247e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a29190612a6a565b816000815181106124b5576124b5612a2a565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106124e9576124e9612a2a565b6001600160a01b039283166020918202929092010152601c546040516307c0329d60e21b81526000929190911690631f00ca749061252d9086908690600401612acb565b600060405180830381865afa15801561254a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125729190810190612aec565b60008151811061258457612584612a2a565b60200260200101519050603154811180156125ad5750601d546001600160a01b03858116911614155b15610ac557603280546001600160a01b0386166001600160a01b0319909116179055603181905550505050565b602b5460009081908190819060ff16151560010361269757606460235460105461260491906129c3565b61260e9087612a13565b61261891906129ff565b606460215460125461262a91906129c3565b6126349088612a13565b61263e91906129ff565b606460225460145461265091906129c3565b61265a9089612a13565b61266491906129ff565b606460245460165461267691906129c3565b612680908a612a13565b61268a91906129ff565b93509350935093506126f5565b6064601054866126a79190612a13565b6126b191906129ff565b6064601254876126c19190612a13565b6126cb91906129ff565b6064601454886126db9190612a13565b6126e591906129ff565b6064601654896126809190612a13565b9193509193565b50805460008255906000526020600020908101906110e391905b8082111561272a5760008155600101612716565b5090565b600060208083528351808285015260005b8181101561275b5785810183015185820160400152820161273f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110e357600080fd5b600080604083850312156127a457600080fd5b82356127af8161277c565b946020939093013593505050565b803580151581146127cd57600080fd5b919050565b6000602082840312156127e457600080fd5b611744826127bd565b6000806000806080858703121561280357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561283457600080fd5b833561283f8161277c565b9250602084013561284f8161277c565b929592945050506040919091013590565b6000806040838503121561287357600080fd5b82359150612883602084016127bd565b90509250929050565b60006020828403121561289e57600080fd5b81356117448161277c565b600080604083850312156128bc57600080fd5b6127af836127bd565b6000602082840312156128d757600080fd5b5035919050565b600080604083850312156128f157600080fd5b82356128fc8161277c565b9150602083013561290c8161277c565b809150509250929050565b6000806000806080858703121561292d57600080fd5b84356129388161277c565b935060208501356129488161277c565b925060408501356129588161277c565b915060608501356129688161277c565b939692955090935050565b600181811c9082168061298757607f821691505b6020821081036129a757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a1d57610a1d6129ad565b81810381811115610a1d57610a1d6129ad565b634e487b7160e01b600052601260045260246000fd5b600082612a0e57612a0e6129e9565b500490565b8082028115828204841417610a1d57610a1d6129ad565b634e487b7160e01b600052603260045260246000fd5b600082612a4f57612a4f6129e9565b500690565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612a7c57600080fd5b81516117448161277c565b600081518084526020808501945080840160005b83811015612ac05781516001600160a01b031687529582019590820190600101612a9b565b509495945050505050565b828152604060208201526000612ae46040830184612a87565b949350505050565b60006020808385031215612aff57600080fd5b825167ffffffffffffffff80821115612b1757600080fd5b818501915085601f830112612b2b57600080fd5b815181811115612b3d57612b3d612a54565b8060051b604051601f19603f83011681018181108582111715612b6257612b62612a54565b604052918252848201925083810185019188831115612b8057600080fd5b938501935b82851015612b9e57845184529385019392850192612b85565b98975050505050505050565b85815284602082015260a060408201526000612bc960a0830186612a87565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612bfb57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a42bd83ad84efdb3932c5a3a22535b5fc3a07d366c366f4cfbb83b04c5fd41564736f6c63430008110033
Deployed Bytecode Sourcemap
22392:25884:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31651:175;;;;;;;;;;;;;:::i;:::-;;27361:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24937:29;;;;;;;;;;;;;;;;;;;713:25:1;;;701:2;686:18;24937:29:0;567:177:1;28267:193:0;;;;;;;;;;-1:-1:-1;28267:193:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;28267:193:0;1205:187:1;48009:108:0;;;;;;;;;;-1:-1:-1;48009:108:0;;;;;:::i;:::-;;:::i;32071:487::-;;;;;;;;;;-1:-1:-1;32071:487:0;;;;;:::i;:::-;;:::i;23784:41::-;;;;;;;;;;-1:-1:-1;23784:41:0;;;;-1:-1:-1;;;;;23784:41:0;;;;;;-1:-1:-1;;;;;2327:32:1;;;2309:51;;2297:2;2282:18;23784:41:0;2137:229:1;27638:96:0;;;;;;;;;;-1:-1:-1;27718:8:0;;27638:96;;28468:349;;;;;;;;;;-1:-1:-1;28468:349:0;;;;;:::i;:::-;;:::i;48125:148::-;;;;;;;;;;;;;:::i;27547:83::-;;;;;;;;;;-1:-1:-1;27613:9:0;;27547:83;;27613:9;;;;2974:36:1;;2962:2;2947:18;27547:83:0;2832:184:1;32566:220:0;;;;;;;;;;-1:-1:-1;32566:220:0;;;;;:::i;:::-;;:::i;31834:111::-;;;;;;;;;;-1:-1:-1;31834:111:0;;;;;:::i;:::-;;:::i;23832:28::-;;;;;;;;;;-1:-1:-1;23832:28:0;;;;-1:-1:-1;;;;;23832:28:0;;;36687:188;;;;;;;;;;-1:-1:-1;36795:12:0;;36809:17;;36828:20;;36850:16;;36687:188;;;;3965:25:1;;;4021:2;4006:18;;3999:34;;;;4049:18;;;4042:34;4107:2;4092:18;;4085:34;3952:3;3937:19;36687:188:0;3734:391:1;30545:304:0;;;;;;;;;;-1:-1:-1;30545:304:0;;;;;:::i;:::-;;:::i;35835:124::-;;;;;;;;;;-1:-1:-1;35835:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;35924:27:0;35900:4;35924:27;;;:18;:27;;;;;;;;;35835:124;36883:118;;;;;;;;;;-1:-1:-1;36974:10:0;;36986:6;;36883:118;;;4557:25:1;;;-1:-1:-1;;;;;36986:6:0;;;4613:2:1;4598:18;;4591:60;4530:18;36883:118:0;4383:274:1;30857:172:0;;;;;;;;;;-1:-1:-1;30857:172:0;;;;;:::i;:::-;;:::i;30198:106::-;;;;;;;;;;-1:-1:-1;30198:106:0;;;;;:::i;:::-;;:::i;29591:490::-;;;;;;;;;;-1:-1:-1;29591:490:0;;;;;:::i;:::-;;:::i;27742:118::-;;;;;;;;;;-1:-1:-1;27742:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;27835:17:0;27808:7;27835:17;;;:8;:17;;;;;;;27742:118;15083:103;;;;;;;;;;;;;:::i;36504:174::-;;;;;;;;;;-1:-1:-1;36591:21:0;;36504:174;;;36591:21;;;;4894:14:1;4887:22;4869:41;;36614:14:0;;;;;4953::1;4946:22;4941:2;4926:18;;4919:50;36591:21:0;36630:17;;;;5012:14:1;5005:22;4985:18;;;4978:50;;;;36649:20:0;;;;;5071:14:1;5064:22;5059:2;5044:18;;5037:50;4856:3;4841:19;36504:174:0;4662:431:1;14435:87:0;;;;;;;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;14508:6:0;14435:87;;24415:29;;;;;;;;;;;;;;;;22940:36;;;;;;;;;;-1:-1:-1;22940:36:0;;;;-1:-1:-1;;;;;22940:36:0;;;27452:87;;;;;;;;;;;;;:::i;46648:479::-;;;;;;;;;;;;;:::i;46403:237::-;;;;;;;;;;-1:-1:-1;46403:237:0;;;;;:::i;:::-;;:::i;30089:101::-;;;;;;;;;;-1:-1:-1;30089:101:0;;;;;:::i;:::-;;:::i;23986:23::-;;;;;;;;;;-1:-1:-1;23986:23:0;;;;;;;;35967:174;;;;;;;;;;-1:-1:-1;36067:18:0;;36087:11;;36100:16;;36118:14;;35967:174;;;-1:-1:-1;;;;;36067:18:0;;;5776:34:1;;36087:11:0;;;5841:2:1;5826:18;;5819:43;36100:16:0;;;5878:18:1;;;5871:43;;;;36118:14:0;;;;5945:2:1;5930:18;;5923:43;5725:3;5710:19;35967:174:0;5507:465:1;27868:199:0;;;;;;;;;;-1:-1:-1;27868:199:0;;;;;:::i;:::-;;:::i;23155:32::-;;;;;;;;;;-1:-1:-1;23155:32:0;;;;;:::i;:::-;;:::i;46208:187::-;;;;;;;;;;;;;:::i;23899:44::-;;;;;;;;;;;;;;;;36316:180;;;;;;;;;;-1:-1:-1;36416:19:0;;36437:13;;36452:19;;36473:14;;36316:180;;36149:159;;;;;;;;;;-1:-1:-1;36244:13:0;;36259;;36274:8;;36284:15;;36149:159;;28075:184;;;;;;;;;;-1:-1:-1;28075:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;28224:18:0;;;28192:7;28224:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28075:184;32794:179;;;;;;;;;;-1:-1:-1;32794:179:0;;;;;:::i;:::-;;:::i;31953:110::-;;;;;;;;;;-1:-1:-1;31953:110:0;;;;;:::i;:::-;;:::i;31037:289::-;;;;;;;;;;-1:-1:-1;31037:289:0;;;;;:::i;:::-;;:::i;31334:309::-;;;;;;;;;;-1:-1:-1;31334:309:0;;;;;:::i;:::-;;:::i;15341:201::-;;;;;;;;;;-1:-1:-1;15341:201:0;;;;;:::i;:::-;;:::i;30312:120::-;;;;;;;;;;-1:-1:-1;30312:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30399:25:0;30375:4;30399:25;;;:16;:25;;;;;;;;;30312:120;31651:175;14321:13;:11;:13::i;:::-;31708:11:::1;::::0;::::1;;:20;31699:50;;;::::0;-1:-1:-1;;;31699:50:0;;7280:2:1;31699:50:0::1;::::0;::::1;7262:21:1::0;7319:2;7299:18;;;7292:30;-1:-1:-1;;;7338:18:1;;;7331:46;7394:18;;31699:50:0::1;;;;;;;;;31760:11;:18:::0;;-1:-1:-1;;31760:18:0::1;31774:4;31760:18;::::0;;31803:15:::1;31789:11;:29:::0;31651:175::o;27361:83::-;27398:13;27431:5;27424:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27361:83;:::o;28267:193::-;28369:4;28391:39;13066:10;28414:7;28423:6;28391:8;:39::i;:::-;-1:-1:-1;28448:4:0;28267:193;;;;;:::o;48009:108::-;14321:13;:11;:13::i;:::-;48084:17:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;48084:25:0;;::::1;::::0;;;::::1;::::0;;48009:108::o;32071:487::-;14321:13;:11;:13::i;:::-;32224::::1;:31:::0;;;32266:13:::1;:31:::0;;;32308:15:::1;:35:::0;;;32354:8:::1;:21:::0;;;32365:10;32326:17;32405:29:::1;32282:15:::0;32240;32405:29:::1;:::i;:::-;:48;;;;:::i;:::-;:59;;;;:::i;:::-;32388:14;:76:::0;32533:2:::1;32514:15;;:21;;32483:67;;;::::0;-1:-1:-1;;;32483:67:0;;8272:2:1;32483:67:0::1;::::0;::::1;8254:21:1::0;8311:2;8291:18;;;8284:30;-1:-1:-1;;;8330:18:1;;;8323:41;8381:18;;32483:67:0::1;8070:335:1::0;32483:67:0::1;32071:487:::0;;;;:::o;28468:349::-;28600:4;28617:36;28627:6;28635:9;28646:6;28617:9;:36::i;:::-;28667:120;28690:6;13066:10;-1:-1:-1;;;;;28738:19:0;;;;;;:11;:19;;;;;;;;28758:10;28738:31;;;;;;;;:38;;28770:6;;28738:38;:::i;:::-;28667:8;:120::i;:::-;-1:-1:-1;28805:4:0;28468:349;;;;;:::o;48125:148::-;14321:13;:11;:13::i;:::-;48202:1:::1;48189:10;:14:::0;48214:6:::1;:51:::0;;-1:-1:-1;;;;;;48214:51:0::1;48223:42;48214:51;::::0;;48125:148::o;32566:220::-;14321:13;:11;:13::i;:::-;32664:1:::1;32657:6;:8;32649:34;;;::::0;-1:-1:-1;;;32649:34:0;;8745:2:1;32649:34:0::1;::::0;::::1;8727:21:1::0;8784:2;8764:18;;;8757:30;-1:-1:-1;;;8803:18:1;;;8796:43;8856:18;;32649:34:0::1;8543:337:1::0;32649:34:0::1;32694:29;:38:::0;;;;32744:21:::1;:32:::0;;-1:-1:-1;;32744:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32566:220::o;31834:111::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;31903:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;31903:34:0::1;31933:4;31903:34;::::0;;31834:111::o;30545:304::-;14321:13;:11;:13::i;:::-;30654:1:::1;30646:7;:9;:25;;;;;30669:2;30659:7;:12;;30646:25;30638:34;;;::::0;::::1;;30682:20;:29:::0;;-1:-1:-1;;30682:29:0::1;::::0;;::::1;;;;::::0;;-1:-1:-1;30721:12:0::1;:16:::0;30767:8:::1;::::0;:16:::1;::::0;30776:7;;30767:16:::1;:::i;:::-;30747:17;:36:::0;30814:27:::1;:15;30832:9;30814:27;:::i;:::-;30793:20;:48:::0;-1:-1:-1;;30545:304:0:o;30857:172::-;14321:13;:11;:13::i;:::-;30937:14:::1;:22:::0;;;30968:14:::1;:23:::0;;-1:-1:-1;;30968:23:0::1;::::0;;::::1;;;;::::0;;31000:21:::1;31007:14;-1:-1:-1::0;31000:21:0::1;:::i;:::-;30857:172:::0;;:::o;30198:106::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;30268:22:0::1;30291:5;30268:22:::0;;;:16:::1;:22;::::0;;;;:28;;-1:-1:-1;;30268:28:0::1;::::0;;30198:106::o;29591:490::-;14321:13;:11;:13::i;:::-;29730:21:::1;29781:11:::0;29754:24:::1;29767:11:::0;29754:10;:24:::1;:::i;:::-;:38;;;;:::i;:::-;29730:62:::0;-1:-1:-1;29864:2:0::1;29847:13;:19;;29803:102;;;::::0;-1:-1:-1;;;29803:102:0;;8272:2:1;29803:102:0::1;::::0;::::1;8254:21:1::0;8311:2;8291:18;;;8284:30;-1:-1:-1;;;8330:18:1;;;8323:41;8381:18;;29803:102:0::1;8070:335:1::0;29803:102:0::1;-1:-1:-1::0;29917:19:0::1;:32:::0;;;;29961:19:::1;:33:::0;;;;30006:13:::1;:27:::0;30044:14:::1;:29:::0;29591:490::o;15083:103::-;14321:13;:11;:13::i;:::-;15148:30:::1;15175:1;15148:18;:30::i;:::-;15083:103::o:0;27452:87::-;27491:13;27524:7;27517:14;;;;;:::i;46648:479::-;46712:18;;-1:-1:-1;;;;;46712:18:0;46700:10;:30;46692:39;;;;;;46782:4;46742:19;27835:17;;;:8;:17;;;;;;46825:37;27835:17;;46825:37;:::i;:::-;46816:4;46799:23;;;;:8;:23;;;;;;:63;;;;46913:18;;-1:-1:-1;;;;;46913:18:0;46904:28;;;;:42;;46934:11;;46904:42;:::i;:::-;46882:18;;;-1:-1:-1;;;;;46882:18:0;;;46873:28;;;;:8;:28;;;;;;:73;;;;46957:8;:10;;;46978:14;:16;;;47005:14;:16;;;47032:9;:11;47083:18;;47059:58;;47083:18;;;47076:4;;-1:-1:-1;;;;;;;;;;;47059:58:0;;;47104:11;713:25:1;;701:2;686:18;;567:177;47059:58:0;;;;;;;;46681:446;46648:479::o;46403:237::-;46489:18;;-1:-1:-1;;;;;46489:18:0;46477:10;:30;46469:39;;;;;;46539:21;46579:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;46579:7;-1:-1:-1;;;;;46571:25:0;:61;46628:3;46597:28;46609:16;46597:9;:28;:::i;:::-;:34;;;;:::i;:::-;46571:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46458:182;46403:237;:::o;30089:101::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;30155:22:0::1;;::::0;;;:16:::1;:22;::::0;;;;:27;;-1:-1:-1;;30155:27:0::1;30178:4;30155:27;::::0;;30089:101::o;27868:199::-;27973:4;27995:42;13066:10;28019:9;28030:6;27995:9;:42::i;23155:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23155:32:0;;-1:-1:-1;23155:32:0;:::o;46208:187::-;46276:18;;-1:-1:-1;;;;;46276:18:0;46264:10;:30;46256:39;;;;;;-1:-1:-1;;46306:14:0;:18;46335:21;:27;;-1:-1:-1;;46335:27:0;;;46373:14;:12;:14::i;32794:179::-;14321:13;:11;:13::i;:::-;32882:16:::1;32874:6;:24;;32866:63;;;::::0;-1:-1:-1;;;32866:63:0;;9517:2:1;32866:63:0::1;::::0;::::1;9499:21:1::0;9556:2;9536:18;;;9529:30;9595:28;9575:18;;;9568:56;9641:18;;32866:63:0::1;9315:350:1::0;32866:63:0::1;32940:14;:23:::0;32794:179::o;31953:110::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;32020:27:0::1;32050:5;32020:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32020:35:0::1;::::0;;31953:110::o;31037:289::-;14321:13;:11;:13::i;:::-;31126:14:::1;:21:::0;31111:12:::1;31170:23;31126:21:::0;31170:17:::1;:23::i;:::-;31156:37;;31202:14;31219;31234:3;31219:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31219:19:0::1;::::0;-1:-1:-1;31252:6:0;;31248:61:::1;;31272:29;::::0;-1:-1:-1;;;;;31272:24:0;::::1;::::0;:29;::::1;;;::::0;31297:3;;31272:29:::1;::::0;;;31297:3;31272:24;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31102:224;;;31037:289:::0;:::o;31334:309::-;14321:13;:11;:13::i;:::-;31499:14:::1;:25:::0;;-1:-1:-1;;;;;;31499:25:0;;::::1;-1:-1:-1::0;;;;;31499:25:0;;::::1;;::::0;;;31535:18:::1;:29:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;31575:16:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;31613:11:::1;:22:::0;;;;::::1;::::0;;;::::1;;::::0;;31334:309::o;15341:201::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;15430:22:0;::::1;15422:73;;;::::0;-1:-1:-1;;;15422:73:0;;10004:2:1;15422:73:0::1;::::0;::::1;9986:21:1::0;10043:2;10023:18;;;10016:30;10082:34;10062:18;;;10055:62;-1:-1:-1;;;10133:18:1;;;10126:36;10179:19;;15422:73:0::1;9802:402:1::0;15422:73:0::1;15506:28;15525:8;15506:18;:28::i;:::-;15341:201:::0;:::o;14600:132::-;14481:7;14508:6;-1:-1:-1;;;;;14508:6:0;13066:10;14664:23;14656:68;;;;-1:-1:-1;;;14656:68:0;;10411:2:1;14656:68:0;;;10393:21:1;;;10430:18;;;10423:30;10489:34;10469:18;;;10462:62;10541:18;;14656:68:0;10209:356:1;37009:371:0;-1:-1:-1;;;;;37136:19:0;;37128:68;;;;-1:-1:-1;;;37128:68:0;;10772:2:1;37128:68:0;;;10754:21:1;10811:2;10791:18;;;10784:30;10850:34;10830:18;;;10823:62;-1:-1:-1;;;10901:18:1;;;10894:34;10945:19;;37128:68:0;10570:400:1;37128:68:0;-1:-1:-1;;;;;37215:21:0;;37207:68;;;;-1:-1:-1;;;37207:68:0;;11177:2:1;37207:68:0;;;11159:21:1;11216:2;11196:18;;;11189:30;11255:34;11235:18;;;11228:62;-1:-1:-1;;;11306:18:1;;;11299:32;11348:19;;37207:68:0;10975:398:1;37207:68:0;-1:-1:-1;;;;;37288:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37340:32;;713:25:1;;;37340:32:0;;686:18:1;37340:32:0;;;;;;;37009:371;;;:::o;37388:1844::-;-1:-1:-1;;;;;37510:18:0;;37502:68;;;;-1:-1:-1;;;37502:68:0;;11580:2:1;37502:68:0;;;11562:21:1;11619:2;11599:18;;;11592:30;11658:34;11638:18;;;11631:62;-1:-1:-1;;;11709:18:1;;;11702:35;11754:19;;37502:68:0;11378:401:1;37502:68:0;-1:-1:-1;;;;;37589:16:0;;37581:64;;;;-1:-1:-1;;;37581:64:0;;11986:2:1;37581:64:0;;;11968:21:1;12025:2;12005:18;;;11998:30;12064:34;12044:18;;;12037:62;-1:-1:-1;;;12115:18:1;;;12108:33;12158:19;;37581:64:0;11784:399:1;37581:64:0;37673:1;37664:6;:10;37656:64;;;;-1:-1:-1;;;37656:64:0;;12390:2:1;37656:64:0;;;12372:21:1;12429:2;12409:18;;;12402:30;12468:34;12448:18;;;12441:62;-1:-1:-1;;;12519:18:1;;;12512:39;12568:19;;37656:64:0;12188:405:1;37656:64:0;-1:-1:-1;;;;;37739:22:0;;;;;;:16;:22;;;;;;;;:28;;:22;:28;;;;:58;;-1:-1:-1;;;;;;37771:20:0;;;;;;:16;:20;;;;;;;;:26;;:20;:26;;37739:58;37731:93;;;;-1:-1:-1;;;37731:93:0;;12800:2:1;37731:93:0;;;12782:21:1;12839:2;12819:18;;;12812:30;-1:-1:-1;;;12858:18:1;;;12851:52;12920:18;;37731:93:0;12598:346:1;37731:93:0;37886:4;37837:28;27835:17;;;:8;:17;;;;;;37903:4;:10;;-1:-1:-1;;37903:10:0;;;37929:14;;37837:55;;-1:-1:-1;37929:14:0;;;37903:10;37929:14;:20;;37903:10;37929:20;:41;;;;-1:-1:-1;37957:13:0;;-1:-1:-1;;;;;37953:17:0;;;37957:13;;37953:17;;37929:41;37926:220;;;37996:10;38008:24;38025:6;38008:16;:24::i;:::-;37996:36;-1:-1:-1;38051:11:0;;;38058:4;38051:11;38047:88;;38096:14;:23;;;;;;;-1:-1:-1;38096:23:0;;;;;;;;-1:-1:-1;;;;;;38096:23:0;-1:-1:-1;;;;;38096:23:0;;;;;38047:88;37981:165;37926:220;38161:20;;;;;;;:26;;38183:4;38161:26;:67;;;;;38208:20;;38191:15;:37;;38161:67;38158:192;;;38291:18;:16;:18::i;:::-;38275:34;;:15;:34;:::i;:::-;38254:20;:55;38337:1;38324:12;:14;38158:192;38370:13;;-1:-1:-1;;;;;38370:13:0;;;38366:17;;;;38362:302;;38414:20;;;;;;;:26;;38436:4;38414:26;:67;;;;;38461:20;;38445:15;:36;38414:67;38411:201;;;38529:6;38515:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;38578:17:0;;38565:12;;:30;38556:40;;;;;;38626:4;:9;;-1:-1:-1;;38626:9:0;38631:4;38626:9;;;38362:302;38740:29;;38806:13;;38703:66;;;;;-1:-1:-1;;;;;38798:21:0;;;38806:13;;38798:21;;;;:57;;;38836:19;38798:57;:91;;;;-1:-1:-1;38873:16:0;;-1:-1:-1;;;38873:16:0;;;;38872:17;38798:91;:129;;;;-1:-1:-1;38906:21:0;;;;38798:129;38780:249;;;38981:36;38996:20;38981:14;:36::i;:::-;-1:-1:-1;;;;;39077:24:0;;39041:12;39077:24;;;:18;:24;;;;;;39056:4;;39077:24;;;:50;;-1:-1:-1;;;;;;39105:22:0;;;;;;:18;:22;;;;;;;;39077:50;39073:98;;;-1:-1:-1;39154:5:0;39073:98;39183:41;39198:4;39204:2;39208:6;39216:7;39183:14;:41::i;:::-;37491:1741;;;37388:1844;;;:::o;15702:191::-;15776:16;15795:6;;-1:-1:-1;;;;;15812:17:0;;;-1:-1:-1;;;;;;15812:17:0;;;;;;15845:40;;15795:6;;;;;;;15845:40;;15776:16;15845:40;15765:128;15702:191;:::o;34437:840::-;34509:13;;;34485:21;:37;34557:13;;;34533:21;:37;34607:15;;;34581:23;:41;34652:8;;;34633:16;:27;34696:14;;;34671:22;:39;34751:19;;;34721:27;:49;34804:13;;;34780:21;:37;34852:14;;;34827:22;:39;34907:19;;;34877:27;:49;34964:15;;;34938:23;:41;-1:-1:-1;34992:17:0;;;;35020:19;;;;35050:17;;;;35078:12;;;;35101:15;;;35127:21;;;35159;;;;35192:16;;;35219:18;;;;35248:19;34437:840::o;29323:260::-;29382:7;;29540:3;29473:15;29489:16;13066:10;29456:79;;;;;;13134:19:1;;;;13169:12;;13162:28;;;;-1:-1:-1;;13228:2:1;13224:15;;;13220:53;13206:12;;;13199:75;13290:12;;29456:79:0;;;;;;;;;;;;29446:90;;;;;;29438:99;;:105;;;;:::i;:::-;29415:128;29323:260;-1:-1:-1;;;29323:260:0:o;47135:400::-;47266:16;;;47280:1;47266:16;;;;;;;;47216:4;;;;47266:16;47280:1;47266:16;;;;;;;;-1:-1:-1;;47299:15:0;;:22;;;-1:-1:-1;;;47299:22:0;;;;47242:40;;-1:-1:-1;;;;;;47299:15:0;;;;:20;;-1:-1:-1;47299:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47289:4;47294:1;47289:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;47289:32:0;;;-1:-1:-1;;;;;47289:32:0;;;;;47346:4;47328;47333:1;47328:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47328:23:0;;;:7;;;;;;;;;:23;47376:15;;:42;;-1:-1:-1;;;47376:42:0;;47358:15;;47376;;;;;:28;;:42;;47405:6;;47413:4;;47376:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47376:42:0;;;;;;;;;;;;:::i;:::-;47419:1;47376:45;;;;;;;;:::i;:::-;;;;;;;47358:63;;47445:14;;47434:7;:25;47430:79;;;-1:-1:-1;47493:4:0;;47135:400;-1:-1:-1;;;47135:400:0:o;47430:79::-;-1:-1:-1;47522:5:0;;47135:400;-1:-1:-1;;;47135:400:0:o;29059:255::-;29109:7;;29267:3;29200:15;29216:16;13066:10;29183:79;;;;;;13134:19:1;;;;13169:12;;13162:28;;;;-1:-1:-1;;13228:2:1;13224:15;;;13220:53;13206:12;;;13199:75;13290:12;;29183:79:0;;;;;;;;;;;;29173:90;;;;;;29165:99;;:105;;;;:::i;:::-;29142:128;-1:-1:-1;29287:16:0;29142:128;29302:1;29287:16;:::i;:::-;29280:23;;;29059:255;:::o;39241:1925::-;25164:16;:23;;-1:-1:-1;;;;25164:23:0;-1:-1:-1;;;25164:23:0;;;39351:14:::1;::::0;25164:23;;39371:20;;39351:18:::1;::::0;39366:3:::1;39351:18;:::i;:::-;39350:41;;;;:::i;:::-;39328:63;;39403:18;39439:20;39425:8;;39434:3;39425:12;;;;:::i;:::-;39424:35;;;;:::i;:::-;39403:56;;39471:19;39509:20;39494:9;;39504:3;39494:13;;;;:::i;:::-;39493:36;;;;:::i;:::-;39471:58;;39554:13;;39569:1;39554:16;39550:1500;;39596:18;39638:20;39618:14;;39633:3;39618:18;;;;:::i;:::-;39617:41;;;;:::i;:::-;39596:62:::0;-1:-1:-1;39703:29:0::1;39596:62:::0;39735:26:::1;39757:3;39735:20:::0;:26:::1;:::i;:::-;:39;;;;:::i;:::-;39703:71:::0;-1:-1:-1;39813:25:0::1;39836:1;39703:71:::0;39813:25:::1;:::i;:::-;39789:49:::0;-1:-1:-1;39855:20:0::1;39878:42;39789:49:::0;39878:20;:42:::1;:::i;:::-;39855:65:::0;-1:-1:-1;39962:21:0::1;40036:30;39855:65:::0;40036:16:::1;:30::i;:::-;40084:12;40099:14;40111:1;40099:10:::0;:14:::1;:::i;:::-;40084:29:::0;-1:-1:-1;40128:15:0::1;40084:29:::0;40174:11;40146:24:::1;40160:10:::0;40146:11;:24:::1;:::i;:::-;:39;;;;:::i;:::-;:46;;;;:::i;:::-;40128:64:::0;-1:-1:-1;40261:18:0::1;40282:38;40305:14:::0;40282:21:::1;:38;:::i;:::-;40261:59:::0;-1:-1:-1;40337:27:0::1;40385:7:::0;40368:14:::1;40261:59:::0;40379:3:::1;40368:14;:::i;:::-;40367:26;;;;:::i;:::-;40337:56:::0;-1:-1:-1;40459:4:0;40431:25:::1;40452:3;40337:56:::0;40431:25:::1;:::i;:::-;40430:34;;;;:::i;:::-;40408:56:::0;-1:-1:-1;40481:26:0::1;40510:43;40408:56:::0;40510:21:::1;:43;:::i;:::-;40481:72:::0;-1:-1:-1;40570:13:0::1;40586:14;40590:10:::0;40586:3:::1;:14;:::i;:::-;40570:30;;40617:80;40633:18;40653:5;40660:11;40673:10;40685:11;40617:15;:80::i;:::-;40756:56;40769:21;40792:19;40756:12;:56::i;:::-;39581:1243;;;;;;;;;;39550:1500;;;40863:38;40880:20;40863:16;:38::i;:::-;40935:21;40971:67;40935:21:::0;40996:3:::1;41001:11:::0;41014:10;41026:11;40971:15:::1;:67::i;:::-;40848:202;39550:1500;-1:-1:-1::0;;41071:1:0::1;41062:8;:10:::0;;;41083:14:::1;:16:::0;;;41110:14:::1;:16:::0;;;41137:9:::1;:11:::0;-1:-1:-1;;25210:16:0;:24;;-1:-1:-1;;;;25210:24:0;;;39241:1925::o;43295:291::-;43451:7;43446:28;;43460:14;:12;:14::i;:::-;43492:44;43510:6;43518:9;43529:6;43492:17;:44::i;:::-;43554:7;43549:29;;43563:15;35345:21;;35329:13;:37;35393:21;;35377:13;:37;35443:23;;35425:15;:41;35488:16;;35477:8;:27;35530:21;;35516:13;:35;35579:22;;35564:14;:37;35632:27;;35612:19;:47;35690:27;;35670:19;:47;35745:22;;35728:14;:39;35796:23;;35778:15;:41;35285:542;42102:589;42252:16;;;42266:1;42252:16;;;;;;;;42228:21;;42252:16;;;;;;;;;;-1:-1:-1;42252:16:0;42228:40;;42297:4;42279;42284:1;42279:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42279:23:0;;;:7;;;;;;;;;;:23;;;;42323:15;;:22;;;-1:-1:-1;;;42323:22:0;;;;:15;;;;;:20;;:22;;;;;42279:7;;42323:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42313:4;42318:1;42313:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42313:32:0;;;:7;;;;;;;;;:32;42390:15;;42358:62;;42375:4;;42390:15;42408:11;42358:8;:62::i;:::-;42459:15;;:224;;-1:-1:-1;;;42459:224:0;;-1:-1:-1;;;;;42459:15:0;;;;:66;;:224;;42540:11;;42459:15;;42610:4;;42637;;42657:15;;42459:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41180:914;41328:13;;:16;41325:253;;41370:24;41416:11;41398:15;41407:5;41398:7;:15;:::i;:::-;41397:31;;;;:::i;:::-;41370:58;-1:-1:-1;41449:19:0;;41445:122;;41507:16;;41499:52;;-1:-1:-1;;;;;41507:16:0;;;;41499:52;;;;;41534:16;;41507;41499:52;41507:16;41499:52;41534:16;41507;41499:52;;;;;;;;;;;;;;;;;;;;;41445:122;41355:223;41325:253;41594:15;;:18;41591:251;;41638:18;41678:10;41660:15;41669:5;41660:7;:15;:::i;:::-;41659:30;;;;:::i;:::-;41638:51;-1:-1:-1;41722:14:0;;41718:113;;41775:18;;41767:48;;-1:-1:-1;;;;;41775:18:0;;;;41767:48;;;;;41804:10;;41775:18;41767:48;41775:18;41767:48;41804:10;41775:18;41767:48;;;;;;;;;;;;;;;;;;;;;41718:113;41623:219;41591:251;41858:8;;:11;41855:230;;41895:19;41936:11;41918:15;41927:5;41918:7;:15;:::i;:::-;41917:31;;;;:::i;:::-;41895:53;-1:-1:-1;41969:14:0;;41965:106;;42021:11;;42013:42;;-1:-1:-1;;;;;42021:11:0;;;;42013:42;;;;;42043:11;;42021;42013:42;42021:11;42013:42;42043:11;42021;42013:42;;;;;;;;;;;;;;;;;;;;;41880:205;41180:914;;;;;:::o;42703:511::-;42883:15;;42851:62;;42868:4;;-1:-1:-1;;;;;42883:15:0;42901:11;42851:8;:62::i;:::-;42954:15;;-1:-1:-1;;;;;42954:15:0;:31;42993:9;43026:4;43046:11;42954:15;;43158:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;43158:7;42954:252;;;;;;-1:-1:-1;;;;;;42954:252:0;;;-1:-1:-1;;;;;16677:15:1;;;42954:252:0;;;16659:34:1;16709:18;;;16702:34;;;;16752:18;;;16745:34;;;;16795:18;;;16788:34;16859:15;;;16838:19;;;16831:44;43180:15:0;16891:19:1;;;16884:35;16593:19;;42954:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43594:2606::-;43741:23;43779:18;43812;43845:20;43880:13;43907:19;43918:7;43907:10;:19::i;:::-;43947:17;;43726:200;;-1:-1:-1;43726:200:0;;-1:-1:-1;43726:200:0;;-1:-1:-1;43726:200:0;-1:-1:-1;43726:200:0;-1:-1:-1;43947:17:0;;;;;:25;;:17;:25;43943:103;;43998:36;44015:9;44026:7;43998:16;:36::i;:::-;44061:11;;;;:18;;:11;:18;;;;:47;;-1:-1:-1;44095:13:0;;-1:-1:-1;;;;;44083:25:0;;;44095:13;;44083:25;;44061:47;:66;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;44112:15:0;;;14508:6;;44112:15;;44061:66;:88;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;44131:18:0;;;14508:6;;44131:18;;44061:88;44057:2104;;;-1:-1:-1;;;;;44195:16:0;;;;;;:8;:16;;;;;;:26;;44213:7;;44195:26;:::i;:::-;-1:-1:-1;;;;;44176:16:0;;;;;;;:8;:16;;;;;;:45;;;;44258:19;;;;;;;:37;;44279:15;;44258:37;:::i;:::-;-1:-1:-1;;;;;44236:19:0;;;;;;;:8;:19;;;;;;;:59;;;;44315:44;;;;;;-1:-1:-1;;;;;;;;;;;44315:44:0;;;44343:15;713:25:1;;701:2;686:18;;567:177;44315:44:0;;;;;;;;44394:24;44408:9;44394:13;:24::i;:::-;44057:2104;;;44451:11;;;;:17;;:11;:17;:72;;;;;44508:15;44498:7;;44472:11;;44486:9;44472:23;;;;:::i;:::-;:33;;;;:::i;:::-;:51;44451:72;:101;;;;-1:-1:-1;44539:13:0;;-1:-1:-1;;;;;44527:25:0;;;44539:13;;44527:25;;44451:101;:120;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;44556:15:0;;;14508:6;;44556:15;;44451:120;:142;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;44575:18:0;;;14508:6;;44575:18;;44451:142;44447:1714;;;-1:-1:-1;;;;;44639:16:0;;;;;;:8;:16;;;;;;:26;;44657:7;;44639:26;:::i;44447:1714::-;14481:7;14508:6;-1:-1:-1;;;;;44892:15:0;;;14508:6;;44892:15;;:37;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;44911:18:0;;;14508:6;;44911:18;44892:37;:63;;;-1:-1:-1;44941:14:0;;-1:-1:-1;;;;;44933:22:0;;;44941:14;;44933:22;44892:63;:92;;;-1:-1:-1;44970:14:0;;-1:-1:-1;;;;;44959:25:0;;;44970:14;;44959:25;44892:92;44888:1273;;;-1:-1:-1;;;;;45033:19:0;;;;;;:8;:19;;;;;;:29;;45054:7;;45033:29;:::i;:::-;-1:-1:-1;;;;;45011:19:0;;;;;;;:8;:19;;;;;;:51;;;;45096:16;;;;;;;:26;;45114:7;;45096:26;:::i;:::-;-1:-1:-1;;;;;45077:16:0;;;;;;;:8;:16;;;;;;;;;:45;;;;45147:36;713:25:1;;;45147:36:0;;;;45077:16;;-1:-1:-1;;;;;;;;;;;45147:36:0;686:18:1;45147:36:0;;;;;;;44888:1273;;;45277:13;;-1:-1:-1;;;;;45264:26:0;;;45277:13;;45264:26;45260:176;;45368:14;;45355:7;45333:20;45343:9;-1:-1:-1;;;;;27835:17:0;27808:7;27835:17;;;:8;:17;;;;;;;27742:118;45333:20;:30;;;;:::i;:::-;45332:50;;45324:96;;;;-1:-1:-1;;;45324:96:0;;17443:2:1;45324:96:0;;;17425:21:1;;;17462:18;;;17455:30;17521:34;17501:18;;;17494:62;17573:18;;45324:96:0;17241:356:1;45324:96:0;-1:-1:-1;;;;;45471:16:0;;;;;;:8;:16;;;;;;:26;;45489:7;;45471:26;:::i;:::-;-1:-1:-1;;;;;45452:16:0;;;;;;;:8;:16;;;;;;:45;;;;45534:19;;;;;;;:37;;45555:15;;45534:37;:::i;:::-;-1:-1:-1;;;;;45512:19:0;;;;;;:8;:19;;;;;;:59;;;;45629:4;45612:23;;;;:36;;45637:10;;45612:36;:::i;:::-;45603:4;45586:23;;;;:8;:23;;;;;:62;;;45689:38;;45714:12;;45689:38;:::i;:::-;45680:4;45663:23;;;;:8;:23;;;;;:64;;;45768:36;;45793:10;;45768:36;:::i;:::-;45759:4;45742:23;;;;:8;:23;;;;;:62;;;45845:31;;45870:5;;45845:31;:::i;:::-;45836:4;45819:23;;;;:8;:23;;;;;:57;45907:14;;:27;;45924:10;;45907:27;:::i;:::-;45891:14;:43;45965:14;;:27;;45982:10;;45965:27;:::i;:::-;45949:14;:43;46017:8;;:23;;46028:12;;46017:23;:::i;:::-;46007:8;:33;46066:9;;:17;;46078:5;;46066:17;:::i;:::-;46055:9;:28;46103:44;;713:25:1;;;-1:-1:-1;;;;;46103:44:0;;;;;;;;-1:-1:-1;;;;;;;;;;;46103:44:0;701:2:1;686:18;46103:44:0;;;;;;;44888:1273;43715:2485;;;;;43594:2606;;;:::o;33074:542::-;33165:7;33187;33209;33231;33253;33290:18;33310;33330:20;33352:13;33369:22;33383:7;33369:13;:22::i;:::-;33289:102;;;;;;;;33402:23;33450:5;33437:10;33428:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;33402:54;-1:-1:-1;33513:12:0;33483:28;33500:10;33402:54;33483:28;:::i;:::-;:43;;;;:::i;:::-;33467:59;33564:10;;-1:-1:-1;33576:10:0;;-1:-1:-1;33588:12:0;;-1:-1:-1;33576:10:0;-1:-1:-1;33074:542:0;;-1:-1:-1;;;33074:542:0:o;47543:458::-;47683:16;;;47697:1;47683:16;;;;;;;;47659:21;;47683:16;;;;;;;;-1:-1:-1;;47716:15:0;;:22;;;-1:-1:-1;;;47716:22:0;;;;47659:40;;-1:-1:-1;;;;;;47716:15:0;;;;:20;;-1:-1:-1;47716:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47706:4;47711:1;47706:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;47706:32:0;;;-1:-1:-1;;;;;47706:32:0;;;;;47763:4;47745;47750:1;47745:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47745:23:0;;;:7;;;;;;;;;:23;47793:15;;:42;;-1:-1:-1;;;47793:42:0;;47775:15;;47793;;;;;:28;;:42;;47822:6;;47830:4;;47793:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47793:42:0;;;;;;;;;;;;:::i;:::-;47836:1;47793:45;;;;;;;;:::i;:::-;;;;;;;47775:63;;47862:10;;47851:7;:21;:51;;;;-1:-1:-1;47889:13:0;;-1:-1:-1;;;;;47876:26:0;;;47889:13;;47876:26;;47851:51;47847:147;;;47929:6;:18;;-1:-1:-1;;;;;47929:18:0;;-1:-1:-1;;;;;;47929:18:0;;;;;;47962:10;:20;;;47650:351;;47543:458;;:::o;33624:805::-;33742:4;;33686:7;;;;;;;;33742:4;;:10;;:4;:10;33738:684;;33875:3;33853:19;;33839:13;;:33;;;;:::i;:::-;33830:43;;:7;:43;:::i;:::-;:49;;;;:::i;:::-;33943:3;33921:19;;33907:13;;:33;;;;:::i;:::-;33898:43;;:7;:43;:::i;:::-;:49;;;;:::i;:::-;34008:3;33992:13;;33976:15;;:29;;;;:::i;:::-;33967:39;;:7;:39;:::i;:::-;:45;;;;:::i;:::-;34066:3;34049:14;;34040:8;;:23;;;;:::i;:::-;34031:33;;:7;:33;:::i;:::-;:39;;;;:::i;:::-;33786:303;;;;;;;;;;33738:684;34248:3;34232:13;;34223:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;34296:3;34280:13;;34271:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;34347:3;34329:15;;34320:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;34387:3;34376:8;;34367:7;:18;;;;:::i;33738:684::-;33624:805;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:385::-;1833:6;1841;1849;1857;1910:3;1898:9;1889:7;1885:23;1881:33;1878:53;;;1927:1;1924;1917:12;1878:53;-1:-1:-1;;1950:23:1;;;2020:2;2005:18;;1992:32;;-1:-1:-1;2071:2:1;2056:18;;2043:32;;2122:2;2107:18;2094:32;;-1:-1:-1;1747:385:1;-1:-1:-1;1747:385:1:o;2371:456::-;2448:6;2456;2464;2517:2;2505:9;2496:7;2492:23;2488:32;2485:52;;;2533:1;2530;2523:12;2485:52;2572:9;2559:23;2591:31;2616:5;2591:31;:::i;:::-;2641:5;-1:-1:-1;2698:2:1;2683:18;;2670:32;2711:33;2670:32;2711:33;:::i;:::-;2371:456;;2763:7;;-1:-1:-1;;;2817:2:1;2802:18;;;;2789:32;;2371:456::o;3021:248::-;3086:6;3094;3147:2;3135:9;3126:7;3122:23;3118:32;3115:52;;;3163:1;3160;3153:12;3115:52;3199:9;3186:23;3176:33;;3228:35;3259:2;3248:9;3244:18;3228:35;:::i;:::-;3218:45;;3021:248;;;;;:::o;3274:247::-;3333:6;3386:2;3374:9;3365:7;3361:23;3357:32;3354:52;;;3402:1;3399;3392:12;3354:52;3441:9;3428:23;3460:31;3485:5;3460:31;:::i;4130:248::-;4195:6;4203;4256:2;4244:9;4235:7;4231:23;4227:32;4224:52;;;4272:1;4269;4262:12;4224:52;4295:26;4311:9;4295:26;:::i;5322:180::-;5381:6;5434:2;5422:9;5413:7;5409:23;5405:32;5402:52;;;5450:1;5447;5440:12;5402:52;-1:-1:-1;5473:23:1;;5322:180;-1:-1:-1;5322:180:1:o;5977:388::-;6045:6;6053;6106:2;6094:9;6085:7;6081:23;6077:32;6074:52;;;6122:1;6119;6112:12;6074:52;6161:9;6148:23;6180:31;6205:5;6180:31;:::i;:::-;6230:5;-1:-1:-1;6287:2:1;6272:18;;6259:32;6300:33;6259:32;6300:33;:::i;:::-;6352:7;6342:17;;;5977:388;;;;;:::o;6370:703::-;6488:6;6496;6504;6512;6565:3;6553:9;6544:7;6540:23;6536:33;6533:53;;;6582:1;6579;6572:12;6533:53;6621:9;6608:23;6640:31;6665:5;6640:31;:::i;:::-;6690:5;-1:-1:-1;6747:2:1;6732:18;;6719:32;6760:33;6719:32;6760:33;:::i;:::-;6812:7;-1:-1:-1;6871:2:1;6856:18;;6843:32;6884:33;6843:32;6884:33;:::i;:::-;6936:7;-1:-1:-1;6995:2:1;6980:18;;6967:32;7008:33;6967:32;7008:33;:::i;:::-;6370:703;;;;-1:-1:-1;6370:703:1;;-1:-1:-1;;6370:703:1:o;7423:380::-;7502:1;7498:12;;;;7545;;;7566:61;;7620:4;7612:6;7608:17;7598:27;;7566:61;7673:2;7665:6;7662:14;7642:18;7639:38;7636:161;;7719:10;7714:3;7710:20;7707:1;7700:31;7754:4;7751:1;7744:15;7782:4;7779:1;7772:15;7636:161;;7423:380;;;:::o;7808:127::-;7869:10;7864:3;7860:20;7857:1;7850:31;7900:4;7897:1;7890:15;7924:4;7921:1;7914:15;7940:125;8005:9;;;8026:10;;;8023:36;;;8039:18;;:::i;8410:128::-;8477:9;;;8498:11;;;8495:37;;;8512:18;;:::i;8885:127::-;8946:10;8941:3;8937:20;8934:1;8927:31;8977:4;8974:1;8967:15;9001:4;8998:1;8991:15;9017:120;9057:1;9083;9073:35;;9088:18;;:::i;:::-;-1:-1:-1;9122:9:1;;9017:120::o;9142:168::-;9215:9;;;9246;;9263:15;;;9257:22;;9243:37;9233:71;;9284:18;;:::i;9670:127::-;9731:10;9726:3;9722:20;9719:1;9712:31;9762:4;9759:1;9752:15;9786:4;9783:1;9776:15;13313:112;13345:1;13371;13361:35;;13376:18;;:::i;:::-;-1:-1:-1;13410:9:1;;13313:112::o;13430:127::-;13491:10;13486:3;13482:20;13479:1;13472:31;13522:4;13519:1;13512:15;13546:4;13543:1;13536:15;13562:251;13632:6;13685:2;13673:9;13664:7;13660:23;13656:32;13653:52;;;13701:1;13698;13691:12;13653:52;13733:9;13727:16;13752:31;13777:5;13752:31;:::i;13818:461::-;13871:3;13909:5;13903:12;13936:6;13931:3;13924:19;13962:4;13991:2;13986:3;13982:12;13975:19;;14028:2;14021:5;14017:14;14049:1;14059:195;14073:6;14070:1;14067:13;14059:195;;;14138:13;;-1:-1:-1;;;;;14134:39:1;14122:52;;14194:12;;;;14229:15;;;;14170:1;14088:9;14059:195;;;-1:-1:-1;14270:3:1;;13818:461;-1:-1:-1;;;;;13818:461:1:o;14284:332::-;14491:6;14480:9;14473:25;14534:2;14529;14518:9;14514:18;14507:30;14454:4;14554:56;14606:2;14595:9;14591:18;14583:6;14554:56;:::i;:::-;14546:64;14284:332;-1:-1:-1;;;;14284:332:1:o;14621:1105::-;14716:6;14747:2;14790;14778:9;14769:7;14765:23;14761:32;14758:52;;;14806:1;14803;14796:12;14758:52;14839:9;14833:16;14868:18;14909:2;14901:6;14898:14;14895:34;;;14925:1;14922;14915:12;14895:34;14963:6;14952:9;14948:22;14938:32;;15008:7;15001:4;14997:2;14993:13;14989:27;14979:55;;15030:1;15027;15020:12;14979:55;15059:2;15053:9;15081:2;15077;15074:10;15071:36;;;15087:18;;:::i;:::-;15133:2;15130:1;15126:10;15165:2;15159:9;15228:2;15224:7;15219:2;15215;15211:11;15207:25;15199:6;15195:38;15283:6;15271:10;15268:22;15263:2;15251:10;15248:18;15245:46;15242:72;;;15294:18;;:::i;:::-;15330:2;15323:22;15380:18;;;15414:15;;;;-1:-1:-1;15456:11:1;;;15452:20;;;15484:19;;;15481:39;;;15516:1;15513;15506:12;15481:39;15540:11;;;;15560:135;15576:6;15571:3;15568:15;15560:135;;;15642:10;;15630:23;;15593:12;;;;15673;;;;15560:135;;;15714:6;14621:1105;-1:-1:-1;;;;;;;;14621:1105:1:o;15731:582::-;16030:6;16019:9;16012:25;16073:6;16068:2;16057:9;16053:18;16046:34;16116:3;16111:2;16100:9;16096:18;16089:31;15993:4;16137:57;16189:3;16178:9;16174:19;16166:6;16137:57;:::i;:::-;-1:-1:-1;;;;;16230:32:1;;;;16225:2;16210:18;;16203:60;-1:-1:-1;16294:3:1;16279:19;16272:35;16129:65;15731:582;-1:-1:-1;;;15731:582:1:o;16930:306::-;17018:6;17026;17034;17087:2;17075:9;17066:7;17062:23;17058:32;17055:52;;;17103:1;17100;17093:12;17055:52;17132:9;17126:16;17116:26;;17182:2;17171:9;17167:18;17161:25;17151:35;;17226:2;17215:9;17211:18;17205:25;17195:35;;16930:306;;;;;:::o
Swarm Source
ipfs://1a42bd83ad84efdb3932c5a3a22535b5fc3a07d366c366f4cfbb83b04c5fd415
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.