Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
31,000,000 Batcoin
Holders
24
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
48,581.58197606 BatcoinValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BatcoinSupreme
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-15 */ // Ŗ̷͇̙̰̭̪̟̺̲̜̹͔̎̍́ͅi̶̡̹͈͎̳̞͙͖̾̂̀͑̀͆̑̓̽̉͐͘͘ͅs̴̹̀̎̇͗̍͗̾̋̏̈͐͒̕͠͠ͅë̸͓̮͉͈͇͍̖͎̩̞͈́́́̋̇̾͋̈́̾͆͑͘͘͜͠͝ f̵̢̻͈̫̬̻͔̘̞͈̆̇̍̈̌͊ͅr̵̡͕͈͚͍͍̼͕̍̀̈́̽̎̍͗̍́̏̚͜͠ŏ̸̡̼̺̫̥̻͈̞̍͆̏̓́͜͝ͅm̵̢͕̫̓̔͑̊̈ Ḑ̷̮̳̣̟͉͋͗̓̕͜ǎ̴̯̀͠r̵̡͕͈͚͍͍̼͕̍̀̈́̽̎̍͗̍́̏̚͜͠k̵̘̺̦͉͖̪̪͖͉͊̆̔́̈́̍̃̈́͒̂̑̀̚͜͝ǹ̷̨͍̮̥̹̘͙̗̻̬̬̜̥̮̃̒̈́̽͗̿̍̄̂̏͆͠͝ë̸͓̮͉͈͇͍̖͎̩̞͈́́́̋̇̾͋̈́̾͆͑͘͘͜͠͝s̴̹̀̎̇͗̍͗̾̋̏̈͐͒̕͠͠ͅs̴̹̀̎̇͗̍͗̾̋̏̈͐͒̕͠͠ͅ.. Ȩ̸̪̯̗̘̥̣̲̣̣͍͚͙̥̩́̀̈̆͑t̸̫̫̤͕̳̻̰̣̭́̌̉͝ͅë̸͓̮͉͈͇͍̖͎̩̞͈́́́̋̇̾͋̈́̾͆͑͘͘͜͠͝r̵̡͕͈͚͍͍̼͕̍̀̈́̽̎̍͗̍́̏̚͜͠ǹ̷̨͍̮̥̹̘͙̗̻̬̬̜̥̮̃̒̈́̽͗̿̍̄̂̏͆͠͝i̶̡̹͈͎̳̞͙͖̾̂̀͑̀͆̑̓̽̉͐͘͘ͅt̸̫̫̤͕̳̻̰̣̭́̌̉͝ͅy̶͔͗ B̶̨̛̺̤̱̾̀́̋̔̆̏̎͘͘ë̸͓̮͉͈͇͍̖͎̩̞͈́́́̋̇̾͋̈́̾͆͑͘͘͜͠͝ǧ̷̡̟̲̹̩̱͉̮̭͇͚̮̖̟̽̓͊̔̓̕i̶̡̹͈͎̳̞͙͖̾̂̀͑̀͆̑̓̽̉͐͘͘ͅǹ̷̨͍̮̥̹̘͙̗̻̬̬̜̥̮̃̒̈́̽͗̿̍̄̂̏͆͠͝s̴̹̀̎̇͗̍͗̾̋̏̈͐͒̕͠͠ͅ. // 𝟑𝟏𝟎𝟎𝟎𝟎𝟎𝟎 // 8888808D A8808A B8888888888 d88880N A80808bA 888 N88A NNN // 888 88B A8Y Y8A 888 888 888 888 III M888A NNN // 8888888K 8888O88889 888 888 888 888 808 M88 88VANM // 888 88B 888 888 888 888 688 888 808 N88 888NN // 8888880D 888 888 888 988880P V980808V B88 NNN VMMM // 🅢🅤🅟🅡🅔🅜🅔 // 𝙊𝙛𝙛𝙞𝙘𝙞𝙖𝙡 𝙒𝙚𝙗𝙨𝙞𝙩𝙚: 𝙬𝙬𝙬.𝙗𝙖𝙩𝙘𝙤𝙞𝙣𝙨𝙪𝙥𝙧𝙚𝙢𝙚.𝙘𝙤𝙢 // 𝘼𝙦𝙪𝙞𝙧𝙚𝙙 𝙛𝙤𝙧 𝙙𝙚𝙫𝙚𝙡𝙤𝙥𝙢𝙚𝙣𝙩 𝙙𝙤𝙢𝙖𝙞𝙣; 𝙬𝙬𝙬.𝙗𝙖𝙩𝙘𝙤𝙞𝙣𝙨𝙪𝙥𝙧𝙚𝙢𝙚.𝙤𝙧𝙜 𝙬𝙬𝙬.𝙗𝙖𝙩𝙘𝙤𝙞𝙣𝙨𝙪𝙥𝙧𝙚𝙢𝙚.𝙣𝙚𝙩 //0x000000000000000000000000000000000002282023 ̸͖͓̯͓̉B̠̬̲͉̱̠̌̅͠a̷̙̬͍̪̗̝̤̪͗̀ͫ̂͏̨̯̲̭͞t̵̡̠̘̙̮̥̯̰͈̼̯̜̄͋̔͆͂̇͝ͅo͇̬͎̪̻͉̞̞̗̠ͦ̎͂̃̑ͧ͘͜s̸̷͖̖̹̝̦̮̹̫̭̲͔̑͒ͭ̓̂̈̏͋̇̂̾h͚̬̲̘̥̮̘̣̭̰͓̖̗͐͋̒ͣ̆͗̊ͮ̏̑ͯ̈̉͟͢͢͞i̓͏͙̬̝ ̰͎̰͗ͩ̌̽̿̎̂N͚̘̖̻̓́a̷̷̙̬͍̪̗̝̤̪̺̺͙͗̀͐ͫͫ̃͟k͛ͨ̉̚a̷̙̬͍̪̗̝̤̪͕̩̠̬̪̟͗̀ͦ̎̂̄͂m̷̡̤̲̣̻̮̞̱͕̲̖ͧ̂͛̓̌͑ͬ̋̊̃͂͗̚͜ų̵̘͔͎̖͍͍̞͕̺ͫ̀ͮ̀̚͢͜ͅͅr̨̲̦̰̪̿̅̓̇̀̒̐͜͟a̷̙̬͍̪̗̝̤̪͗̀0x0000000000000000000000000000000000000000 //SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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; } } /** * @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); } } interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); // function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IBEP20 REWARDS = IBEP20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); //Uses IBEP20 ERC20 Implementation Standard Contract address NATIVE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IDEXRouter router; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 12; uint256 public minPeriod = 0 minutes; uint256 public minDistribution = 1* 10 ** 6; uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _token = msg.sender; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = REWARDS.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = NATIVE; path[1] = address(REWARDS); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = REWARDS.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); REWARDS.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } contract BatcoinSupreme is IBEP20, Ownable { using SafeMath for uint256; //contract uses both erc20 and bep20 implementation standard address REWARDS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; address NATIVE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; string constant _name = "Batcoin Supreme"; string constant _symbol = "Batcoin"; uint8 constant _decimals = 8; uint256 _totalSupply = 31 * 10**6 * (10 ** _decimals); uint256 public _maxTxAmount = ( _totalSupply * 3 ) / 100; uint256 public _maxWalletToken = ( _totalSupply * 3 ) / 100; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) authorizations; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isTimelockExempt; mapping (address => bool) isDividendExempt; mapping (address => bool) isMaxWalletExempt; mapping (address => bool) isUtilityContract; uint256 liquidityFee = 1; uint256 reflectionFee = 1; uint256 marketingFee = 4; uint256 public totalFee = 6; uint256 feeDenominator = 100; address public autoLiquidityReceiver; address public marketingFeeReceiver; uint256 targetLiquidity = 10; uint256 targetLiquidityDenominator = 100; IDEXRouter public router; address public pair; uint256 public launchedAt; bool public tradingOpen = true; DividendDistributor distributor; uint256 distributorGas = 500000; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply / 10000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); pair = IDEXFactory(router.factory()).createPair(NATIVE, address(this)); _allowances[address(this)][address(router)] = type(uint128).max; address _owner = msg.sender; authorizations[_owner] = true; distributor = new DividendDistributor(address(router)); isFeeExempt[_owner] = true; isTxLimitExempt[_owner] = true; isMaxWalletExempt[_owner] = true; isTimelockExempt[_owner] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; autoLiquidityReceiver = _owner; marketingFeeReceiver = _owner; _balances[_owner] = _totalSupply; emit Transfer(address(0), _owner, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } // function getOwner() external view override returns (address) { return owner; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint128).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "You don't have enough allowance."); } return _transferFrom(sender, recipient, amount); } function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() { _maxWalletToken = (_totalSupply * maxWallPercent ) / 100; } function setIsUtilityContract(address _address, bool _trueorfalse) external onlyOwner(){ isUtilityContract[_address] = _trueorfalse; isMaxWalletExempt[_address] = _trueorfalse; isTxLimitExempt[_address] = _trueorfalse; isFeeExempt[_address] = _trueorfalse; isDividendExempt[_address] = _trueorfalse; } function setIsMaxWalletExepmt(address _address, bool _trueorfalse) external onlyOwner(){ isMaxWalletExempt[_address] = _trueorfalse; } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(!authorizations[sender] && !authorizations[recipient]){ require(tradingOpen,"Trading not open yet"); } if (!authorizations[sender] && !isMaxWalletExempt[recipient] && !isUtilityContract[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver){ uint256 heldTokens = balanceOf(recipient); require((heldTokens + amount) <= _maxWalletToken,"Recipient can't hold more than Max Wallet!");} checkTxLimit(sender, amount); if(shouldSwapBack()){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "You don't have enough tokens."); uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); if(!isDividendExempt[sender]) { try distributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "You don't have enough tokens."); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "You can't transfer more than Tx Limit."); } function shouldTakeFee(address sender, address recipient) internal view returns (bool) { if(isUtilityContract[recipient]){ return false; }else{ return !isFeeExempt[sender]; } } function takeFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(totalFee).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function clearStuckBalance(uint256 amountPercentage) external onlyOwner { uint256 amountNATIVE = address(this).balance; payable(marketingFeeReceiver).transfer(amountNATIVE * amountPercentage / 100); } function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; } function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = NATIVE; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountNATIVE = address(this).balance.sub(balanceBefore); uint256 totalNATIVEFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountNATIVELiquidity = amountNATIVE.mul(dynamicLiquidityFee).div(totalNATIVEFee).div(2); uint256 amountNATIVEReflection = amountNATIVE.mul(reflectionFee).div(totalNATIVEFee); uint256 amountNATIVEMarketing = amountNATIVE.mul(marketingFee).div(totalNATIVEFee); try distributor.deposit{value: amountNATIVEReflection}() {} catch {} (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountNATIVEMarketing, gas: 30000}(""); tmpSuccess = false; if(amountToLiquify > 0){ router.addLiquidityETH{value: amountNATIVELiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountNATIVELiquidity, amountToLiquify); } } function setTxLimit(uint256 amount) external onlyOwner { _maxTxAmount = amount; } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { isFeeExempt[accounts[i]] = excluded; } } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } function setIsTimelockExempt(address holder, bool exempt) external onlyOwner { isTimelockExempt[holder] = exempt; } function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external onlyOwner { liquidityFee = _liquidityFee; reflectionFee = _reflectionFee; marketingFee = _marketingFee; totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee); feeDenominator = _feeDenominator; require(totalFee < feeDenominator/4); } function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner { autoLiquidityReceiver = _autoLiquidityReceiver; marketingFeeReceiver = _marketingFeeReceiver; } function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner { swapEnabled = _enabled; swapThreshold = _amount; } function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } function setDistributorSettings(uint256 gas) external onlyOwner { require(gas < 750000); distributorGas = gas; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountNATIVE, uint256 amountNAME); } // PROJECT LEGAL DISCLAIMER // This is a decentralized development project that is open to any possibilities. Please be aware that when trading is open, // it will be highly volatile and you must trade at your own risk. The price of Batcoin token will be determined by external // holders and is not controlled by the project. By participating, you agree that you are not purchasing the Batcoin token as // a security or investment. The Batcoin Supreme Core cannot be held liable for any losses or taxes you may incur. Additionally, // please note that the Core is presenting the token smart contract as it was launched audited and not renounced, and there will // be open integration that will affect the overall ecosystem in the future. Although the team is intentional for progress, the // project does not guarantee 100% success and you accept whatever direction the project will take as is. // This project aspires to facilitate development, where ideas and contributions will change over time. Please conduct your own // due diligence and consult your financial advisor before making any investment decisions. The platform and team will not and // do not intend to make any representations, guarantees, or commitments to any entity or individual and hereby assume no // responsibility for any losses, damages, or liabilities arising from the use of the Batcoin token or the platform, including // but not limited to the accuracy, completeness, timeliness, and reliability of the smart contract code, future dapps, content, // and any other material published on the platform. // 🅱🅰🆃🅲🅾🅸🅽 🅳🅴🆅🅴🅻🅾🅿🅼🅴🅽🆃 🆃🅴🅰🅼
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountNATIVE","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountNAME","type":"uint256"}],"name":"AutoLiquify","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_trueorfalse","type":"bool"}],"name":"setIsMaxWalletExepmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_trueorfalse","type":"bool"}],"name":"setIsUtilityContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790915560028054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560038054821661dead1790556004805490911690556200006e6008600a62000586565b6200007e906301d905c06200059e565b600555606460055460036200009491906200059e565b620000a09190620005b8565b60065560646005546003620000b691906200059e565b620000c29190620005b8565b6007556001601181905560128190556004601355600660145560646015819055600a601855601955601d805460ff1990811683179091556207a120601e55601f805490911690911790556005546200011e9061271090620005b8565b6020553480156200012e57600080fd5b506200013a3362000413565b601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200019f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c59190620005db565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620005db565b601b80546001600160a01b0319166001600160a01b03928316179055306000908152600960209081526040808320601a8054861685529083528184206001600160801b03905533808552600a90935292819020805460ff191660011790559154915190929190911690620002b19062000463565b6001600160a01b039091168152602001604051809103906000f080158015620002de573d6000803e3d6000fd5b50601d8054610100600160a81b0319166101006001600160a01b03938416021790558181166000818152600b60209081526040808320805460ff199081166001908117909255600c84528285208054821683179055600f84528285208054821683179055600d8452828520805482168317905560038054881686528386208054831684179055308087528487208054841685179055601b5489168752600e8652848720805484168517905586528386208054831684179055549096168452818420805490961617909455601680546001600160a01b031990811685179091556017805490911684179055600554838352600882528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000606565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610e13806200257f83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c8578160001904821115620004ac57620004ac62000471565b80851615620004ba57918102915b93841c93908002906200048c565b509250929050565b600082620004e15750600162000580565b81620004f05750600062000580565b8160018114620005095760028114620005145762000534565b600191505062000580565b60ff84111562000528576200052862000471565b50506001821b62000580565b5060208310610133831016604e8410600b841016171562000559575081810a62000580565b62000565838362000487565b80600019048211156200057c576200057c62000471565b0290505b92915050565b60006200059760ff841683620004d0565b9392505050565b808202811582820484141762000580576200058062000471565b600082620005d657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005ee57600080fd5b81516001600160a01b03811681146200059757600080fd5b611f6980620006166000396000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c492f046116100b6578063e96fada21161007a578063e96fada214610752578063f2fde38b14610772578063f708a64f14610792578063f84ba65d146107b2578063f887ea40146107d2578063ffb54a99146107f257600080fd5b8063c492f0461461068c578063ca33e64c146106ac578063d51ed1c8146106cc578063dd62ed3e146106ec578063df20fd491461073257600080fd5b806395d89b411161010857806395d89b41146105c65780639d1944f5146105f6578063a4b45c0014610616578063a8aa1b3114610636578063a9059cbb14610656578063bf56b3711461067657600080fd5b8063715018a61461053357806378109e54146105485780637d1db4a51461055e57806382bf293c146105745780638da5cb5b1461059457600080fd5b8063201e7991116101dd57806350db71fb116101a157806350db71fb146104635780635c85974f14610483578063658d4b7f146104a35780636ddd1713146104c35780636fcba377146104dd57806370a08231146104fd57600080fd5b8063201e7991146103d257806323b872dd146103f25780632b112e49146104125780632d48e89614610427578063313ce5671461044757600080fd5b80630d295980116102245780630d295980146103475780631161ae391461036757806318160ddd146103875780631da1db5e1461039c5780631df4ccfc146103bc57600080fd5b8062abe20f1461026b5780630445b6671461028d578063051e7ddc146102b657806306fdde03146102d6578063095ea7b31461031757600080fd5b3661026657005b600080fd5b34801561027757600080fd5b5061028b610286366004611b9c565b61080c565b005b34801561029957600080fd5b506102a360205481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5061028b6102d1366004611b9c565b61087f565b3480156102e257600080fd5b5060408051808201909152600f81526e426174636f696e2053757072656d6560881b60208201525b6040516102ad9190611bcf565b34801561032357600080fd5b50610337610332366004611c1d565b6108b2565b60405190151581526020016102ad565b34801561035357600080fd5b5061028b610362366004611c47565b61091f565b34801561037357600080fd5b50610337610382366004611c62565b61093a565b34801561039357600080fd5b506005546102a3565b3480156103a857600080fd5b5061028b6103b7366004611c84565b61094e565b3480156103c857600080fd5b506102a360145481565b3480156103de57600080fd5b5061028b6103ed366004611c62565b6109aa565b3480156103fe57600080fd5b5061033761040d366004611c9d565b6109bd565b34801561041e57600080fd5b506102a3610a90565b34801561043357600080fd5b5061028b610442366004611c62565b610ae2565b34801561045357600080fd5b50604051600881526020016102ad565b34801561046f57600080fd5b5061028b61047e366004611b9c565b610b58565b34801561048f57600080fd5b5061028b61049e366004611c84565b610b8b565b3480156104af57600080fd5b5061028b6104be366004611b9c565b610b98565b3480156104cf57600080fd5b50601f546103379060ff1681565b3480156104e957600080fd5b5061028b6104f8366004611cd9565b610bcb565b34801561050957600080fd5b506102a3610518366004611d0b565b6001600160a01b031660009081526008602052604090205490565b34801561053f57600080fd5b5061028b610c1c565b34801561055457600080fd5b506102a360075481565b34801561056a57600080fd5b506102a360065481565b34801561058057600080fd5b5061028b61058f366004611c84565b610c30565b3480156105a057600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b3480156105d257600080fd5b506040805180820190915260078152662130ba31b7b4b760c91b602082015261030a565b34801561060257600080fd5b5061028b610611366004611c84565b610c58565b34801561062257600080fd5b5061028b610631366004611d26565b610c74565b34801561064257600080fd5b50601b546105ae906001600160a01b031681565b34801561066257600080fd5b50610337610671366004611c1d565b610caa565b34801561068257600080fd5b506102a3601c5481565b34801561069857600080fd5b5061028b6106a7366004611d50565b610cb7565b3480156106b857600080fd5b506016546105ae906001600160a01b031681565b3480156106d857600080fd5b506102a36106e7366004611c84565b610d30565b3480156106f857600080fd5b506102a3610707366004611d26565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561073e57600080fd5b5061028b61074d366004611dd4565b610d74565b34801561075e57600080fd5b506017546105ae906001600160a01b031681565b34801561077e57600080fd5b5061028b61078d366004611d0b565b610d93565b34801561079e57600080fd5b5061028b6107ad366004611b9c565b610e11565b3480156107be57600080fd5b5061028b6107cd366004611b9c565b610f07565b3480156107de57600080fd5b50601a546105ae906001600160a01b031681565b3480156107fe57600080fd5b50601d546103379060ff1681565b610814610f3a565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f83528184208054861682179055600c83528184208054861682179055600b83528184208054861682179055600e9092529091208054909216179055565b610887610f3a565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061090d9086815260200190565b60405180910390a35060015b92915050565b610927610f3a565b601d805460ff1916911515919091179055565b60008261094683610d30565b119392505050565b610956610f3a565b60175447906001600160a01b03166108fc60646109738585611e06565b61097d9190611e1d565b6040518115909202916000818181858888f193505050501580156109a5573d6000803e3d6000fd5b505050565b6109b2610f3a565b601891909155601955565b6001600160a01b03831660009081526009602090815260408083203384529091528120546fffffffffffffffffffffffffffffffff14610a7b5760408051808201825260208082527f596f7520646f6e2774206861766520656e6f75676820616c6c6f77616e63652e818301526001600160a01b0387166000908152600982528381203382529091529190912054610a56918490610f94565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610a86848484610fc0565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610add906003546001600160a01b0316600090815260086020526040902054610ad790600554906114b6565b906114b6565b905090565b610aea610f3a565b601d546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610b3c57600080fd5b505af1158015610b50573d6000803e3d6000fd5b505050505050565b610b60610f3a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610b93610f3a565b600655565b610ba0610f3a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610bd3610f3a565b601184905560128390556013829055610bf682610bf086866114c2565b906114c2565b6014556015819055610c09600482611e1d565b60145410610c1657600080fd5b50505050565b610c24610f3a565b610c2e60006114ce565b565b610c38610f3a565b606481600554610c489190611e06565b610c529190611e1d565b60075550565b610c60610f3a565b620b71b08110610c6f57600080fd5b601e55565b610c7c610f3a565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000610a89338484610fc0565b610cbf610f3a565b60005b82811015610c165781600b6000868685818110610ce157610ce1611e3f565b9050602002016020810190610cf69190611d0b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d2881611e55565b915050610cc2565b6000610919610d3d610a90565b601b546001600160a01b0316600090815260086020526040902054610d6e90610d6790600261151e565b859061151e565b9061152a565b610d7c610f3a565b601f805460ff191692151592909217909155602055565b610d9b610f3a565b6001600160a01b038116610e055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610e0e816114ce565b50565b610e19610f3a565b6001600160a01b0382163014801590610e405750601b546001600160a01b03838116911614155b610e4957600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155610eb557601d54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca9690604401610b22565b601d546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401610b22565b5050565b610f0f610f3a565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dfc565b60008184841115610fb85760405162461bcd60e51b8152600401610dfc9190611bcf565b505050900390565b60215460009060ff1615610fe057610fd9848484611536565b9050610a89565b6001600160a01b0384166000908152600a602052604090205460ff1615801561102257506001600160a01b0383166000908152600a602052604090205460ff16155b1561107057601d5460ff166110705760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610dfc565b6001600160a01b0384166000908152600a602052604090205460ff161580156110b257506001600160a01b0383166000908152600f602052604090205460ff16155b80156110d757506001600160a01b03841660009081526010602052604090205460ff16155b80156110ec57506001600160a01b0383163014155b801561110657506003546001600160a01b03848116911614155b80156111205750601b546001600160a01b03848116911614155b801561113a57506017546001600160a01b03848116911614155b801561115457506016546001600160a01b03848116911614155b156111e2576001600160a01b03831660009081526008602052604090205460075461117f8483611e6e565b11156111e05760405162461bcd60e51b815260206004820152602a60248201527f526563697069656e742063616e277420686f6c64206d6f7265207468616e204d60448201526961782057616c6c65742160b01b6064820152608401610dfc565b505b6111ec8483611625565b6111f46116a9565b15611201576112016116fa565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b03871660009081526008909152919091205461125c918490610f94565b6001600160a01b0385166000908152600860205260408120919091556112828585611a7e565b61128c5782611296565b6112968584611aca565b6001600160a01b0385166000908152600860205260409020549091506112bc90826114c2565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600e909152205460ff1661136557601d546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561135257600080fd5b505af1925050508015611363575060015b505b6001600160a01b0384166000908152600e602052604090205460ff166113fb57601d546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156113e857600080fd5b505af19250505080156113f9575060015b505b601d54601e546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b15801561144c57600080fd5b505af192505050801561145d575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114a391815260200190565b60405180910390a3506001949350505050565b6000610a898284611e81565b6000610a898284611e6e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a898284611e06565b6000610a898284611e1d565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b0386166000908152600890915291822054611590918490610f94565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546115bf90836114c2565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116139086815260200190565b60405180910390a35060019392505050565b6006548111158061164e57506001600160a01b0382166000908152600c602052604090205460ff165b610f035760405162461bcd60e51b815260206004820152602660248201527f596f752063616e2774207472616e73666572206d6f7265207468616e205478206044820152652634b6b4ba1760d11b6064820152608401610dfc565b601b546000906001600160a01b031633148015906116ca575060215460ff16155b80156116d85750601f5460ff165b8015610add575050602080543060009081526008909252604090912054101590565b6021805460ff191660011790556018546019546000916117199161093a565b61172557601154611728565b60005b9050600061174c6002610d6e601454610d6e8660205461151e90919063ffffffff16565b90506000611765826020546114b690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061179f5761179f611e3f565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106117d0576117d0611e3f565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac9479061181a908690600090879030904290600401611e94565b600060405180830381600087803b15801561183457600080fd5b505af1158015611848573d6000803e3d6000fd5b50505050600061186182476114b690919063ffffffff16565b9050600061187c61187388600261152a565b601454906114b6565b905060006118916002610d6e8481878d61151e565b905060006118ae83610d6e6012548761151e90919063ffffffff16565b905060006118cb84610d6e6013548861151e90919063ffffffff16565b9050601d60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561191d57600080fd5b505af19350505050801561192f575060015b506017546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114611982576040519150601f19603f3d011682016040523d82523d6000602084013e611987565b606091505b5060009250508a159050611a6757601a5460165460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015611a05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a2a9190611f05565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506021805460ff19169055505050505050505050565b6001600160a01b03811660009081526010602052604081205460ff1615611aa757506000610919565b506001600160a01b0382166000908152600b602052604090205460ff1615610919565b600080611ae8601554610d6e6014548661151e90919063ffffffff16565b30600090815260086020526040902054909150611b0590826114c2565b30600081815260086020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b569085815260200190565b60405180910390a3611b6883826114b6565b949350505050565b80356001600160a01b0381168114611b8757600080fd5b919050565b80358015158114611b8757600080fd5b60008060408385031215611baf57600080fd5b611bb883611b70565b9150611bc660208401611b8c565b90509250929050565b600060208083528351808285015260005b81811015611bfc57858101830151858201604001528201611be0565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611c3057600080fd5b611c3983611b70565b946020939093013593505050565b600060208284031215611c5957600080fd5b610a8982611b8c565b60008060408385031215611c7557600080fd5b50508035926020909101359150565b600060208284031215611c9657600080fd5b5035919050565b600080600060608486031215611cb257600080fd5b611cbb84611b70565b9250611cc960208501611b70565b9150604084013590509250925092565b60008060008060808587031215611cef57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d1d57600080fd5b610a8982611b70565b60008060408385031215611d3957600080fd5b611d4283611b70565b9150611bc660208401611b70565b600080600060408486031215611d6557600080fd5b833567ffffffffffffffff80821115611d7d57600080fd5b818601915086601f830112611d9157600080fd5b813581811115611da057600080fd5b8760208260051b8501011115611db557600080fd5b602092830195509350611dcb9186019050611b8c565b90509250925092565b60008060408385031215611de757600080fd5b611c3983611b8c565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761091957610919611df0565b600082611e3a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611e6757611e67611df0565b5060010190565b8082018082111561091957610919611df0565b8181038181111561091957610919611df0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ee45784516001600160a01b031683529383019391830191600101611ebf565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f1a57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122018c1cb293435044d2bd548d3d00467209f381a8cbe524e5b65a3c85c176a971f64736f6c634300081300336080604052600180546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905564e8d4a51000600c556000600d55620f4240600e5534801561006d57600080fd5b50604051610e13380380610e1383398101604081905261008c916100e6565b6001600160a01b0381166100b457737a250d5630b4cf539739df2c5dacb4c659f2488d6100b6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610116565b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b9392505050565b610cee806101256000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610ad2565b610285565b005b34801561013957600080fd5b506100f8610148366004610afc565b6103fd565b34801561015957600080fd5b5061012b610168366004610b17565b610488565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610afc565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104aa565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106d9565b34801561025b57600080fd5b5061012b61026a366004610b39565b6106e4565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c3826107e8565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b156103825761038282610906565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a1b565b90610a30565b6008556001600160a01b03821660009081526007602052604090208190556103da81610a3c565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b038116600090815260076020526040812054810361042457506000919050565b6001600160a01b03821660009081526007602052604081205461044690610a3c565b6001600160a01b038416600090815260076020526040902060010154909150808211610476575060009392505050565b6104808282610a1b565b949350505050565b6000546001600160a01b0316331461049f57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104c157600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190610b52565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061057457610574610b6b565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105a4576105a4610b6b565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105ea90600090869030904290600401610b81565b6000604051808303818588803b15801561060357600080fd5b505af1158015610617573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061069793508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190610b52565b90610a1b565b6009549091506106a79082610a30565b600955600854600c546106d1916106c8916106c29085610a59565b90610a65565b600b5490610a30565b600b55505050565b6106e2336107e8565b565b6000546001600160a01b031633146106fb57600080fd5b600454600081900361070b575050565b6000805a905060005b848310801561072257508381105b156107e15783600f5410610736576000600f555b6107686004600f548154811061074e5761074e610b6b565b6000918252602090912001546001600160a01b0316610a71565b1561079f5761079f6004600f548154811061078557610785610b6b565b6000918252602090912001546001600160a01b03166107e8565b6107b46107ad5a8490610a1b565b8490610a30565b92505a600f805491935060006107c983610c01565b919050555080806107d990610c01565b915050610714565b5050505050565b6001600160a01b038116600090815260076020526040812054900361080a5750565b6000610815826103fd565b9050801561090257600a5461082a9082610a30565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190610c1a565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108d89082610a30565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610a3c565b5050565b6004805461091690600190610c43565b8154811061092657610926610b6b565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061096457610964610b6b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109b090600190610c43565b815481106109c0576109c0610b6b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806109f6576109f6610c56565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a278284610c43565b90505b92915050565b6000610a278284610c6c565b6000610a2a600c546106c2600b5485610a5990919063ffffffff16565b6000610a278284610c7f565b6000610a278284610c96565b600d546001600160a01b03821660009081526006602052604081205490914291610a9b9190610c6c565b108015610a2a5750600e54610aaf836103fd565b1192915050565b80356001600160a01b0381168114610acd57600080fd5b919050565b60008060408385031215610ae557600080fd5b610aee83610ab6565b946020939093013593505050565b600060208284031215610b0e57600080fd5b610a2782610ab6565b60008060408385031215610b2a57600080fd5b50508035926020909101359150565b600060208284031215610b4b57600080fd5b5035919050565b600060208284031215610b6457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610bcb5784516001600160a01b031683529383019391830191600101610ba6565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610c1357610c13610beb565b5060010190565b600060208284031215610c2c57600080fd5b81518015158114610c3c57600080fd5b9392505050565b81810381811115610a2a57610a2a610beb565b634e487b7160e01b600052603160045260246000fd5b80820180821115610a2a57610a2a610beb565b8082028115828204841417610a2a57610a2a610beb565b600082610cb357634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212203e3cede5cd4a2b08d4b78cdebe5bfb402de80b79b2e5a51d8ed6fe85d691b1a464736f6c63430008130033
Deployed Bytecode
0x60806040526004361061025f5760003560e01c8063715018a611610144578063c492f046116100b6578063e96fada21161007a578063e96fada214610752578063f2fde38b14610772578063f708a64f14610792578063f84ba65d146107b2578063f887ea40146107d2578063ffb54a99146107f257600080fd5b8063c492f0461461068c578063ca33e64c146106ac578063d51ed1c8146106cc578063dd62ed3e146106ec578063df20fd491461073257600080fd5b806395d89b411161010857806395d89b41146105c65780639d1944f5146105f6578063a4b45c0014610616578063a8aa1b3114610636578063a9059cbb14610656578063bf56b3711461067657600080fd5b8063715018a61461053357806378109e54146105485780637d1db4a51461055e57806382bf293c146105745780638da5cb5b1461059457600080fd5b8063201e7991116101dd57806350db71fb116101a157806350db71fb146104635780635c85974f14610483578063658d4b7f146104a35780636ddd1713146104c35780636fcba377146104dd57806370a08231146104fd57600080fd5b8063201e7991146103d257806323b872dd146103f25780632b112e49146104125780632d48e89614610427578063313ce5671461044757600080fd5b80630d295980116102245780630d295980146103475780631161ae391461036757806318160ddd146103875780631da1db5e1461039c5780631df4ccfc146103bc57600080fd5b8062abe20f1461026b5780630445b6671461028d578063051e7ddc146102b657806306fdde03146102d6578063095ea7b31461031757600080fd5b3661026657005b600080fd5b34801561027757600080fd5b5061028b610286366004611b9c565b61080c565b005b34801561029957600080fd5b506102a360205481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5061028b6102d1366004611b9c565b61087f565b3480156102e257600080fd5b5060408051808201909152600f81526e426174636f696e2053757072656d6560881b60208201525b6040516102ad9190611bcf565b34801561032357600080fd5b50610337610332366004611c1d565b6108b2565b60405190151581526020016102ad565b34801561035357600080fd5b5061028b610362366004611c47565b61091f565b34801561037357600080fd5b50610337610382366004611c62565b61093a565b34801561039357600080fd5b506005546102a3565b3480156103a857600080fd5b5061028b6103b7366004611c84565b61094e565b3480156103c857600080fd5b506102a360145481565b3480156103de57600080fd5b5061028b6103ed366004611c62565b6109aa565b3480156103fe57600080fd5b5061033761040d366004611c9d565b6109bd565b34801561041e57600080fd5b506102a3610a90565b34801561043357600080fd5b5061028b610442366004611c62565b610ae2565b34801561045357600080fd5b50604051600881526020016102ad565b34801561046f57600080fd5b5061028b61047e366004611b9c565b610b58565b34801561048f57600080fd5b5061028b61049e366004611c84565b610b8b565b3480156104af57600080fd5b5061028b6104be366004611b9c565b610b98565b3480156104cf57600080fd5b50601f546103379060ff1681565b3480156104e957600080fd5b5061028b6104f8366004611cd9565b610bcb565b34801561050957600080fd5b506102a3610518366004611d0b565b6001600160a01b031660009081526008602052604090205490565b34801561053f57600080fd5b5061028b610c1c565b34801561055457600080fd5b506102a360075481565b34801561056a57600080fd5b506102a360065481565b34801561058057600080fd5b5061028b61058f366004611c84565b610c30565b3480156105a057600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b3480156105d257600080fd5b506040805180820190915260078152662130ba31b7b4b760c91b602082015261030a565b34801561060257600080fd5b5061028b610611366004611c84565b610c58565b34801561062257600080fd5b5061028b610631366004611d26565b610c74565b34801561064257600080fd5b50601b546105ae906001600160a01b031681565b34801561066257600080fd5b50610337610671366004611c1d565b610caa565b34801561068257600080fd5b506102a3601c5481565b34801561069857600080fd5b5061028b6106a7366004611d50565b610cb7565b3480156106b857600080fd5b506016546105ae906001600160a01b031681565b3480156106d857600080fd5b506102a36106e7366004611c84565b610d30565b3480156106f857600080fd5b506102a3610707366004611d26565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561073e57600080fd5b5061028b61074d366004611dd4565b610d74565b34801561075e57600080fd5b506017546105ae906001600160a01b031681565b34801561077e57600080fd5b5061028b61078d366004611d0b565b610d93565b34801561079e57600080fd5b5061028b6107ad366004611b9c565b610e11565b3480156107be57600080fd5b5061028b6107cd366004611b9c565b610f07565b3480156107de57600080fd5b50601a546105ae906001600160a01b031681565b3480156107fe57600080fd5b50601d546103379060ff1681565b610814610f3a565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f83528184208054861682179055600c83528184208054861682179055600b83528184208054861682179055600e9092529091208054909216179055565b610887610f3a565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061090d9086815260200190565b60405180910390a35060015b92915050565b610927610f3a565b601d805460ff1916911515919091179055565b60008261094683610d30565b119392505050565b610956610f3a565b60175447906001600160a01b03166108fc60646109738585611e06565b61097d9190611e1d565b6040518115909202916000818181858888f193505050501580156109a5573d6000803e3d6000fd5b505050565b6109b2610f3a565b601891909155601955565b6001600160a01b03831660009081526009602090815260408083203384529091528120546fffffffffffffffffffffffffffffffff14610a7b5760408051808201825260208082527f596f7520646f6e2774206861766520656e6f75676820616c6c6f77616e63652e818301526001600160a01b0387166000908152600982528381203382529091529190912054610a56918490610f94565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610a86848484610fc0565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610add906003546001600160a01b0316600090815260086020526040902054610ad790600554906114b6565b906114b6565b905090565b610aea610f3a565b601d546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610b3c57600080fd5b505af1158015610b50573d6000803e3d6000fd5b505050505050565b610b60610f3a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610b93610f3a565b600655565b610ba0610f3a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610bd3610f3a565b601184905560128390556013829055610bf682610bf086866114c2565b906114c2565b6014556015819055610c09600482611e1d565b60145410610c1657600080fd5b50505050565b610c24610f3a565b610c2e60006114ce565b565b610c38610f3a565b606481600554610c489190611e06565b610c529190611e1d565b60075550565b610c60610f3a565b620b71b08110610c6f57600080fd5b601e55565b610c7c610f3a565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000610a89338484610fc0565b610cbf610f3a565b60005b82811015610c165781600b6000868685818110610ce157610ce1611e3f565b9050602002016020810190610cf69190611d0b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d2881611e55565b915050610cc2565b6000610919610d3d610a90565b601b546001600160a01b0316600090815260086020526040902054610d6e90610d6790600261151e565b859061151e565b9061152a565b610d7c610f3a565b601f805460ff191692151592909217909155602055565b610d9b610f3a565b6001600160a01b038116610e055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610e0e816114ce565b50565b610e19610f3a565b6001600160a01b0382163014801590610e405750601b546001600160a01b03838116911614155b610e4957600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155610eb557601d54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca9690604401610b22565b601d546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401610b22565b5050565b610f0f610f3a565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610c2e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dfc565b60008184841115610fb85760405162461bcd60e51b8152600401610dfc9190611bcf565b505050900390565b60215460009060ff1615610fe057610fd9848484611536565b9050610a89565b6001600160a01b0384166000908152600a602052604090205460ff1615801561102257506001600160a01b0383166000908152600a602052604090205460ff16155b1561107057601d5460ff166110705760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610dfc565b6001600160a01b0384166000908152600a602052604090205460ff161580156110b257506001600160a01b0383166000908152600f602052604090205460ff16155b80156110d757506001600160a01b03841660009081526010602052604090205460ff16155b80156110ec57506001600160a01b0383163014155b801561110657506003546001600160a01b03848116911614155b80156111205750601b546001600160a01b03848116911614155b801561113a57506017546001600160a01b03848116911614155b801561115457506016546001600160a01b03848116911614155b156111e2576001600160a01b03831660009081526008602052604090205460075461117f8483611e6e565b11156111e05760405162461bcd60e51b815260206004820152602a60248201527f526563697069656e742063616e277420686f6c64206d6f7265207468616e204d60448201526961782057616c6c65742160b01b6064820152608401610dfc565b505b6111ec8483611625565b6111f46116a9565b15611201576112016116fa565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b03871660009081526008909152919091205461125c918490610f94565b6001600160a01b0385166000908152600860205260408120919091556112828585611a7e565b61128c5782611296565b6112968584611aca565b6001600160a01b0385166000908152600860205260409020549091506112bc90826114c2565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600e909152205460ff1661136557601d546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561135257600080fd5b505af1925050508015611363575060015b505b6001600160a01b0384166000908152600e602052604090205460ff166113fb57601d546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156113e857600080fd5b505af19250505080156113f9575060015b505b601d54601e546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b15801561144c57600080fd5b505af192505050801561145d575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114a391815260200190565b60405180910390a3506001949350505050565b6000610a898284611e81565b6000610a898284611e6e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a898284611e06565b6000610a898284611e1d565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b0386166000908152600890915291822054611590918490610f94565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546115bf90836114c2565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116139086815260200190565b60405180910390a35060019392505050565b6006548111158061164e57506001600160a01b0382166000908152600c602052604090205460ff165b610f035760405162461bcd60e51b815260206004820152602660248201527f596f752063616e2774207472616e73666572206d6f7265207468616e205478206044820152652634b6b4ba1760d11b6064820152608401610dfc565b601b546000906001600160a01b031633148015906116ca575060215460ff16155b80156116d85750601f5460ff165b8015610add575050602080543060009081526008909252604090912054101590565b6021805460ff191660011790556018546019546000916117199161093a565b61172557601154611728565b60005b9050600061174c6002610d6e601454610d6e8660205461151e90919063ffffffff16565b90506000611765826020546114b690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061179f5761179f611e3f565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106117d0576117d0611e3f565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac9479061181a908690600090879030904290600401611e94565b600060405180830381600087803b15801561183457600080fd5b505af1158015611848573d6000803e3d6000fd5b50505050600061186182476114b690919063ffffffff16565b9050600061187c61187388600261152a565b601454906114b6565b905060006118916002610d6e8481878d61151e565b905060006118ae83610d6e6012548761151e90919063ffffffff16565b905060006118cb84610d6e6013548861151e90919063ffffffff16565b9050601d60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561191d57600080fd5b505af19350505050801561192f575060015b506017546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114611982576040519150601f19603f3d011682016040523d82523d6000602084013e611987565b606091505b5060009250508a159050611a6757601a5460165460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015611a05573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a2a9190611f05565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506021805460ff19169055505050505050505050565b6001600160a01b03811660009081526010602052604081205460ff1615611aa757506000610919565b506001600160a01b0382166000908152600b602052604090205460ff1615610919565b600080611ae8601554610d6e6014548661151e90919063ffffffff16565b30600090815260086020526040902054909150611b0590826114c2565b30600081815260086020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b569085815260200190565b60405180910390a3611b6883826114b6565b949350505050565b80356001600160a01b0381168114611b8757600080fd5b919050565b80358015158114611b8757600080fd5b60008060408385031215611baf57600080fd5b611bb883611b70565b9150611bc660208401611b8c565b90509250929050565b600060208083528351808285015260005b81811015611bfc57858101830151858201604001528201611be0565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611c3057600080fd5b611c3983611b70565b946020939093013593505050565b600060208284031215611c5957600080fd5b610a8982611b8c565b60008060408385031215611c7557600080fd5b50508035926020909101359150565b600060208284031215611c9657600080fd5b5035919050565b600080600060608486031215611cb257600080fd5b611cbb84611b70565b9250611cc960208501611b70565b9150604084013590509250925092565b60008060008060808587031215611cef57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d1d57600080fd5b610a8982611b70565b60008060408385031215611d3957600080fd5b611d4283611b70565b9150611bc660208401611b70565b600080600060408486031215611d6557600080fd5b833567ffffffffffffffff80821115611d7d57600080fd5b818601915086601f830112611d9157600080fd5b813581811115611da057600080fd5b8760208260051b8501011115611db557600080fd5b602092830195509350611dcb9186019050611b8c565b90509250925092565b60008060408385031215611de757600080fd5b611c3983611b8c565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761091957610919611df0565b600082611e3a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611e6757611e67611df0565b5060010190565b8082018082111561091957610919611df0565b8181038181111561091957610919611df0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ee45784516001600160a01b031683529383019391830191600101611ebf565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f1a57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122018c1cb293435044d2bd548d3d00467209f381a8cbe524e5b65a3c85c176a971f64736f6c63430008130033
Deployed Bytecode Sourcemap
21595:13065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26165:351;;;;;;;;;;-1:-1:-1;26165:351:0;;;;;:::i;:::-;;:::i;:::-;;23364:51;;;;;;;;;;;;;;;;;;;762:25:1;;;750:2;735:18;23364:51:0;;;;;;;;26524:148;;;;;;;;;;-1:-1:-1;26524:148:0;;;;;:::i;:::-;;:::i;24802:80::-;;;;;;;;;;-1:-1:-1;24874:5:0;;;;;;;;;;;;-1:-1:-1;;;24874:5:0;;;;24802:80;;;;;;;:::i;25227:216::-;;;;;;;;;;-1:-1:-1;25227:216:0;;;;;:::i;:::-;;:::i;:::-;;;1775:14:1;;1768:22;1750:41;;1738:2;1723:18;25227:216:0;1610:187:1;29779:94:0;;;;;;;;;;-1:-1:-1;29779:94:0;;;;;:::i;:::-;;:::i;34439:150::-;;;;;;;;;;-1:-1:-1;34439:150:0;;;;;:::i;:::-;;:::i;24532:88::-;;;;;;;;;;-1:-1:-1;24605:12:0;;24532:88;;29548:223;;;;;;;;;;-1:-1:-1;29548:223:0;;;;;:::i;:::-;;:::i;22876:27::-;;;;;;;;;;;;;;;;33587:182;;;;;;;;;;-1:-1:-1;33587:182:0;;;;;:::i;:::-;;:::i;25619:380::-;;;;;;;;;;-1:-1:-1;25619:380:0;;;;;:::i;:::-;;:::i;34114:142::-;;;;;;;;;;;;;:::i;33777:182::-;;;;;;;;;;-1:-1:-1;33777:182:0;;;;;:::i;:::-;;:::i;24626:80::-;;;;;;;;;;-1:-1:-1;24626:80:0;;22121:1;2900:36:1;;2888:2;2873:18;24626:80:0;2758:184:1;32622:129:0;;;;;;;;;;-1:-1:-1;32622:129:0;;;;;:::i;:::-;;:::i;31666:95::-;;;;;;;;;;-1:-1:-1;31666:95:0;;;;;:::i;:::-;;:::i;32123:119::-;;;;;;;;;;-1:-1:-1;32123:119:0;;;;;:::i;:::-;;:::i;23327:30::-;;;;;;;;;;-1:-1:-1;23327:30:0;;;;;;;;32759:422;;;;;;;;;;-1:-1:-1;32759:422:0;;;;;:::i;:::-;;:::i;24975:105::-;;;;;;;;;;-1:-1:-1;24975:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;25059:18:0;25041:7;25059:18;;;:9;:18;;;;;;;24975:105;12293:103;;;;;;;;;;;;;:::i;22252:59::-;;;;;;;;;;;;;;;;22189:56;;;;;;;;;;;;;;;;26008:149;;;;;;;;;;-1:-1:-1;26008:149:0;;;;;:::i;:::-;;:::i;11645:87::-;;;;;;;;;;-1:-1:-1;11691:7:0;11718:6;-1:-1:-1;;;;;11718:6:0;11645:87;;;-1:-1:-1;;;;;3692:32:1;;;3674:51;;3662:2;3647:18;11645:87:0;3528:203:1;24712:84:0;;;;;;;;;;-1:-1:-1;24786:7:0;;;;;;;;;;;;-1:-1:-1;;;24786:7:0;;;;24712:84;;33967:135;;;;;;;;;;-1:-1:-1;33967:135:0;;;;;:::i;:::-;;:::i;33189:227::-;;;;;;;;;;-1:-1:-1;33189:227:0;;;;;:::i;:::-;;:::i;23150:19::-;;;;;;;;;;-1:-1:-1;23150:19:0;;;;-1:-1:-1;;;;;23150:19:0;;;25455:156;;;;;;;;;;-1:-1:-1;25455:156:0;;;;;:::i;:::-;;:::i;23178:25::-;;;;;;;;;;;;;;;;32250:229;;;;;;;;;;-1:-1:-1;32250:229:0;;;;;:::i;:::-;;:::i;22948:36::-;;;;;;;;;;-1:-1:-1;22948:36:0;;;;-1:-1:-1;;;;;22948:36:0;;;34264:167;;;;;;;;;;-1:-1:-1;34264:167:0;;;;;:::i;:::-;;:::i;25086:133::-;;;;;;;;;;-1:-1:-1;25086:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;25188:19:0;;;25170:7;25188:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;25086:133;33424:155;;;;;;;;;;-1:-1:-1;33424:155:0;;;;;:::i;:::-;;:::i;22991:35::-;;;;;;;;;;-1:-1:-1;22991:35:0;;;;-1:-1:-1;;;;;22991:35:0;;;12551:201;;;;;;;;;;-1:-1:-1;12551:201:0;;;;;:::i;:::-;;:::i;31769:346::-;;;;;;;;;;-1:-1:-1;31769:346:0;;;;;:::i;:::-;;:::i;32487:127::-;;;;;;;;;;-1:-1:-1;32487:127:0;;;;;:::i;:::-;;:::i;23119:24::-;;;;;;;;;;-1:-1:-1;23119:24:0;;;;-1:-1:-1;;;;;23119:24:0;;;23210:30;;;;;;;;;;-1:-1:-1;23210:30:0;;;;;;;;26165:351;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;26263:27:0;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;26263:42:0;;::::1;::::0;::::1;::::0;;;26316:17:::1;:27:::0;;;;;:42;;;::::1;::::0;::::1;::::0;;26369:15:::1;:25:::0;;;;;:40;;;::::1;::::0;::::1;::::0;;26420:11:::1;:21:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;26467:16:::1;:26:::0;;;;;;:41;;;;::::1;;::::0;;26165:351::o;26524:148::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;26622:27:0;;;::::1;;::::0;;;:17:::1;:27;::::0;;;;:42;;-1:-1:-1;;26622:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26524:148::o;25227:216::-;25331:10;25302:4;25319:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25319:32:0;;;;;;;;;;:41;;;25376:37;25302:4;;25319:32;;25376:37;;;;25354:6;762:25:1;;750:2;735:18;;616:177;25376:37:0;;;;;;;;-1:-1:-1;25431:4:0;25227:216;;;;;:::o;29779:94::-;11531:13;:11;:13::i;:::-;29844:11:::1;:21:::0;;-1:-1:-1;;29844:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29779:94::o;34439:150::-;34519:4;34575:6;34543:29;34563:8;34543:19;:29::i;:::-;:38;;34439:150;-1:-1:-1;;;34439:150:0:o;29548:223::-;11531:13;:11;:13::i;:::-;29694:20:::1;::::0;29654:21:::1;::::0;-1:-1:-1;;;;;29694:20:0::1;29686:77;29759:3;29725:31;29740:16:::0;29654:21;29725:31:::1;:::i;:::-;:37;;;;:::i;:::-;29686:77;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29620:151;29548:223:::0;:::o;33587:182::-;11531:13;:11;:13::i;:::-;33684:15:::1;:25:::0;;;;33720:26:::1;:41:::0;33587:182::o;25619:380::-;-1:-1:-1;;;;;25739:19:0;;25719:4;25739:19;;;:11;:19;;;;;;;;25759:10;25739:31;;;;;;;;25774:17;25739:52;25736:196;;25841:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25841:19:0;;-1:-1:-1;25841:19:0;;;:11;:19;;;;;25861:10;25841:31;;;;;;;;;;:79;;25877:6;;25841:35;:79::i;:::-;-1:-1:-1;;;;;25807:19:0;;;;;;:11;:19;;;;;;;;25827:10;25807:31;;;;;;;:113;25736:196;25951:40;25965:6;25973:9;25984:6;25951:13;:40::i;:::-;25944:47;;25619:380;;;;;;:::o;34114:142::-;34242:4;;-1:-1:-1;;;;;34242:4:0;34167:7;25059:18;;;:9;:18;;;;;;34194:54;;34221:4;;-1:-1:-1;;;;;34221:4:0;25041:7;25059:18;;;:9;:18;;;;;;34194:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;34187:61;;34114:142;:::o;33777:182::-;11531:13;:11;:13::i;:::-;33886:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;33886:65:0;;::::1;::::0;::::1;5875:25:1::0;;;5916:18;;;5909:34;;;33886:11:0::1;::::0;;::::1;-1:-1:-1::0;;;;;33886:11:0::1;::::0;:35:::1;::::0;5848:18:1;;33886:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33777:182:::0;;:::o;32622:129::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;32710:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32710:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32622:129::o;31666:95::-;11531:13;:11;:13::i;:::-;31732:12:::1;:21:::0;31666:95::o;32123:119::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;32206:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32206:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32123:119::o;32759:422::-;11531:13;:11;:13::i;:::-;32901:12:::1;:28:::0;;;32940:13:::1;:30:::0;;;32981:12:::1;:28:::0;;;33031:52:::1;32996:13:::0;33031:33:::1;32916:13:::0;32956:14;33031:17:::1;:33::i;:::-;:37:::0;::::1;:52::i;:::-;33020:8;:63:::0;33094:14:::1;:32:::0;;;33156:16:::1;33171:1;33111:15:::0;33156:16:::1;:::i;:::-;33145:8;;:27;33137:36;;;::::0;::::1;;32759:422:::0;;;;:::o;12293:103::-;11531:13;:11;:13::i;:::-;12358:30:::1;12385:1;12358:18;:30::i;:::-;12293:103::o:0;26008:149::-;11531:13;:11;:13::i;:::-;26146:3:::1;26127:14;26112:12;;:29;;;;:::i;:::-;26111:38;;;;:::i;:::-;26093:15;:56:::0;-1:-1:-1;26008:149:0:o;33967:135::-;11531:13;:11;:13::i;:::-;34056:6:::1;34050:3;:12;34042:21;;;::::0;::::1;;34074:14;:20:::0;33967:135::o;33189:227::-;11531:13;:11;:13::i;:::-;33307:21:::1;:46:::0;;-1:-1:-1;;;;;33307:46:0;;::::1;-1:-1:-1::0;;;;;;33307:46:0;;::::1;;::::0;;;33364:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;33189:227::o;25455:156::-;25535:4;25559:44;25573:10;25585:9;25596:6;25559:13;:44::i;32250:229::-;11531:13;:11;:13::i;:::-;32369:9:::1;32365:107;32384:19:::0;;::::1;32365:107;;;32452:8;32425:11;:24;32437:8;;32446:1;32437:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32425:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32425:24:0;:35;;-1:-1:-1;;32425:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32405:3;::::1;::::0;::::1;:::i;:::-;;;;32365:107;;34264:167:::0;34332:7;34359:64;34400:22;:20;:22::i;:::-;34382:4;;-1:-1:-1;;;;;34382:4:0;25041:7;25059:18;;;:9;:18;;;;;;34359:36;;34372:22;;34392:1;34372:19;:22::i;:::-;34359:8;;:12;:36::i;:::-;:40;;:64::i;33424:155::-;11531:13;:11;:13::i;:::-;33515:11:::1;:22:::0;;-1:-1:-1;;33515:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;33548:13:::1;:23:::0;33424:155::o;12551:201::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;12640:22:0;::::1;12632:73;;;::::0;-1:-1:-1;;;12632:73:0;;6428:2:1;12632:73:0::1;::::0;::::1;6410:21:1::0;6467:2;6447:18;;;6440:30;6506:34;6486:18;;;6479:62;-1:-1:-1;;;6557:18:1;;;6550:36;6603:19;;12632:73:0::1;;;;;;;;;12716:28;12735:8;12716:18;:28::i;:::-;12551:201:::0;:::o;31769:346::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;31865:23:0;::::1;31883:4;31865:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;31902:4:0::1;::::0;-1:-1:-1;;;;;31892:14:0;;::::1;31902:4:::0;::::1;31892:14;;31865:41;31857:50;;;::::0;::::1;;-1:-1:-1::0;;;;;31918:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31918:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31962:146:::1;;31987:11;::::0;:31:::1;::::0;-1:-1:-1;;;31987:31:0;;-1:-1:-1;;;;;6833:32:1;;;31987:31:0::1;::::0;::::1;6815:51:1::0;32016:1:0::1;6882:18:1::0;;;6875:34;31987:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;6788:18:1;;31987:31:0::1;6633:282:1::0;31962:146:0::1;32049:11;::::0;-1:-1:-1;;;;;32078:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;32049:47;;-1:-1:-1;;;32049:47:0;;::::1;::::0;::::1;6815:51:1::0;;;;6882:18;;;6875:34;32049:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;6788:18:1;;32049:47:0::1;6633:282:1::0;31962:146:0::1;31769:346:::0;;:::o;32487:127::-;11531:13;:11;:13::i;:::-;-1:-1:-1;;;;;32574:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;32574:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32487:127::o;11810:132::-;11691:7;11718:6;-1:-1:-1;;;;;11718:6:0;10434:10;11874:23;11866:68;;;;-1:-1:-1;;;11866:68:0;;7401:2:1;11866:68:0;;;7383:21:1;;;7420:18;;;7413:30;7479:34;7459:18;;;7452:62;7531:18;;11866:68:0;7199:356:1;7928:240:0;8048:7;8109:12;8101:6;;;;8093:29;;;;-1:-1:-1;;;8093:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8144:5:0;;;7928:240::o;26680:1526::-;26794:6;;26772:4;;26794:6;;26791:63;;;26810:41;26825:6;26833:9;26844:6;26810:14;:41::i;:::-;26803:48;;;;26791:63;-1:-1:-1;;;;;26870:22:0;;;;;;:14;:22;;;;;;;;26869:23;:53;;;;-1:-1:-1;;;;;;26897:25:0;;;;;;:14;:25;;;;;;;;26896:26;26869:53;26866:127;;;26946:11;;;;26938:43;;;;-1:-1:-1;;;26938:43:0;;7762:2:1;26938:43:0;;;7744:21:1;7801:2;7781:18;;;7774:30;-1:-1:-1;;;7820:18:1;;;7813:50;7880:18;;26938:43:0;7560:344:1;26938:43:0;-1:-1:-1;;;;;27010:22:0;;;;;;:14;:22;;;;;;;;27009:23;:56;;;;-1:-1:-1;;;;;;27037:28:0;;;;;;:17;:28;;;;;;;;27036:29;27009:56;:86;;;;-1:-1:-1;;;;;;27070:25:0;;;;;;:17;:25;;;;;;;;27069:26;27009:86;:116;;;;-1:-1:-1;;;;;;27099:26:0;;27120:4;27099:26;;27009:116;:146;;;;-1:-1:-1;27150:4:0;;-1:-1:-1;;;;;27129:26:0;;;27150:4;;27129:26;;27009:146;:167;;;;-1:-1:-1;27172:4:0;;-1:-1:-1;;;;;27159:17:0;;;27172:4;;27159:17;;27009:167;:204;;;;-1:-1:-1;27193:20:0;;-1:-1:-1;;;;;27180:33:0;;;27193:20;;27180:33;;27009:204;:242;;;;-1:-1:-1;27230:21:0;;-1:-1:-1;;;;;27217:34:0;;;27230:21;;27217:34;;27009:242;27005:414;;;-1:-1:-1;;;;;25059:18:0;;27267;25059;;;:9;:18;;;;;;27356:15;;27332:19;27345:6;25059:18;27332:19;:::i;:::-;27331:40;;27323:94;;;;-1:-1:-1;;;27323:94:0;;8241:2:1;27323:94:0;;;8223:21:1;8280:2;8260:18;;;8253:30;8319:34;8299:18;;;8292:62;-1:-1:-1;;;8370:18:1;;;8363:40;8420:19;;27323:94:0;8039:406:1;27323:94:0;27252:167;27005:414;27431:28;27444:6;27452;27431:12;:28::i;:::-;27475:16;:14;:16::i;:::-;27472:35;;;27494:10;:8;:10::i;:::-;27539:62;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27539:17:0;;-1:-1:-1;27539:17:0;;;:9;:17;;;;;;;;:62;;27561:6;;27539:21;:62::i;:::-;-1:-1:-1;;;;;27519:17:0;;;;;;:9;:17;;;;;:82;;;;27639:32;27529:6;27661:9;27639:13;:32::i;:::-;:67;;27700:6;27639:67;;;27674:23;27682:6;27690;27674:7;:23::i;:::-;-1:-1:-1;;;;;27740:20:0;;;;;;:9;:20;;;;;;27614:92;;-1:-1:-1;27740:40:0;;27614:92;27740:24;:40::i;:::-;-1:-1:-1;;;;;27717:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;27797:24;;;;;:16;:24;;;;;;;27793:119;;27842:11;;-1:-1:-1;;;;;27871:17:0;;;;;;;:9;:17;;;;;;;;27842:47;;-1:-1:-1;;;27842:47:0;;;;;6815:51:1;;;;6882:18;;;6875:34;27842:11:0;;;;;;:20;;6788:18:1;;27842:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27838:63;;-1:-1:-1;;;;;27928:27:0;;;;;;:16;:27;;;;;;;;27924:129;;27976:11;;-1:-1:-1;;;;;28008:20:0;;;;;;;:9;:20;;;;;;;;27976:53;;-1:-1:-1;;;27976:53:0;;;;;6815:51:1;;;;6882:18;;;6875:34;27976:11:0;;;;;;:20;;6788:18:1;;27976:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27972:69;;28069:11;;28089:14;;28069:35;;-1:-1:-1;;;;;;28069:35:0;;;;;762:25:1;;;;28069:11:0;;;;-1:-1:-1;;;;;28069:11:0;;:19;;735:18:1;;28069:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28065:51;28150:9;-1:-1:-1;;;;;28133:43:0;28142:6;-1:-1:-1;;;;;28133:43:0;;28161:14;28133:43;;;;762:25:1;;750:2;735:18;;616:177;28133:43:0;;;;;;;;-1:-1:-1;28194:4:0;;26680:1526;-1:-1:-1;;;;26680:1526:0:o;6030:98::-;6088:7;6115:5;6119:1;6115;:5;:::i;5649:98::-;5707:7;5734:5;5738:1;5734;:5;:::i;12912:191::-;12986:16;13005:6;;-1:-1:-1;;;;;13022:17:0;;;-1:-1:-1;;;;;;13022:17:0;;;;;;13055:40;;13005:6;;;;;;;13055:40;;12986:16;13055:40;12975:128;12912:191;:::o;6387:98::-;6445:7;6472:5;6476:1;6472;:5;:::i;6786:98::-;6844:7;6871:5;6875:1;6871;:5;:::i;28218:339::-;28348:62;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28348:17:0;;28311:4;28348:17;;;:9;:17;;;;;;;:62;;28370:6;;28348:21;:62::i;:::-;-1:-1:-1;;;;;28328:17:0;;;;;;;:9;:17;;;;;;:82;;;;28444:20;;;;;;;:32;;28469:6;28444:24;:32::i;:::-;-1:-1:-1;;;;;28421:20:0;;;;;;;:9;:20;;;;;;;:55;;;;28492:35;;;;;;;;;;28520:6;762:25:1;;750:2;735:18;;616:177;28492:35:0;;;;;;;;-1:-1:-1;28545:4:0;28218:339;;;;;:::o;28565:187::-;28662:12;;28652:6;:22;;:49;;;-1:-1:-1;;;;;;28678:23:0;;;;;;:15;:23;;;;;;;;28652:49;28644:100;;;;-1:-1:-1;;;28644:100:0;;8785:2:1;28644:100:0;;;8767:21:1;8824:2;8804:18;;;8797:30;8863:34;8843:18;;;8836:62;-1:-1:-1;;;8914:18:1;;;8907:36;8960:19;;28644:100:0;8583:402:1;29343:197:0;29430:4;;29392;;-1:-1:-1;;;;;29430:4:0;29416:10;:18;;;;:38;;-1:-1:-1;29448:6:0;;;;29447:7;29416:38;:62;;;;-1:-1:-1;29467:11:0;;;;29416:62;:116;;;;-1:-1:-1;;29519:13:0;;;29509:4;29491:24;;;;:9;:24;;;;;;;;:41;;;29343:197::o;29881:1777::-;23462:6;:13;;-1:-1:-1;;23462:13:0;23471:4;23462:13;;;29976:15:::1;::::0;29993:26:::1;::::0;23462:6;;29960:60:::1;::::0;:15:::1;:60::i;:::-;:79;;30027:12;;29960:79;;;30023:1;29960:79;29930:109;;30050:23;30076:59;30133:1;30076:52;30119:8;;30076:38;30094:19;30076:13;;:17;;:38;;;;:::i;:59::-;30050:85;;30146:20;30169:34;30187:15;30169:13;;:17;;:34;;;;:::i;:::-;30240:16;::::0;;30254:1:::1;30240:16:::0;;;;;::::1;::::0;;30146:57;;-1:-1:-1;30216:21:0::1;::::0;30240:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;30240:16:0::1;30216:40;;30285:4;30267;30272:1;30267:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30267:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30311:6:::1;::::0;30301:7;;30311:6;::::1;::::0;30301:4;;30311:6;;30301:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;30301:16:0;;::::1;:7;::::0;;::::1;::::0;;;;;:16;30388:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;30388:188:0;;30354:21:::1;::::0;30388:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;30460:12;;30330:21:::1;::::0;30503:4;;30530::::1;::::0;30550:15:::1;::::0;30388:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30589:20;30612:40;30638:13;30612:21;:25;;:40;;;;:::i;:::-;30589:63:::0;-1:-1:-1;30665:22:0::1;30690:40;30703:26;:19:::0;30727:1:::1;30703:23;:26::i;:::-;30690:8;::::0;;:12:::1;:40::i;:::-;30665:65:::0;-1:-1:-1;30751:29:0::1;30783:64;30845:1;30783:57;30665:65:::0;30783:57;:12;30800:19;30783:16:::1;:37::i;:64::-;30751:96;;30858:30;30891:51;30927:14;30891:31;30908:13;;30891:12;:16;;:31;;;;:::i;:51::-;30858:84;;30953:29;30985:50;31020:14;30985:30;31002:12;;30985;:16;;:30;;;;:::i;:50::-;30953:82;;31052:11;;;;;;;;;-1:-1:-1::0;;;;;31052:11:0::1;-1:-1:-1::0;;;;;31052:19:0::1;;31079:22;31052:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;31155:20:0::1;::::0;31147:80:::1;::::0;31127:15:::1;::::0;-1:-1:-1;;;;;31155:20:0::1;::::0;31217:5:::1;::::0;31189:21;;31127:15;31147:80;31127:15;31147:80;31189:21;31155:20;31217:5;31147:80:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31251:5:0::1;::::0;-1:-1:-1;;31272:19:0;;;-1:-1:-1;31269:382:0::1;;31307:6;::::0;31484:21:::1;::::0;31307:247:::1;::::0;-1:-1:-1;;;31307:247:0;;31386:4:::1;31307:247;::::0;::::1;10658:34:1::0;10708:18;;;10701:34;;;31307:6:0::1;10751:18:1::0;;;10744:34;;;10794:18;;;10787:34;-1:-1:-1;;;;;31484:21:0;;::::1;10837:19:1::0;;;10830:44;31524:15:0::1;10890:19:1::0;;;10883:35;31307:6:0;::::1;::::0;:22:::1;::::0;31337:21;;10592:19:1;;31307:247:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;31588:51:0::1;::::0;;5875:25:1;;;5931:2;5916:18;;5909:34;;;31588:51:0::1;::::0;-1:-1:-1;5848:18:1;31588:51:0::1;;;;;;;31269:382;-1:-1:-1::0;;23480:6:0;:14;;-1:-1:-1;;23480:14:0;;;-1:-1:-1;;;;;;;;;29881:1777:0:o;28760:234::-;-1:-1:-1;;;;;28861:28:0;;28841:4;28861:28;;;:17;:28;;;;;;;;28858:129;;;-1:-1:-1;28912:5:0;28905:12;;28858:129;-1:-1:-1;;;;;;28956:19:0;;;;;;:11;:19;;;;;;;;28955:20;28948:27;;29002:333;29069:7;29089:17;29109:40;29134:14;;29109:20;29120:8;;29109:6;:10;;:20;;;;:::i;:40::-;29207:4;29189:24;;;;:9;:24;;;;;;29089:60;;-1:-1:-1;29189:39:0;;29089:60;29189:28;:39::i;:::-;29180:4;29162:24;;;;:9;:24;;;;;;;:66;;;;29244:42;;-1:-1:-1;;;;;29244:42:0;;;;;;;29276:9;762:25:1;;750:2;735:18;;616:177;29244:42:0;;;;;;;;29306:21;:6;29317:9;29306:10;:21::i;:::-;29299:28;29002:333;-1:-1:-1;;;;29002:333:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:254;422:6;430;483:2;471:9;462:7;458:23;454:32;451:52;;;499:1;496;489:12;451:52;522:29;541:9;522:29;:::i;:::-;512:39;;570:35;601:2;590:9;586:18;570:35;:::i;:::-;560:45;;357:254;;;;;:::o;798:548::-;910:4;939:2;968;957:9;950:21;1000:6;994:13;1043:6;1038:2;1027:9;1023:18;1016:34;1068:1;1078:140;1092:6;1089:1;1086:13;1078:140;;;1187:14;;;1183:23;;1177:30;1153:17;;;1172:2;1149:26;1142:66;1107:10;;1078:140;;;1082:3;1267:1;1262:2;1253:6;1242:9;1238:22;1234:31;1227:42;1337:2;1330;1326:7;1321:2;1313:6;1309:15;1305:29;1294:9;1290:45;1286:54;1278:62;;;;798:548;;;;:::o;1351:254::-;1419:6;1427;1480:2;1468:9;1459:7;1455:23;1451:32;1448:52;;;1496:1;1493;1486:12;1448:52;1519:29;1538:9;1519:29;:::i;:::-;1509:39;1595:2;1580:18;;;;1567:32;;-1:-1:-1;;;1351:254:1:o;1802:180::-;1858:6;1911:2;1899:9;1890:7;1886:23;1882:32;1879:52;;;1927:1;1924;1917:12;1879:52;1950:26;1966:9;1950:26;:::i;1987:248::-;2055:6;2063;2116:2;2104:9;2095:7;2091:23;2087:32;2084:52;;;2132:1;2129;2122:12;2084:52;-1:-1:-1;;2155:23:1;;;2225:2;2210:18;;;2197:32;;-1:-1:-1;1987:248:1:o;2240:180::-;2299:6;2352:2;2340:9;2331:7;2327:23;2323:32;2320:52;;;2368:1;2365;2358:12;2320:52;-1:-1:-1;2391:23:1;;2240:180;-1:-1:-1;2240:180:1:o;2425:328::-;2502:6;2510;2518;2571:2;2559:9;2550:7;2546:23;2542:32;2539:52;;;2587:1;2584;2577:12;2539:52;2610:29;2629:9;2610:29;:::i;:::-;2600:39;;2658:38;2692:2;2681:9;2677:18;2658:38;:::i;:::-;2648:48;;2743:2;2732:9;2728:18;2715:32;2705:42;;2425:328;;;;;:::o;2947:385::-;3033:6;3041;3049;3057;3110:3;3098:9;3089:7;3085:23;3081:33;3078:53;;;3127:1;3124;3117:12;3078:53;-1:-1:-1;;3150:23:1;;;3220:2;3205:18;;3192:32;;-1:-1:-1;3271:2:1;3256:18;;3243:32;;3322:2;3307:18;3294:32;;-1:-1:-1;2947:385:1;-1:-1:-1;2947:385:1:o;3337:186::-;3396:6;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3488:29;3507:9;3488:29;:::i;3736:260::-;3804:6;3812;3865:2;3853:9;3844:7;3840:23;3836:32;3833:52;;;3881:1;3878;3871:12;3833:52;3904:29;3923:9;3904:29;:::i;:::-;3894:39;;3952:38;3986:2;3975:9;3971:18;3952:38;:::i;4001:689::-;4093:6;4101;4109;4162:2;4150:9;4141:7;4137:23;4133:32;4130:52;;;4178:1;4175;4168:12;4130:52;4218:9;4205:23;4247:18;4288:2;4280:6;4277:14;4274:34;;;4304:1;4301;4294:12;4274:34;4342:6;4331:9;4327:22;4317:32;;4387:7;4380:4;4376:2;4372:13;4368:27;4358:55;;4409:1;4406;4399:12;4358:55;4449:2;4436:16;4475:2;4467:6;4464:14;4461:34;;;4491:1;4488;4481:12;4461:34;4546:7;4539:4;4529:6;4526:1;4522:14;4518:2;4514:23;4510:34;4507:47;4504:67;;;4567:1;4564;4557:12;4504:67;4598:4;4590:13;;;;-1:-1:-1;4622:6:1;-1:-1:-1;4647:37:1;;4663:20;;;-1:-1:-1;4647:37:1;:::i;:::-;4637:47;;4001:689;;;;;:::o;4695:248::-;4760:6;4768;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4860:26;4876:9;4860:26;:::i;5174:127::-;5235:10;5230:3;5226:20;5223:1;5216:31;5266:4;5263:1;5256:15;5290:4;5287:1;5280:15;5306:168;5379:9;;;5410;;5427:15;;;5421:22;;5407:37;5397:71;;5448:18;;:::i;5479:217::-;5519:1;5545;5535:132;;5589:10;5584:3;5580:20;5577:1;5570:31;5624:4;5621:1;5614:15;5652:4;5649:1;5642:15;5535:132;-1:-1:-1;5681:9:1;;5479:217::o;5954:127::-;6015:10;6010:3;6006:20;6003:1;5996:31;6046:4;6043:1;6036:15;6070:4;6067:1;6060:15;6086:135;6125:3;6146:17;;;6143:43;;6166:18;;:::i;:::-;-1:-1:-1;6213:1:1;6202:13;;6086:135::o;7909:125::-;7974:9;;;7995:10;;;7992:36;;;8008:18;;:::i;8450:128::-;8517:9;;;8538:11;;;8535:37;;;8552:18;;:::i;9122:980::-;9384:4;9432:3;9421:9;9417:19;9463:6;9452:9;9445:25;9489:2;9527:6;9522:2;9511:9;9507:18;9500:34;9570:3;9565:2;9554:9;9550:18;9543:31;9594:6;9629;9623:13;9660:6;9652;9645:22;9698:3;9687:9;9683:19;9676:26;;9737:2;9729:6;9725:15;9711:29;;9758:1;9768:195;9782:6;9779:1;9776:13;9768:195;;;9847:13;;-1:-1:-1;;;;;9843:39:1;9831:52;;9938:15;;;;9903:12;;;;9879:1;9797:9;9768:195;;;-1:-1:-1;;;;;;;10019:32:1;;;;10014:2;9999:18;;9992:60;-1:-1:-1;;;10083:3:1;10068:19;10061:35;9980:3;9122:980;-1:-1:-1;;;9122:980:1:o;10929:306::-;11017:6;11025;11033;11086:2;11074:9;11065:7;11061:23;11057:32;11054:52;;;11102:1;11099;11092:12;11054:52;11131:9;11125:16;11115:26;;11181:2;11170:9;11166:18;11160:25;11150:35;;11225:2;11214:9;11210:18;11204:25;11194:35;;10929:306;;;;;:::o
Swarm Source
ipfs://3e3cede5cd4a2b08d4b78cdebe5bfb402de80b79b2e5a51d8ed6fe85d691b1a4
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.