Overview
Max Total Supply
951,725.274857$BEAN
Holders
334 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
402.680210536423596105 $BEANValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BeanFlip
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2023-01-20 */ // SPDX-License-Identifier: MIT //Bean Machine Ecosystem pragma solidity ^0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { function totalSupply() external view returns (uint256); 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 IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public payable override { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add( msg.value ); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal virtual returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); (bool success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedDividendCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare .mul(value) .toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from] .add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub( _magCorrection ); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } contract BeanFlip is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public DEAD = 0x000000000000000000000000000000000000dEaD; bool private swapping; bool private stakingEnabled = false; bool public tradingEnabled = false; uint256 public sellAmount = 0; uint256 public buyAmount = 0; uint256 private totalSellFees; uint256 private totalBuyFees; BitBurnReflectDividendTracker public dividendTracker; address payable public marketingWallet; address payable public devWallet; // Max tx, dividend threshold and tax variables uint256 public maxWallet; uint256 public swapTokensAtAmount; uint256 public sellRewardsFee; uint256 public sellDeadFees; uint256 public sellMarketingFees; uint256 public sellLiquidityFee; uint256 public buyDeadFees; uint256 public buyMarketingFees; uint256 public buyLiquidityFee; uint256 public buyRewardsFee; uint256 public buyDevFee; uint256 public sellDevFee; uint256 public transferFee; bool public swapAndLiquifyEnabled = true; // gas for processing auto claim dividends uint256 public gasForProcessing = 300000; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; // staking variables mapping(address => uint256) public stakingBonus; mapping(address => uint256) public stakingUntilDate; mapping(uint256 => uint256) public stakingAmounts; //for allowing specific address to trade while trading has not been enabled yet mapping(address => bool) private canTransferBeforeTradingIsEnabled; // Limit variables for bot protection bool public limitsInEffect = true; //boolean used to turn limits on and off uint256 private gasPriceLimit = 7 * 1 gwei; mapping(address => uint256) private _holderLastTransferBlock; // for 1 tx per block mapping(address => uint256) private _holderLastTransferTimestamp; // for sell cooldown timer uint256 public launchblock; uint256 public cooldowntimer = 60; //default cooldown 60s event EnableAccountStaking(address indexed account, uint256 duration); event UpdateStakingAmounts(uint256 duration, uint256 amount); event EnableSwapAndLiquify(bool enabled); event EnableStaking(bool enabled); event SetPreSaleWallet(address wallet); event UpdateDividendTracker( address indexed newAddress, address indexed oldAddress ); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event TradingEnabled(); event UpdateFees( uint256 sellDeadFees, uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 sellRewardsFee, uint256 buyDeadFees, uint256 buyMarketingFees, uint256 buyLiquidityFee, uint256 buyRewardsFee, uint256 buyDevFee, uint256 sellDevFee ); event UpdateTransferFee(uint256 transferFee); event Airdrop(address holder, uint256 amount); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated( uint256 indexed newValue, uint256 indexed oldValue ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends(uint256 amount, uint256 opAmount, bool success); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); event UpdatePayoutToken(address token); constructor() ERC20("BeanFlip", "$BEAN") { marketingWallet = payable(0x32634D7a09AFb82550dB39644172aB138aAE0e8A); devWallet = payable(0xC7006F3Ab6B34746F6A795868be747C56D629848); address router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; buyDeadFees = 0; sellDeadFees = 0; buyMarketingFees = 2; sellMarketingFees = 2; buyLiquidityFee = 1; sellLiquidityFee = 1; buyRewardsFee = 0; sellRewardsFee = 0; buyDevFee = 5; sellDevFee = 5; transferFee = 0; totalBuyFees = buyRewardsFee .add(buyLiquidityFee) .add(buyMarketingFees) .add(buyDevFee); totalSellFees = sellRewardsFee .add(sellLiquidityFee) .add(sellMarketingFees) .add(sellDevFee); dividendTracker = new BitBurnReflectDividendTracker( payable(this), router, 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56, "BeanFlipTRACKER", "BEANTRACKER" ); uniswapV2Router = IUniswapV2Router02(router); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _setAutomatedMarketMakerPair(uniswapV2Pair, true); // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(DEAD); dividendTracker.excludedFromDividends(address(0)); dividendTracker.excludeFromDividends(router); dividendTracker.excludeFromDividends(marketingWallet); dividendTracker.excludeFromDividends(owner()); // exclude from paying fees or having max transaction amount _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(dividendTracker)] = true; _isExcludedFromFees[address(marketingWallet)] = true; _isExcludedFromFees[address(devWallet)] = true; _isExcludedFromFees[msg.sender] = true; uint256 totalTokenSupply = (1_000_000) * (10**18); _mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply maxWallet = totalTokenSupply / 2000; // 0.05% swapTokensAtAmount = totalTokenSupply / 2000; // 0.05%; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(this)] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} function updateStakingAmounts(uint256 duration, uint256 bonus) public onlyOwner { require(stakingAmounts[duration] != bonus); require(bonus <= 100, "Staking bonus can't exceed 100"); stakingAmounts[duration] = bonus; emit UpdateStakingAmounts(duration, bonus); } // writeable function to enable trading, can only enable, trading can never be disabled function enableTrading() external onlyOwner { require(!tradingEnabled); tradingEnabled = true; launchblock = block.number; emit TradingEnabled(); } // use for pre sale wallet, adds all exclusions to it function setPresaleWallet(address wallet) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = true; _isExcludedFromFees[wallet] = true; dividendTracker.excludeFromDividends(wallet); emit SetPreSaleWallet(wallet); } // exclude a wallet from fees function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } // exclude from dividends (rewards) function setExcludeDividends(address account) public onlyOwner { dividendTracker.excludeFromDividends(account); } // include in dividends function setIncludeDividends(address account) public onlyOwner { dividendTracker.includeFromDividends(account); dividendTracker.setBalance(account, getStakingBalance(account)); } //allow a wallet to trade before trading enabled function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } // turn limits on and off function setLimitsInEffect(bool value) external onlyOwner { limitsInEffect = value; } // set max GWEI function setGasPriceLimit(uint256 GWEI) external onlyOwner { require(GWEI >= 5, "can never be set below 5"); gasPriceLimit = GWEI * 1 gwei; } // set cooldown timer, can only be between 0 and 300 seconds (5 mins max) function setcooldowntimer(uint256 value) external onlyOwner { require(value <= 300, "cooldown timer cannot exceed 5 minutes"); cooldowntimer = value; } // set max wallet, can not be lower than 0.05% of supply function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 2000, "max wallet cannot be set to less than 0.05%"); maxWallet = value; } function enableStaking(bool enable) public onlyOwner { require(stakingEnabled != enable); stakingEnabled = enable; emit EnableStaking(enable); } function stake(uint256 duration) public { require(stakingEnabled, "Staking is not enabled"); require(stakingAmounts[duration] != 0, "Invalid staking duration"); require( stakingUntilDate[_msgSender()] < block.timestamp.add(duration), "already staked for a longer duration" ); stakingBonus[_msgSender()] = stakingAmounts[duration]; stakingUntilDate[_msgSender()] = block.timestamp.add(duration); dividendTracker.setBalance( _msgSender(), getStakingBalance(_msgSender()) ); emit EnableAccountStaking(_msgSender(), duration); } // rewards threshold function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function enableSwapAndLiquify(bool enabled) public onlyOwner { require(swapAndLiquifyEnabled != enabled); swapAndLiquifyEnabled = enabled; emit EnableSwapAndLiquify(enabled); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function setAllowCustomTokens(bool allow) public onlyOwner { dividendTracker.setAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) public onlyOwner { dividendTracker.setAllowAutoReinvest(allow); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 1000000); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function transferAdmin(address newOwner) public onlyOwner { dividendTracker.excludeFromDividends(newOwner); _isExcludedFromFees[newOwner] = true; transferOwnership(newOwner); } function updateTransferFee(uint256 newTransferFee) public onlyOwner { require (newTransferFee <= 5, "transfer fee cannot exceed 5%"); transferFee = newTransferFee; emit UpdateTransferFee(transferFee); } function updateFees( uint256 deadBuy, uint256 deadSell, uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy, uint256 liquiditySell, uint256 RewardsBuy, uint256 RewardsSell, uint256 devBuy, uint256 devSell ) public onlyOwner { buyDeadFees = deadBuy; buyMarketingFees = marketingBuy; buyLiquidityFee = liquidityBuy; buyRewardsFee = RewardsBuy; sellDeadFees = deadSell; sellMarketingFees = marketingSell; sellLiquidityFee = liquiditySell; sellRewardsFee = RewardsSell; buyDevFee = devBuy; sellDevFee = devSell; totalSellFees = sellRewardsFee .add(sellLiquidityFee) .add(sellMarketingFees) .add(sellDevFee); totalBuyFees = buyRewardsFee .add(buyLiquidityFee) .add(buyMarketingFees) .add(buyDevFee); require(totalSellFees <= 15 && totalBuyFees <= 15, "total fees cannot exceed 15% sell or buy"); emit UpdateFees( sellDeadFees, sellMarketingFees, sellLiquidityFee, sellRewardsFee, buyDeadFees, buyMarketingFees, buyLiquidityFee, buyRewardsFee, buyDevFee, sellDevFee ); } function getStakingInfo(address account) external view returns (uint256, uint256) { return (stakingUntilDate[account], stakingBonus[account]); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function withdrawableDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) = dividendTracker.process(gas); emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, false, gas, tx.origin ); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function getLastProcessedIndex() external view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function setAutoClaim(bool value) external { dividendTracker.setAutoClaim(msg.sender, value); } function setReinvest(bool value) external { dividendTracker.setReinvest(msg.sender, value); } function setDividendsPaused(bool value) external onlyOwner { dividendTracker.setDividendsPaused(value); } function isExcludedFromAutoClaim(address account) external view returns (bool) { return dividendTracker.isExcludedFromAutoClaim(account); } function isReinvest(address account) external view returns (bool) { return dividendTracker.isReinvest(account); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 RewardsFee; uint256 deadFees; uint256 marketingFees; uint256 liquidityFee; uint256 devFees; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (amount == 0) { super._transfer(from, to, 0); return; } else if ( !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { bool isSelling = automatedMarketMakerPairs[to]; bool isBuying = automatedMarketMakerPairs[from]; if (!isBuying && !isSelling) { uint256 tFees = amount.mul(transferFee).div(100); amount = amount.sub(tFees); super._transfer(from, address(this), tFees); super._transfer(from, to, amount); dividendTracker.setBalance(from, getStakingBalance(from)); dividendTracker.setBalance(to, getStakingBalance(to)); return; } else if (!isBuying && stakingEnabled) { require( stakingUntilDate[from] <= block.timestamp, "Tokens are staked and locked!" ); if (stakingUntilDate[from] != 0) { stakingUntilDate[from] = 0; stakingBonus[from] = 0; } } else if (isSelling) { RewardsFee = sellRewardsFee; deadFees = sellDeadFees; marketingFees = sellMarketingFees; liquidityFee = sellLiquidityFee; devFees = sellDevFee; if (limitsInEffect) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); _holderLastTransferTimestamp[tx.origin] = block.timestamp; } } else if (isBuying) { RewardsFee = buyRewardsFee; deadFees = buyDeadFees; marketingFees = buyMarketingFees; liquidityFee = buyLiquidityFee; devFees = buyDevFee; if (limitsInEffect) { require(block.number > launchblock + 2,"you shall not pass"); require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit."); require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block"); _holderLastTransferBlock[tx.origin] = block.number; } uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet, "Exceeds maximum wallet token amount." ); } uint256 totalFees = RewardsFee .add(liquidityFee + marketingFees + devFees); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !automatedMarketMakerPairs[from]) { swapping = true; if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) { uint256 totalBuySell = buyAmount.add(sellAmount); uint256 swapAmountBought = contractTokenBalance .mul(buyAmount) .div(totalBuySell); uint256 swapAmountSold = contractTokenBalance .mul(sellAmount) .div(totalBuySell); uint256 swapBuyTokens = swapAmountBought .mul(liquidityFee) .div(totalBuyFees); uint256 swapSellTokens = swapAmountSold .mul(liquidityFee) .div(totalSellFees); uint256 swapTokens = swapSellTokens.add(swapBuyTokens); swapAndLiquify(swapTokens); } uint256 remainingBalance = balanceOf(address(this)); swapAndSendDividends(remainingBalance); buyAmount = 0; sellAmount = 0; swapping = false; } uint256 fees = amount.mul(totalFees).div(100); uint256 burntokens; if (deadFees > 0) { burntokens = amount.mul(deadFees) / 100; super._transfer(from, DEAD, burntokens); _totalSupply = _totalSupply.sub(burntokens); } amount = amount.sub(fees + burntokens); if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) { emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, true, gas, tx.origin ); } catch {} } super._transfer(from, to, amount); dividendTracker.setBalance(from, getStakingBalance(from)); dividendTracker.setBalance(to, getStakingBalance(to)); } function getStakingBalance(address account) private view returns (uint256) { return stakingEnabled ? balanceOf(account).mul(stakingBonus[account].add(100)).div( 100 ) : balanceOf(account); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function updatePayoutToken(address token) public onlyOwner { dividendTracker.updatePayoutToken(token); emit UpdatePayoutToken(token); } function getPayoutToken() public view returns (address) { return dividendTracker.getPayoutToken(); } function setMinimumTokenBalanceForAutoDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForAutoDividends(value); } function setMinimumTokenBalanceForDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForDividends(value); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); uint256 totalAmount = buyAmount.add(sellAmount); bool success = true; bool successOp1 = true; bool successOp2 = true; uint256 dividends; uint256 dividendsFromBuy; uint256 dividendsFromSell; if (buyRewardsFee > 0) { dividendsFromBuy = address(this) .balance .mul(buyAmount) .div(totalAmount) .mul(buyRewardsFee) .div(buyRewardsFee + buyMarketingFees + buyDevFee); } if (sellRewardsFee > 0) { dividendsFromSell = address(this) .balance .mul(sellAmount) .div(totalAmount) .mul(sellRewardsFee) .div(sellRewardsFee + sellMarketingFees + sellDevFee); } dividends = dividendsFromBuy.add(dividendsFromSell); if (dividends > 0) { (success, ) = address(dividendTracker).call{value: dividends}(""); } uint256 _completeFees = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee); uint256 feePortions; if (_completeFees > 0) { feePortions = address(this).balance.div(_completeFees); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions; if (marketingPayout > 0) { (successOp1, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (devPayout > 0) { (successOp2, ) = address(devWallet).call{value: devPayout}(""); } emit SendDividends( dividends, marketingPayout + devPayout, success && successOp1 && successOp2 ); } function multiSend( address[] memory _contributors, uint256[] memory _balances ) public onlyOwner { require( _contributors.length == _balances.length, "Contributors and balances must be same size" ); // Max 200 sends in bulk, uint8 in loop limited to 255 require( _contributors.length <= 200, "Contributor list length must be <= 200" ); uint256 sumOfBalances = 0; for (uint8 i = 0; i < _balances.length; i++) { sumOfBalances = sumOfBalances.add(_balances[i]); } require( balanceOf(msg.sender) >= sumOfBalances, "Account balance must be >= sum of balances. " ); require( allowance(msg.sender, address(this)) >= sumOfBalances, "Contract allowance must be >= sum of balances. " ); address contributor; uint256 origBalance; for (uint8 j; j < _contributors.length; j++) { contributor = _contributors[j]; require( contributor != address(0) && contributor != 0x000000000000000000000000000000000000dEaD, "Cannot airdrop to a dead address" ); origBalance = balanceOf(contributor); this.transferFrom(msg.sender, contributor, _balances[j]); require( balanceOf(contributor) == origBalance + _balances[j], "Contributor must recieve full balance of airdrop" ); emit Airdrop(contributor, _balances[j]); } } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length,"Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); dividendTracker.setBalance(payable(wallet), balanceOf(wallet)); } } } contract BitBurnReflectDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping(address => bool) public excludedFromDividends; mapping(address => bool) public excludedFromAutoClaim; mapping(address => bool) public autoReinvest; address public defaultToken; // BUSD bool public allowCustomTokens; bool public allowAutoReinvest; bool public dividendsPaused = false; string private trackerName; string private trackerTicker; IUniswapV2Router02 public uniswapV2Router; BeanFlip public BitBurnReflectContract; mapping(address => uint256) public lastClaimTimes; uint256 private minimumTokenBalanceForAutoDividends; uint256 private minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event DividendReinvested( address indexed acount, uint256 value, bool indexed automatic ); event Claim( address indexed account, uint256 amount, bool indexed automatic ); event DividendsPaused(bool paused); event SetAllowCustomTokens(bool allow); event SetAllowAutoReinvest(bool allow); constructor( address payable mainContract, address router, address token, string memory _name, string memory _ticker ) DividendPayingToken(_name, _ticker) { trackerName = _name; trackerTicker = _ticker; defaultToken = token; BitBurnReflectContract = BeanFlip(mainContract); minimumTokenBalanceForAutoDividends = 100_000000000000000000; // 100 tokens minimumTokenBalanceForDividends = minimumTokenBalanceForAutoDividends; uniswapV2Router = IUniswapV2Router02(router); allowCustomTokens = true; allowAutoReinvest = false; } function decimals() public view virtual override returns (uint8) { return 18; } function name() public view virtual override returns (string memory) { return trackerName; } function symbol() public view virtual override returns (string memory) { return trackerTicker; } function _transfer( address, address, uint256 ) internal pure override { require(false, "BitBurnReflect_Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public pure override { require( false, "BitBurnReflect_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main BitBurnReflect contract." ); } function isExcludedFromAutoClaim(address account) external view onlyOwner returns (bool) { return excludedFromAutoClaim[account]; } function isReinvest(address account) external view onlyOwner returns (bool) { return autoReinvest[account]; } function setAllowCustomTokens(bool allow) external onlyOwner { require(allowCustomTokens != allow); allowCustomTokens = allow; emit SetAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) external onlyOwner { require(allowAutoReinvest != allow); allowAutoReinvest = allow; emit SetAllowAutoReinvest(allow); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeFromDividends(address account) external onlyOwner { excludedFromDividends[account] = false; } function setAutoClaim(address account, bool value) external onlyOwner { excludedFromAutoClaim[account] = value; } function setReinvest(address account, bool value) external onlyOwner { autoReinvest[account] = value; } function setMinimumTokenBalanceForAutoDividends(uint256 value) external onlyOwner { minimumTokenBalanceForAutoDividends = value * (10**18); } function setMinimumTokenBalanceForDividends(uint256 value) external onlyOwner { minimumTokenBalanceForDividends = value * (10**18); } function setDividendsPaused(bool value) external onlyOwner { require(dividendsPaused != value); dividendsPaused = value; emit DividendsPaused(value); } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime ) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub( int256(lastProcessedIndex) ); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add( int256(processesUntilEndOfArray) ); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256 ) { if (index >= tokenHoldersMap.size()) { return ( 0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0 ); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function setBalance(address account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance < minimumTokenBalanceForDividends) { tokenHoldersMap.remove(account); _setBalance(account, 0); return; } _setBalance(account, newBalance); if (newBalance >= minimumTokenBalanceForAutoDividends) { tokenHoldersMap.set(account, newBalance); } else { tokenHoldersMap.remove(account); } } function process(uint256 gas) public returns ( uint256, uint256, uint256 ) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0 || dividendsPaused) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= numberOfTokenHolders) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (!excludedFromAutoClaim[account]) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { if (dividendsPaused) { return false; } bool reinvest = autoReinvest[account]; if (automatic && reinvest && !allowAutoReinvest) { return false; } uint256 amount = reinvest ? _reinvestDividendOfUser(account) : _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; if (reinvest) { emit DividendReinvested(account, amount, automatic); } else { emit Claim(account, amount, automatic); } return true; } return false; } function updateUniswapV2Router(address newAddress) public onlyOwner { uniswapV2Router = IUniswapV2Router02(newAddress); } function updatePayoutToken(address token) public onlyOwner { defaultToken = token; } function getPayoutToken() public view returns (address) { return defaultToken; } function _reinvestDividendOfUser(address account) private returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { bool success; withdrawnDividends[account] = withdrawnDividends[account].add( _withdrawableDividend ); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(BitBurnReflectContract); uint256 prevBalance = BitBurnReflectContract.balanceOf(address(this)); // make the swap try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, address(this), block.timestamp ) { uint256 received = BitBurnReflectContract .balanceOf(address(this)) .sub(prevBalance); if (received > 0) { success = true; BitBurnReflectContract.transfer(account, received); } else { success = false; } } catch { success = false; } if (!success) { withdrawnDividends[account] = withdrawnDividends[account].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function _withdrawDividendOfUser(address payable user) internal override returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); address tokenAddress = defaultToken; bool success; if (tokenAddress == address(0)) { (success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); } else { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, user, block.timestamp ) { success = true; } catch { success = false; } } if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } else { emit DividendWithdrawn(user, _withdrawableDividend); } return _withdrawableDividend; } return 0; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) internal view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) internal view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) internal view returns (address) { return map.keys[index]; } function size(Map storage map) internal view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) internal { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) internal { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"EnableAccountStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"UpdatePayoutToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateStakingAmounts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract BitBurnReflectDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_contributors","type":"address[]"},{"internalType":"uint256[]","name":"_balances","type":"uint256[]"}],"name":"multiSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIncludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingUntilDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBuy","type":"uint256"},{"internalType":"uint256","name":"deadSell","type":"uint256"},{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"RewardsBuy","type":"uint256"},{"internalType":"uint256","name":"RewardsSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"updateStakingAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260088054600162ffff0160a01b03191661dead17905560006009819055600a55601d805460ff199081166001908117909255620493e0601e556025805490911690911790556401a13b8600602655603c602a553480156200006457600080fd5b506040518060400160405280600881526020016704265616e466c69760c41b81525060405180604001604052806005815260200164122122a0a760d91b8152508160039081620000b5919062000b81565b506004620000c4828262000b81565b5050506000620000d96200088f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e80547332634d7a09afb82550db39644172ab138aae0e8a6001600160a01b031991821617909155600f805473c7006f3ab6b34746f6a795868be747c56d6298489216919091179055600060168190556013819055600260178190556014819055600160188190556015819055601983905560128390556005601a819055601b819055601c8490557310ed43c718714eb63d5aa57b78b54704e256024e93620001fb939192620001e79291839162000893602090811b6200306b17901c565b6200089360201b6200306b1790919060201c565b600c819055506200022d601b54620001e7601454620001e76015546012546200089360201b6200306b1790919060201c565b600b81905550308173e9e7cea3dedca5984780bafc599bd69add087d56604051620002589062000acf565b6001600160a01b0393841681529183166020830152909116604082015260a060608201819052600f908201526e2132b0b7233634b82a2920a1a5a2a960891b60c082015260e060808201819052600b908201526a2122a0a72a2920a1a5a2a960a91b61010082015261012001604051809103906000f080158015620002e1573d6000803e3d6000fd5b50600d80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200034c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000372919062000c4d565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fb919062000c4d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046f919062000c4d565b600780546001600160a01b0319166001600160a01b039290921691821790556200049b90600162000903565b600d5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620004e257600080fd5b505af1158015620004f7573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200054157600080fd5b505af115801562000556573d6000803e3d6000fd5b5050600d5460085460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620005a457600080fd5b505af1158015620005b9573d6000803e3d6000fd5b5050600d54604051634e7b827f60e01b8152600060048201526001600160a01b039091169250634e7b827f9150602401602060405180830381865afa15801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d919062000c78565b50600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156200067657600080fd5b505af11580156200068b573d6000803e3d6000fd5b5050600d54600e5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620006d957600080fd5b505af1158015620006ee573d6000803e3d6000fd5b5050600d546001600160a01b031691506331e79db09050620007186005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200075a57600080fd5b505af11580156200076f573d6000803e3d6000fd5b5050306000908152601f60205260408082208054600160ff199182168117909255600d546001600160a01b0390811685528385208054831684179055600e54811685528385208054831684179055600f54168452828420805482168317905533845291909220805490911690911790555069d3c21bcecceda100000090506200080b620008046005546001600160a01b031690565b82620009ce565b620008196107d08262000c9c565b6010556200082a6107d08262000c9c565b601155600160246000620008466005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260249092529020805490911660011790555062000ce19050565b3390565b600080620008a2838562000cbf565b905083811015620008fa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b03821660009081526020805260409020805460ff191682158015919091179091556200099257600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200097857600080fd5b505af11580156200098d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b03821662000a265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620008f1565b62000a42816002546200089360201b6200306b1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a759183906200306b62000893821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6130b2806200596e83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b0857607f821691505b60208210810362000b2957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000aca57600081815260208120601f850160051c8101602086101562000b585750805b601f850160051c820191505b8181101562000b795782815560010162000b64565b505050505050565b81516001600160401b0381111562000b9d5762000b9d62000add565b62000bb58162000bae845462000af3565b8462000b2f565b602080601f83116001811462000bed576000841562000bd45750858301515b600019600386901b1c1916600185901b17855562000b79565b600085815260208120601f198616915b8281101562000c1e5788860151825594840194600190910190840162000bfd565b508582101562000c3d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c6057600080fd5b81516001600160a01b0381168114620008fa57600080fd5b60006020828403121562000c8b57600080fd5b81518015158114620008fa57600080fd5b60008262000cba57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008fd57634e487b7160e01b600052601160045260246000fd5b614c7d8062000cf16000396000f3fe6080604052600436106104e55760003560e01c80637fdde05c11610281578063aa4704f31161015a578063d8032ed3116100cc578063f27fd25411610085578063f27fd25414610f7c578063f2fde38b14610f9c578063f5d3c79a14610fbc578063f637434214610fdc578063f8b45b0514610ff2578063fc6b151c1461100857600080fd5b8063d8032ed314610ea8578063dd62ed3e14610ec8578063e2f4560514610f0e578063e7841ec014610f24578063f11a24d314610f39578063f1c0ddff14610f4f57600080fd5b8063b74e3b111161011e578063b74e3b1114610df2578063ba079d4914610e12578063bb4c9f0b14610e32578063bb8d513114610e52578063d07a091c14610e68578063d5e3725114610e8857600080fd5b8063aa4704f314610ce8578063acb2ad6f14610d40578063ad56c13c14610d56578063b494298814610dad578063b62496f514610dc357600080fd5b80639a7a23d6116101f35780639ec1037e116101b75780639ec1037e14610c32578063a0d82dc514610c52578063a457c2d714610c68578063a694fc3a14610c88578063a8b9d24014610ca8578063a9059cbb14610cc857600080fd5b80639a7a23d614610ba65780639c1b8af514610bc65780639c3372ea14610bdc5780639c3b4fdc14610bfc5780639cefc1da14610c1257600080fd5b80638a8c523c116102455780638a8c523c14610b125780638ca2923a14610b275780638da5cb5b14610b3d5780638ea5220f14610b5b57806395451c2914610b7b57806395d89b4114610b9157600080fd5b80637fdde05c14610a72578063837ae2d014610a925780638577a6d514610ab2578063868730c714610ad2578063871c128d14610af257600080fd5b806349bd5a5e116103be57806364b0f65311610330578063715018a6116102e9578063715018a6146109ba57806372d8edf4146109cf57806375829def146109ef57806375f0a87414610a0f57806377a3b60914610a2f5780637d32f34214610a4557600080fd5b806364b0f65314610905578063679ca6e91461091a5780636843cd841461093a5780636d48467b1461095a578063700bb1911461097a57806370a082311461099a57600080fd5b80634fbee193116103825780634fbee193146108405780635124f874146108795780635a84c5eb1461088f5780635c234bb6146108af5780635ebf4db9146108c55780635eee4bae146108e557600080fd5b806349bd5a5e146107b65780634a62bb65146107d65780634a74bb02146107f05780634ada218b1461080a5780634e71d92d1461082b57600080fd5b80632307b44111610457578063313ce5671161041b578063313ce567146106f75780633599bb171461071357806339509351146107335780633f407b841461075357806340ffdd8014610769578063435c89e41461078957600080fd5b80632307b4411461066d57806323b872dd1461068d57806325cd3598146106ad5780632c1f5216146106c257806330bb4cff146106e257600080fd5b8063095ea7b3116104a9578063095ea7b3146105b25780630ef35b7e146105e25780631694505e1461060257806318160ddd146106225780631d7b1fb4146106415780631fa705311461065757600080fd5b806303fd2a45146104f157806305ca5f081461052e57806306fdde031461055057806308dfe8a514610572578063092316021461059257600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b50600854610511906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561053a57600080fd5b5061054e61054936600461451b565b611028565b005b34801561055c57600080fd5b506105656110f9565b6040516105259190614534565b34801561057e57600080fd5b5061054e61058d3660046145a5565b61118b565b34801561059e57600080fd5b5061054e6105ad36600461451b565b611214565b3480156105be57600080fd5b506105d26105cd3660046145de565b6112a3565b6040519015158152602001610525565b3480156105ee57600080fd5b5061054e6105fd36600461460a565b6112ba565b34801561060e57600080fd5b50600654610511906001600160a01b031681565b34801561062e57600080fd5b506002545b604051908152602001610525565b34801561064d57600080fd5b50610633602a5481565b34801561066357600080fd5b50610633600a5481565b34801561067957600080fd5b5061054e610688366004614702565b61139f565b34801561069957600080fd5b506105d26106a83660046147c4565b611570565b3480156106b957600080fd5b506105116115d9565b3480156106ce57600080fd5b50600d54610511906001600160a01b031681565b3480156106ee57600080fd5b5061063361164c565b34801561070357600080fd5b5060405160128152602001610525565b34801561071f57600080fd5b5061054e61072e366004614805565b6116ba565b34801561073f57600080fd5b506105d261074e3660046145de565b611747565b34801561075f57600080fd5b5061063360095481565b34801561077557600080fd5b5061054e610784366004614805565b61177d565b34801561079557600080fd5b506106336107a436600461451b565b60236020526000908152604090205481565b3480156107c257600080fd5b50600754610511906001600160a01b031681565b3480156107e257600080fd5b506025546105d29060ff1681565b3480156107fc57600080fd5b50601d546105d29060ff1681565b34801561081657600080fd5b506008546105d290600160b01b900460ff1681565b34801561083757600080fd5b5061054e6117d8565b34801561084c57600080fd5b506105d261085b366004614822565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561088557600080fd5b5061063360175481565b34801561089b57600080fd5b5061054e6108aa36600461451b565b611850565b3480156108bb57600080fd5b5061063360165481565b3480156108d157600080fd5b5061054e6108e036600461451b565b6118ab565b3480156108f157600080fd5b5061054e61090036600461451b565b611906565b34801561091157600080fd5b50610633611948565b34801561092657600080fd5b5061054e610935366004614805565b611992565b34801561094657600080fd5b50610633610955366004614822565b6119cf565b34801561096657600080fd5b506105d2610975366004614822565b611a3f565b34801561098657600080fd5b5061054e61099536600461451b565b611aaf565b3480156109a657600080fd5b506106336109b5366004614822565b611b81565b3480156109c657600080fd5b5061054e611b9c565b3480156109db57600080fd5b5061054e6109ea366004614822565b611c10565b3480156109fb57600080fd5b5061054e610a0a366004614822565b611c6c565b348015610a1b57600080fd5b50600e54610511906001600160a01b031681565b348015610a3b57600080fd5b5061063360195481565b348015610a5157600080fd5b50610633610a60366004614822565b60226020526000908152604090205481565b348015610a7e57600080fd5b5061054e610a8d3660046145a5565b611d21565b348015610a9e57600080fd5b5061054e610aad36600461483f565b611d76565b348015610abe57600080fd5b5061054e610acd36600461451b565b611f20565b348015610ade57600080fd5b5061054e610aed366004614805565b611fd7565b348015610afe57600080fd5b5061054e610b0d36600461451b565b61200f565b348015610b1e57600080fd5b5061054e61208b565b348015610b3357600080fd5b5061063360135481565b348015610b4957600080fd5b506005546001600160a01b0316610511565b348015610b6757600080fd5b50600f54610511906001600160a01b031681565b348015610b8757600080fd5b5061063360145481565b348015610b9d57600080fd5b5061056561210e565b348015610bb257600080fd5b5061054e610bc13660046145a5565b61211d565b348015610bd257600080fd5b50610633601e5481565b348015610be857600080fd5b5061054e610bf7366004614805565b612155565b348015610c0857600080fd5b50610633601a5481565b348015610c1e57600080fd5b5061054e610c2d366004614805565b6121b1565b348015610c3e57600080fd5b5061054e610c4d366004614822565b612247565b348015610c5e57600080fd5b50610633601b5481565b348015610c7457600080fd5b506105d2610c833660046145de565b61231e565b348015610c9457600080fd5b5061054e610ca336600461451b565b61236d565b348015610cb457600080fd5b50610633610cc3366004614822565b612590565b348015610cd457600080fd5b506105d2610ce33660046145de565b6125c3565b348015610cf457600080fd5b50610d2b610d03366004614822565b6001600160a01b03166000908152602260209081526040808320546021909252909120549091565b60408051928352602083019190915201610525565b348015610d4c57600080fd5b50610633601c5481565b348015610d6257600080fd5b50610d76610d71366004614822565b6125d0565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610525565b348015610db957600080fd5b5061063360295481565b348015610dcf57600080fd5b506105d2610dde366004614822565b602080526000908152604090205460ff1681565b348015610dfe57600080fd5b5061054e610e0d36600461451b565b612660565b348015610e1e57600080fd5b506105d2610e2d366004614822565b6126f0565b348015610e3e57600080fd5b5061054e610e4d366004614702565b612723565b348015610e5e57600080fd5b5061063360125481565b348015610e7457600080fd5b5061054e610e83366004614822565b612bd0565b348015610e9457600080fd5b5061054e610ea3366004614805565b612cc5565b348015610eb457600080fd5b5061054e610ec3366004614822565b612d47565b348015610ed457600080fd5b50610633610ee33660046148a7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610f1a57600080fd5b5061063360115481565b348015610f3057600080fd5b50610633612e0a565b348015610f4557600080fd5b5061063360185481565b348015610f5b57600080fd5b50610633610f6a366004614822565b60216020526000908152604090205481565b348015610f8857600080fd5b50610d76610f9736600461451b565b612e54565b348015610fa857600080fd5b5061054e610fb7366004614822565b612e92565b348015610fc857600080fd5b5061054e610fd7366004614805565b612f7d565b348015610fe857600080fd5b5061063360155481565b348015610ffe57600080fd5b5061063360105481565b34801561101457600080fd5b5061054e61102336600461451b565b612fb5565b6005546001600160a01b0316331461105b5760405162461bcd60e51b8152600401611052906148d5565b60405180910390fd5b61106d81670de0b6b3a7640000614920565b90506000611088600954600a5461306b90919063ffffffff16565b905060006110ab826110a5600a54866130d190919063ffffffff16565b90613153565b905060006110c8836110a5600954876130d190919063ffffffff16565b90506110d384613195565b600a546110e09083613495565b600a556009546110f09082613495565b60095550505050565b60606003805461110890614937565b80601f016020809104026020016040519081016040528092919081815260200182805461113490614937565b80156111815780601f1061115657610100808354040283529160200191611181565b820191906000526020600020905b81548152906001019060200180831161116457829003601f168201915b5050505050905090565b6005546001600160a01b031633146111b55760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461123e5760405162461bcd60e51b8152600401611052906148d5565b600581101561128f5760405162461bcd60e51b815260206004820152601860248201527f63616e206e65766572206265207365742062656c6f77203500000000000000006044820152606401611052565b61129d81633b9aca00614920565b60265550565b60006112b03384846134d7565b5060015b92915050565b6005546001600160a01b031633146112e45760405162461bcd60e51b8152600401611052906148d5565b6000828152602360205260409020548190036112ff57600080fd5b60648111156113505760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e6720626f6e75732063616e2774206578636565642031303000006044820152606401611052565b60008281526023602090815260409182902083905581518481529081018390527f065c0eec5c5d031ee25323575d53db5536226ab058b74d8bdb03c517dd4f605d910160405180910390a15050565b6005546001600160a01b031633146113c95760405162461bcd60e51b8152600401611052906148d5565b805182511461141a5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611052565b60c8825111156114775760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401611052565b60005b825181101561156b57600083828151811061149757611497614971565b6020026020010151905060008383815181106114b5576114b5614971565b6020026020010151670de0b6b3a76400006114d09190614920565b90506114dd3383836135fc565b600d546001600160a01b031663e30443bc836114f881611b81565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050505050808061156390614987565b91505061147a565b505050565b600061157d848484613705565b6115cf84336115ca85604051806060016040528060288152602001614bfb602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906140eb565b6134d7565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906149a0565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906149bd565b6005546001600160a01b031633146116e45760405162461bcd60e51b8152600401611052906148d5565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561172c57600080fd5b505af1158015611740573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916112b09185906115ca908661306b565b6005546001600160a01b031633146117a75760405162461bcd60e51b8152600401611052906148d5565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd8090602401611712565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d91906149d6565b50565b6005546001600160a01b0316331461187a5760405162461bcd60e51b8152600401611052906148d5565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb90602401611712565b6005546001600160a01b031633146118d55760405162461bcd60e51b8152600401611052906148d5565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db990602401611712565b6005546001600160a01b031633146119305760405162461bcd60e51b8152600401611052906148d5565b61194281670de0b6b3a7640000614920565b60115550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b6005546001600160a01b031633146119bc5760405162461bcd60e51b8152600401611052906148d5565b6025805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906149bd565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906149d6565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2691906149f3565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611bc65760405162461bcd60e51b8152600401611052906148d5565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611c3a5760405162461bcd60e51b8152600401611052906148d5565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401611712565b6005546001600160a01b03163314611c965760405162461bcd60e51b8152600401611052906148d5565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611cdd57600080fd5b505af1158015611cf1573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601f60205260409020805460ff191660011790555061184d81612e92565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611da05760405162461bcd60e51b8152600401611052906148d5565b60168a90556017889055601886905560198490556013899055601487905560158590556012839055601a829055601b819055611de881611de28981878a61306b565b9061306b565b600b81905550611e11601a54611de2601754611de260185460195461306b90919063ffffffff16565b600c55600b54600f10801590611e2a5750600f600c5411155b611e875760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b6064820152608401611052565b601354601454601554601254601654601754601854601954601a54601b54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611f4a5760405162461bcd60e51b8152600401611052906148d5565b6005811115611f9b5760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401611052565b601c8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d63990604401611712565b6005546001600160a01b031633146120395760405162461bcd60e51b8152600401611052906148d5565b62030d40811015801561204f5750620f42408111155b61205857600080fd5b601e5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601e55565b6005546001600160a01b031633146120b55760405162461bcd60e51b8152600401611052906148d5565b600854600160b01b900460ff16156120cc57600080fd5b6008805460ff60b01b1916600160b01b179055436029556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b60606004805461110890614937565b6005546001600160a01b031633146121475760405162461bcd60e51b8152600401611052906148d5565b6121518282614125565b5050565b6005546001600160a01b0316331461217f5760405162461bcd60e51b8152600401611052906148d5565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea90602401611712565b6005546001600160a01b031633146121db5760405162461bcd60e51b8152600401611052906148d5565b801515600860159054906101000a900460ff161515036121fa57600080fd5b60088054821515600160a81b0260ff60a81b199091161790556040517f0d240c24014ec8c204fc1bdcc286f7d01fd2ab6a07c558a9b2d3f12904323a8790611fcc90831515815260200190565b6005546001600160a01b031633146122715760405162461bcd60e51b8152600401611052906148d5565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050826122ed816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611712565b60006112b033846115ca85604051806060016040528060258152602001614c23602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906140eb565b600854600160a81b900460ff166123bf5760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401611052565b600081815260236020526040812054900361241c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207374616b696e67206475726174696f6e00000000000000006044820152606401611052565b612426428261306b565b336000908152602260205260409020541061248f5760405162461bcd60e51b8152602060048201526024808201527f616c7265616479207374616b656420666f722061206c6f6e67657220647572616044820152633a34b7b760e11b6064820152608401611052565b6000818152602360209081526040808320543384526021909252909120556124b7428261306b565b33600081815260226020526040902091909155600d546001600160a01b03169063e30443bc906124e6816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561252c57600080fd5b505af1158015612540573d6000803e3d6000fd5b5050505061254b3390565b6001600160a01b03167f13dd201d7da4f9b31a9064a09abc1a6ce420dacd837a77abafaec5bd9d28d2c88260405161258591815260200190565b60405180910390a250565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016119fe565b60006112b0338484613705565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264c9190614a21565b949c939b5091995097509550909350915050565b6005546001600160a01b0316331461268a5760405162461bcd60e51b8152600401611052906148d5565b61012c8111156126eb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401611052565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d4990602401611a6e565b6005546001600160a01b0316331461274d5760405162461bcd60e51b8152600401611052906148d5565b80518251146127b25760405162461bcd60e51b815260206004820152602b60248201527f436f6e7472696275746f727320616e642062616c616e636573206d757374206260448201526a652073616d652073697a6560a81b6064820152608401611052565b60c8825111156128135760405162461bcd60e51b815260206004820152602660248201527f436f6e7472696275746f72206c697374206c656e677468206d7573742062652060448201526503c3d203230360d41b6064820152608401611052565b6000805b82518160ff16101561286657612852838260ff168151811061283b5761283b614971565b60200260200101518361306b90919063ffffffff16565b91508061285e81614a74565b915050612817565b508061287133611b81565b10156128d45760405162461bcd60e51b815260206004820152602c60248201527f4163636f756e742062616c616e6365206d757374206265203e3d2073756d206f60448201526b033103130b630b731b2b997160a51b6064820152608401611052565b3360009081526001602090815260408083203084529091529020548111156129565760405162461bcd60e51b815260206004820152602f60248201527f436f6e747261637420616c6c6f77616e6365206d757374206265203e3d20737560448201526e0369037b3103130b630b731b2b9971608d1b6064820152608401611052565b60008060005b85518160ff161015612bc857858160ff168151811061297d5761297d614971565b6020026020010151925060006001600160a01b0316836001600160a01b0316141580156129b5575061dead6001600160a01b03841614155b612a015760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742061697264726f7020746f2061206465616420616464726573736044820152606401611052565b612a0a83611b81565b9150306001600160a01b03166323b872dd3385888560ff1681518110612a3257612a32614971565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab591906149d6565b50848160ff1681518110612acb57612acb614971565b602002602001015182612ade9190614a93565b612ae784611b81565b14612b4d5760405162461bcd60e51b815260206004820152603060248201527f436f6e7472696275746f72206d75737420726563696576652066756c6c20626160448201526f06c616e6365206f662061697264726f760841b6064820152608401611052565b7f8c32c568416fcf97be35ce5b27844cfddcd63a67a1a602c3595ba5dac38f303a83868360ff1681518110612b8457612b84614971565b6020026020010151604051612bae9291906001600160a01b03929092168252602082015260400190565b60405180910390a180612bc081614a74565b91505061295c565b505050505050565b6005546001600160a01b03163314612bfa5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b0381811660008181526024602081815260408084208054600160ff199182168117909255601f9093529381902080549092169093179055600d54915163031e79db60e41b815260048101939093529216916331e79db09101600060405180830381600087803b158015612c7357600080fd5b505af1158015612c87573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611fcc565b6005546001600160a01b03163314612cef5760405162461bcd60e51b8152600401611052906148d5565b601d5481151560ff909116151503612d0657600080fd5b601d805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611fcc565b6005546001600160a01b03163314612d715760405162461bcd60e51b8152600401611052906148d5565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b158015612db857600080fd5b505af1158015612dcc573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611fcc565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161260b565b6005546001600160a01b03163314612ebc5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b038116612f215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611052565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a0490604401611712565b6005546001600160a01b03163314612fdf5760405162461bcd60e51b8152600401611052906148d5565b612ff181670de0b6b3a7640000614920565b90506107d06002546130039190614aa6565b8110156130665760405162461bcd60e51b815260206004820152602b60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360448201526a207468616e20302e30352560a81b6064820152608401611052565b601055565b6000806130788385614a93565b9050838110156130ca5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611052565b9392505050565b6000826000036130e3575060006112b4565b60006130ef8385614920565b9050826130fc8583614aa6565b146130ca5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611052565b60006130ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614246565b806000036131a05750565b6131a981614274565b60006131c2600954600a5461306b90919063ffffffff16565b60195490915060019081908190600090819081901561322357613220601a546017546019546131f19190614a93565b6131fb9190614a93565b6110a560195461321a8b6110a5600a54476130d190919063ffffffff16565b906130d1565b91505b6012541561326d5761326a601b546014546012546132419190614a93565b61324b9190614a93565b6110a560125461321a8b6110a5600954476130d190919063ffffffff16565b90505b613277828261306b565b925082156132d757600d546040516001600160a01b03909116908490600081818185875af1925050503d80600081146132cc576040519150601f19603f3d011682016040523d82523d6000602084013e6132d1565b606091505b50909650505b60006132f0601a5460175461306b90919063ffffffff16565b601b546014546132ff9161306b565b6133099190614a93565b9050600081156133205761331d4783613153565b90505b60008161333a60145460175461306b90919063ffffffff16565b6133449190614920565b9050600082613360601b54601a5461306b90919063ffffffff16565b61336a9190614920565b905081156133ca57600e546040516001600160a01b03909116908390600081818185875af1925050503d80600081146133bf576040519150601f19603f3d011682016040523d82523d6000602084013e6133c4565b606091505b50909950505b801561342857600f546040516001600160a01b03909116908290600081818185875af1925050503d806000811461341d576040519150601f19603f3d011682016040523d82523d6000602084013e613422565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd0876134548385614a93565b8c801561345e57508b5b801561346757508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b60006130ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140eb565b6001600160a01b0383166135395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611052565b6001600160a01b03821661359a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611052565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166136225760405162461bcd60e51b815260040161105290614ac8565b6001600160a01b0382166136485760405162461bcd60e51b815260040161105290614b0d565b61368581604051806060016040528060268152602001614bd5602691396001600160a01b03861660009081526020819052604090205491906140eb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546136b4908261306b565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016135ef565b6001600160a01b03831661372b5760405162461bcd60e51b815260040161105290614ac8565b6001600160a01b0382166137515760405162461bcd60e51b815260040161105290614b0d565b6001600160a01b038316600090815260246020526040812054819081908190819060ff166137d257600854600160b01b900460ff166137d25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401611052565b856000036137f0576137e6888860006135fc565b5050505050505050565b600854600160a01b900460ff1615801561382357506001600160a01b0388166000908152601f602052604090205460ff16155b801561384857506001600160a01b0387166000908152601f602052604090205460ff16155b15613fe2576001600160a01b03808816600090815260208052604080822054928b16825290205460ff918216911680158015613882575081155b156139c85760006138a360646110a5601c548c6130d190919063ffffffff16565b90506138af8982613495565b98506138bc8b30836135fc565b6138c78b8b8b6135fc565b600d546001600160a01b031663e30443bc8c6138e2816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561392857600080fd5b505af115801561393c573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b61395d816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050505050505050505050565b801580156139df5750600854600160a81b900460ff165b15613a96576001600160a01b038a16600090815260226020526040902054421015613a4c5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320617265207374616b656420616e64206c6f636b6564210000006044820152606401611052565b6001600160a01b038a1660009081526022602052604090205415613a91576001600160a01b038a16600090815260226020908152604080832083905560219091528120555b613cef565b8115613b3f57601254601354601454601554601b54602554949b509299509097509550935060ff1615613a9157602a5432600090815260286020526040902054613ae09190614a93565b421015613b285760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401611052565b326000908152602860205260409020429055613cef565b8015613cef57601954601654601754601854601a54602554949b509299509097509550935060ff1615613c7857602954613b7a906002614a93565b4311613bbd5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401611052565b6026543a1115613c0f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401611052565b32600090815260276020526040902054439003613c655760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401611052565b3260009081526027602052604090204390555b6000613c838a611b81565b601054909150613c938a83614a93565b1115613ced5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401611052565b505b6000613d1084613cff8888614a93565b613d099190614a93565b899061306b565b90506000613d1d30611b81565b60115490915081108015908190613d4c57506001600160a01b038d16600090815260208052604090205460ff16155b15613e65576008805460ff60a01b1916600160a01b179055601d5460ff168015613d765750600087115b8015613d8457506000600c54115b15613e36576000613da2600954600a5461306b90919063ffffffff16565b90506000613dbf826110a5600a54876130d190919063ffffffff16565b90506000613ddc836110a5600954886130d190919063ffffffff16565b90506000613df9600c546110a58d866130d190919063ffffffff16565b90506000613e16600b546110a58e866130d190919063ffffffff16565b90506000613e24828461306b565b9050613e2f816143c6565b5050505050505b6000613e4130611b81565b9050613e4c81613195565b506000600a8190556009556008805460ff60a01b191690555b6000613e7660646110a58e876130d1565b905060008a15613ec9576064613e8c8e8d6130d1565b613e969190614aa6565b9050613eb88f600860009054906101000a90046001600160a01b0316836135fc565b600254613ec59082613495565b6002555b613edd613ed68284614a93565b8e90613495565b9c508615613efa57600954613ef2908361306b565b600955613f0b565b600a54613f07908361306b565b600a555b613f168f30846135fc565b601e54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015613f83575060408051601f3d908101601f19168201909252613f80918101906149f3565b60015b15613fd95760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b613fed8888886135fc565b600d546001600160a01b031663e30443bc89614008816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561404e57600080fd5b505af1158015614062573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905088614083816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140c957600080fd5b505af11580156140dd573d6000803e3d6000fd5b505050505050505050505050565b6000818484111561410f5760405162461bcd60e51b81526004016110529190614534565b50600061411c8486614b50565b95945050505050565b6001600160a01b03821660009081526020805260409020805460ff191682158015919091179091556141b157600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561419857600080fd5b505af11580156141ac573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600854600090600160a81b900460ff1661420f5761420a82611b81565b6112b4565b6001600160a01b0382166000908152602160205260409020546112b4906064906110a59061423d908361306b565b61321a86611b81565b600081836142675760405162461bcd60e51b81526004016110529190614534565b50600061411c8486614aa6565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106142a9576142a9614971565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432691906149a0565b8160018151811061433957614339614971565b6001600160a01b03928316602091820292909201015260065461435f91309116846134d7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614398908590600090869030904290600401614b63565b600060405180830381600087803b1580156143b257600080fd5b505af1158015612bc8573d6000803e3d6000fd5b60006143d3826002613153565b905060006143e18383613495565b9050476143ed83614274565b60006143f94783613495565b9050614405838261444d565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546144659030906001600160a01b0316846134d7565b6006546001600160a01b031663f305d71982308560008061448e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156144f6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174091906149f3565b60006020828403121561452d57600080fd5b5035919050565b600060208083528351808285015260005b8181101561456157858101830151858201604001528201614545565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461184d57600080fd5b801515811461184d57600080fd5b600080604083850312156145b857600080fd5b82356145c381614582565b915060208301356145d381614597565b809150509250929050565b600080604083850312156145f157600080fd5b82356145fc81614582565b946020939093013593505050565b6000806040838503121561461d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561466b5761466b61462c565b604052919050565b600067ffffffffffffffff82111561468d5761468d61462c565b5060051b60200190565b600082601f8301126146a857600080fd5b813560206146bd6146b883614673565b614642565b82815260059290921b840181019181810190868411156146dc57600080fd5b8286015b848110156146f757803583529183019183016146e0565b509695505050505050565b6000806040838503121561471557600080fd5b823567ffffffffffffffff8082111561472d57600080fd5b818501915085601f83011261474157600080fd5b813560206147516146b883614673565b82815260059290921b8401810191818101908984111561477057600080fd5b948201945b8386101561479757853561478881614582565b82529482019490820190614775565b965050860135925050808211156147ad57600080fd5b506147ba85828601614697565b9150509250929050565b6000806000606084860312156147d957600080fd5b83356147e481614582565b925060208401356147f481614582565b929592945050506040919091013590565b60006020828403121561481757600080fd5b81356130ca81614597565b60006020828403121561483457600080fd5b81356130ca81614582565b6000806000806000806000806000806101408b8d03121561485f57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080604083850312156148ba57600080fd5b82356148c581614582565b915060208301356145d381614582565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112b4576112b461490a565b600181811c9082168061494b57607f821691505b60208210810361496b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016149995761499961490a565b5060010190565b6000602082840312156149b257600080fd5b81516130ca81614582565b6000602082840312156149cf57600080fd5b5051919050565b6000602082840312156149e857600080fd5b81516130ca81614597565b600080600060608486031215614a0857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215614a3a57600080fd5b8651614a4581614582565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b600060ff821660ff8103614a8a57614a8a61490a565b60010192915050565b808201808211156112b4576112b461490a565b600082614ac357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156112b4576112b461490a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614bb35784516001600160a01b031683529383019391830191600101614b8e565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a655a9b481ddc39c01fb785bc213da397d3cb917f36c541cda8e9ab471069de464736f6c6343000811003360806040526012805460ff60b01b191690553480156200001e57600080fd5b50604051620030b2380380620030b2833981016040819052620000419162000239565b81818181600362000053838262000373565b50600462000062828262000373565b50505050506000620000796200015760201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d5838262000373565b506014620000e4828262000373565b505060128054601680546001600160a01b03199081166001600160a01b039889161790915568056bc75e2d6310000060188190556019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b1916909155506200043f565b3390565b6001600160a01b03811681146200017157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019c57600080fd5b81516001600160401b0380821115620001b957620001b962000174565b604051601f8301601f19908116603f01168101908282118183101715620001e457620001e462000174565b816040528381526020925086838588010111156200020157600080fd5b600091505b8382101562000225578582018301518183018401529082019062000206565b600093810190920192909252949350505050565b600080600080600060a086880312156200025257600080fd5b85516200025f816200015b565b602087015190955062000272816200015b565b604087015190945062000285816200015b565b60608701519093506001600160401b0380821115620002a357600080fd5b620002b189838a016200018a565b93506080880151915080821115620002c857600080fd5b50620002d7888289016200018a565b9150509295509295909350565b600181811c90821680620002f957607f821691505b6020821081036200031a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036e57600081815260208120601f850160051c81016020861015620003495750805b601f850160051c820191505b818110156200036a5782815560010162000355565b5050505b505050565b81516001600160401b038111156200038f576200038f62000174565b620003a781620003a08454620002e4565b8462000320565b602080601f831160018114620003df5760008415620003c65750858301515b600019600386901b1c1916600185901b1785556200036a565b600085815260208120601f198616915b828110156200041057888601518255948401946001909101908401620003ef565b50858210156200042f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c63806200044f6000396000f3fe60806040526004361061031e5760003560e01c80636d48467b116101ab578063a8b9d240116100f7578063d8032ed311610095578063e7841ec01161006f578063e7841ec0146109ed578063f2fde38b14610a02578063fbcbc0f114610a22578063ffb2c47914610a4257600080fd5b8063d8032ed314610967578063dd62ed3e14610987578063e30443bc146109cd57600080fd5b8063adad13fd116100d1578063adad13fd146108e7578063b22f8a0414610907578063ba079d4914610927578063bc4c4b371461094757600080fd5b8063a8b9d24014610871578063a9059cbb14610891578063aafd847a146108b157600080fd5b80638da5cb5b116101645780639c3372ea1161013e5780639c3372ea146107ef5780639eec101e1461080f578063a423406914610830578063a457c2d71461085157600080fd5b80638da5cb5b1461079c57806391b89fba146107ba57806395d89b41146107da57600080fd5b80636d48467b146106db57806370a08231146106fb578063715018a61461073157806374c13fda1461074657806385a6b3ae146107665780638bc1d6391461077c57600080fd5b8063313ce5671161026a5780634e7b827f116102235780635ebf4db9116101fd5780635ebf4db91461065657806365b8dbc0146106765780636a474002146106965780636b69163b146106ab57600080fd5b80634e7b827f146105af5780635183d6fd146105df5780635a84c5eb1461063657600080fd5b8063313ce567146104f257806331e79db01461050e5780633599bb171461052e578063395093511461054e57806340ffdd801461056e578063418089041461058e57600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461047e57806325cd35981461049e57806327ce0147146104bc5780633009a609146104dc57600080fd5b806318160ddd1461040c5780631d4ff89a14610421578063226cfa3d1461045157600080fd5b806303c833021461033257806306fdde031461033a5780630928847114610365578063095ea7b31461038557806309bbedde146103b55780631694505e146103d457600080fd5b3661032d5761032b610a7d565b005b600080fd5b61032b610a7d565b34801561034657600080fd5b5061034f610b10565b60405161035c91906127df565b60405180910390f35b34801561037157600080fd5b5061032b610380366004612845565b610ba2565b34801561039157600080fd5b506103a56103a0366004612862565b610bf6565b604051901515815260200161035c565b3480156103c157600080fd5b50600a545b60405190815260200161035c565b3480156103e057600080fd5b506015546103f4906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561041857600080fd5b506002546103c6565b34801561042d57600080fd5b506103a561043c366004612845565b60116020526000908152604090205460ff1681565b34801561045d57600080fd5b506103c661046c366004612845565b60176020526000908152604090205481565b34801561048a57600080fd5b506103a561049936600461288e565b610c0d565b3480156104aa57600080fd5b506012546001600160a01b03166103f4565b3480156104c857600080fd5b506103c66104d7366004612845565b610c76565b3480156104e857600080fd5b506103c6600e5481565b3480156104fe57600080fd5b506040516012815260200161035c565b34801561051a57600080fd5b5061032b610529366004612845565b610cd2565b34801561053a57600080fd5b5061032b6105493660046128dd565b610d6c565b34801561055a57600080fd5b506103a5610569366004612862565b610e0d565b34801561057a57600080fd5b5061032b6105893660046128dd565b610e43565b34801561059a57600080fd5b506012546103a590600160a81b900460ff1681565b3480156105bb57600080fd5b506103a56105ca366004612845565b600f6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa3660046128fa565b610ed9565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161035c565b34801561064257600080fd5b5061032b6106513660046128fa565b610f39565b34801561066257600080fd5b5061032b6106713660046128fa565b610f7b565b34801561068257600080fd5b5061032b610691366004612845565b610fbd565b3480156106a257600080fd5b5061032b611009565b3480156106b757600080fd5b506103a56106c6366004612845565b60106020526000908152604090205460ff1681565b3480156106e757600080fd5b506103a56106f6366004612845565b6110c3565b34801561070757600080fd5b506103c6610716366004612845565b6001600160a01b031660009081526020819052604090205490565b34801561073d57600080fd5b5061032b61110f565b34801561075257600080fd5b506012546103f4906001600160a01b031681565b34801561077257600080fd5b506103c660085481565b34801561078857600080fd5b5061032b610797366004612913565b611183565b3480156107a857600080fd5b506009546001600160a01b03166103f4565b3480156107c657600080fd5b506103c66107d5366004612845565b6111d8565b3480156107e657600080fd5b5061034f6111e3565b3480156107fb57600080fd5b5061032b61080a3660046128dd565b6111f2565b34801561081b57600080fd5b506012546103a590600160a01b900460ff1681565b34801561083c57600080fd5b506012546103a590600160b01b900460ff1681565b34801561085d57600080fd5b506103a561086c366004612862565b611288565b34801561087d57600080fd5b506103c661088c366004612845565b6112d7565b34801561089d57600080fd5b506103a56108ac366004612862565b611303565b3480156108bd57600080fd5b506103c66108cc366004612845565b6001600160a01b031660009081526007602052604090205490565b3480156108f357600080fd5b506016546103f4906001600160a01b031681565b34801561091357600080fd5b5061032b610922366004612913565b611310565b34801561093357600080fd5b506103a5610942366004612845565b611365565b34801561095357600080fd5b506103a5610962366004612913565b6113b1565b34801561097357600080fd5b5061032b610982366004612845565b611532565b34801561099357600080fd5b506103c66109a236600461294c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d957600080fd5b5061032b6109e8366004612862565b61157e565b3480156109f957600080fd5b50600e546103c6565b348015610a0e57600080fd5b5061032b610a1d366004612845565b611616565b348015610a2e57600080fd5b506105ff610a3d366004612845565b611701565b348015610a4e57600080fd5b50610a62610a5d3660046128fa565b6117b0565b6040805193845260208401929092529082015260600161035c565b6000610a8860025490565b11610a9257600080fd5b3415610b0e57610ac5610aa460025490565b610ab234600160801b6118d6565b610abc9190612990565b6005549061195f565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b0a903461195f565b6008555b565b606060138054610b1f906129b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b906129b2565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610bcc906129ec565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c033384846119be565b5060015b92915050565b6000610c1a848484611ae2565b610c6c8433610c6785604051806060016040528060288152602001612be1602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b4d565b6119be565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610cc892610cc392610cbd91610cb891906118d6565b611b87565b90611b97565b611bd5565b610c079190612990565b6009546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610bcc906129ec565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d2a908290611be8565b610d35600a82611c47565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610d965760405162461bcd60e51b8152600401610bcc906129ec565b801515601260169054906101000a900460ff16151503610db557600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e0290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c03918590610c67908661195f565b6009546001600160a01b03163314610e6d5760405162461bcd60e51b8152600401610bcc906129ec565b801515601260159054906101000a900460ff16151503610e8c57600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e0290831515815260200190565b600080600080600080610eeb600a5490565b8710610f0a575060009450600019935083925084915081905080610f30565b6000610f17600a89611d82565b9050610f2281611701565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f635760405162461bcd60e51b8152600401610bcc906129ec565b610f7581670de0b6b3a7640000612a21565b60185550565b6009546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610bcc906129ec565b610fb781670de0b6b3a7640000612a21565b60195550565b6009546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610bcc906129ec565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152607960248201527f4269744275726e5265666c6563745f4469766964656e645f547261636b65723a60448201527f2077697468647261774469766964656e642064697361626c65642e205573652060648201527f7468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e60848201527f204269744275726e5265666c65637420636f6e74726163742e0000000000000060a482015260c401610bcc565b6009546000906001600160a01b031633146110f05760405162461bcd60e51b8152600401610bcc906129ec565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b031633146111395760405162461bcd60e51b8152600401610bcc906129ec565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610bcc906129ec565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c07826112d7565b606060148054610b1f906129b2565b6009546001600160a01b0316331461121c5760405162461bcd60e51b8152600401610bcc906129ec565b801515601260149054906101000a900460ff1615150361123b57600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e0290831515815260200190565b6000610c033384610c6785604051806060016040528060258152602001612c09602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b4d565b6001600160a01b038116600090815260076020526040812054610c07906112fd84610c76565b90611db5565b6000610c03338484611ae2565b6009546001600160a01b0316331461133a5760405162461bcd60e51b8152600401610bcc906129ec565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113925760405162461bcd60e51b8152600401610bcc906129ec565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113de5760405162461bcd60e51b8152600401610bcc906129ec565b601254600160b01b900460ff16156113f857506000610c07565b6001600160a01b03831660009081526011602052604090205460ff1682801561141e5750805b80156114345750601254600160a81b900460ff16155b15611443576000915050610c07565b6000816114585761145385611df7565b611461565b611461856120b0565b90508015611527576001600160a01b038516600090815260176020526040902042905581156114d557831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c836040516114c891815260200190565b60405180910390a361151c565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf0928360405161151391815260200190565b60405180910390a35b600192505050610c07565b506000949350505050565b6009546001600160a01b0316331461155c5760405162461bcd60e51b8152600401610bcc906129ec565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031633146115a85760405162461bcd60e51b8152600401610bcc906129ec565b6001600160a01b0382166000908152600f602052604090205460ff166115e8576019548110156115ec576115dd600a83611c47565b6115e8826000611be8565b5050565b6115f68282611be8565b601854811061160b576115e8600a8383612423565b6115e8600a83611c47565b6009546001600160a01b031633146116405760405162461bcd60e51b8152600401610bcc906129ec565b6001600160a01b0381166116a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b80600080808080611713600a876124cc565b945060001993506000851261177557600e5485111561174157600e5461173a908690612517565b9350611775565b600e54600a5460009110611756576000611765565b600e54600a5461176591611db5565b90506117718682611b97565b9450505b61177e866112d7565b925061178986610c76565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117d05750601254600160b01b900460ff165b156117e6575050600e54600092508291506118cf565b600e546000805a90506000805b898410801561180157508582105b156118be578461181081612a38565b95505085851061181f57600094505b6000600a600001868154811061183757611837612a51565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff16611884576118718160016113b1565b15611884578161188081612a38565b9250505b8261188e81612a38565b93505060005a9050808511156118b5576118b26118ab8683611db5565b879061195f565b95505b93506117f39050565b600e85905590975095509193505050505b9193909250565b6000826000036118e857506000610c07565b60006118f48385612a21565b9050826119018583612990565b146119585760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcc565b9392505050565b60008061196c8385612a67565b9050838110156119585760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcc565b6001600160a01b038316611a205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bcc565b6001600160a01b038216611a815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bcc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603560248201527f4269744275726e5265666c6563745f4469766964656e645f547261636b65723a60448201527408139bc81d1c985b9cd9995c9cc8185b1b1bddd959605a1b6064820152608401610bcc565b505050565b60008184841115611b715760405162461bcd60e51b8152600401610bcc91906127df565b506000611b7e8486612a7a565b95945050505050565b60008181811215610c0757600080fd5b600080611ba48385612a8d565b905060008312158015611bb75750838112155b80611bcc5750600083128015611bcc57508381125b61195857600080fd5b600080821215611be457600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611c27576000611c158383611db5565b9050611c218482612554565b50505050565b80821015611b48576000611c3b8284611db5565b9050611c2184826125b8565b6001600160a01b038116600090815260038301602052604090205460ff16611c6d575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611cb791612a7a565b90506000846000018281548110611cd057611cd0612a51565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611d1f57611d1f612a51565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d5957611d59612ab5565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d9957611d99612a51565b6000918252602090912001546001600160a01b03169392505050565b600061195883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b4d565b600080611e03836112d7565b905080156120a7576001600160a01b038316600090815260076020526040902054611e2e908261195f565b6001600160a01b03808516600090815260076020526040812092909255601254169081611eb3576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611ea3576040519150601f19603f3d011682016040523d82523d6000602084013e611ea8565b606091505b50508091505061200d565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612acb565b81600081518110611f5457611f54612a51565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f8857611f88612a51565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611fce9060009086908c904290600401612b2c565b6000604051808303818588803b158015611fe757600080fd5b505af193505050508015611ff9575060015b612006576000915061200b565b600191505b505b8061205b576001600160a01b0385166000908152600760205260409020546120359084611db5565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161209691815260200190565b60405180910390a250909392505050565b50600092915050565b6000806120bc836112d7565b905080156120a7576001600160a01b0383166000908152600760205260408120546120e7908361195f565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561216f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121939190612acb565b816000815181106121a6576121a6612a51565b6001600160a01b0392831660209182029290920101526016548251911690829060019081106121d7576121d7612a51565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122559190612b61565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061228f90600090879030904290600401612b2c565b6000604051808303818588803b1580156122a857600080fd5b505af1935050505080156122ba575060015b6122c757600092506123ca565b6016546040516370a0823160e01b815230600482015260009161233a9184916001600160a01b0316906370a0823190602401602060405180830381865afa158015612316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fd9190612b61565b905080156123c35760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd9190612b7a565b506123c8565b600093505b505b82612419576001600160a01b0386166000908152600760205260409020546123f29085611db5565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612468576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124f75750600019610c07565b506001600160a01b03166000908152600291909101602052604090205490565b6000806125248385612b97565b9050600083121580156125375750838113155b80611bcc5750600083128015611bcc575083811361195857600080fd5b61255e82826125fc565b612598612579610cb8836005546118d690919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490612517565b6001600160a01b0390921660009081526006602052604090209190915550565b6125c282826126db565b6125986125dd610cb8836005546118d690919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b97565b6001600160a01b0382166126525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bcc565b60025461265f908261195f565b6002556001600160a01b038216600090815260208190526040902054612685908261195f565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b03821661273b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bcc565b61277881604051806060016040528060228152602001612bbf602291396001600160a01b0385166000908152602081905260409020549190611b4d565b6001600160a01b03831660009081526020819052604090205560025461279e9082611db5565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016126cf565b600060208083528351808285015260005b8181101561280c578581018301518582016040015282016127f0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461284257600080fd5b50565b60006020828403121561285757600080fd5b81356119588161282d565b6000806040838503121561287557600080fd5b82356128808161282d565b946020939093013593505050565b6000806000606084860312156128a357600080fd5b83356128ae8161282d565b925060208401356128be8161282d565b929592945050506040919091013590565b801515811461284257600080fd5b6000602082840312156128ef57600080fd5b8135611958816128cf565b60006020828403121561290c57600080fd5b5035919050565b6000806040838503121561292657600080fd5b82356129318161282d565b91506020830135612941816128cf565b809150509250929050565b6000806040838503121561295f57600080fd5b823561296a8161282d565b915060208301356129418161282d565b634e487b7160e01b600052601160045260246000fd5b6000826129ad57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129c657607f821691505b6020821081036129e657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c0757610c0761297a565b600060018201612a4a57612a4a61297a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c0757610c0761297a565b81810381811115610c0757610c0761297a565b8082018281126000831280158216821582161715612aad57612aad61297a565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612add57600080fd5b81516119588161282d565b600081518084526020808501945080840160005b83811015612b215781516001600160a01b031687529582019590820190600101612afc565b509495945050505050565b848152608060208201526000612b456080830186612ae8565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b7357600080fd5b5051919050565b600060208284031215612b8c57600080fd5b8151611958816128cf565b8181036000831280158383131683831282161715612bb757612bb761297a565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220deca393151f0e064ce9441d95c13e09653ef269955d4adbdd9a30440c040b96e64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104e55760003560e01c80637fdde05c11610281578063aa4704f31161015a578063d8032ed3116100cc578063f27fd25411610085578063f27fd25414610f7c578063f2fde38b14610f9c578063f5d3c79a14610fbc578063f637434214610fdc578063f8b45b0514610ff2578063fc6b151c1461100857600080fd5b8063d8032ed314610ea8578063dd62ed3e14610ec8578063e2f4560514610f0e578063e7841ec014610f24578063f11a24d314610f39578063f1c0ddff14610f4f57600080fd5b8063b74e3b111161011e578063b74e3b1114610df2578063ba079d4914610e12578063bb4c9f0b14610e32578063bb8d513114610e52578063d07a091c14610e68578063d5e3725114610e8857600080fd5b8063aa4704f314610ce8578063acb2ad6f14610d40578063ad56c13c14610d56578063b494298814610dad578063b62496f514610dc357600080fd5b80639a7a23d6116101f35780639ec1037e116101b75780639ec1037e14610c32578063a0d82dc514610c52578063a457c2d714610c68578063a694fc3a14610c88578063a8b9d24014610ca8578063a9059cbb14610cc857600080fd5b80639a7a23d614610ba65780639c1b8af514610bc65780639c3372ea14610bdc5780639c3b4fdc14610bfc5780639cefc1da14610c1257600080fd5b80638a8c523c116102455780638a8c523c14610b125780638ca2923a14610b275780638da5cb5b14610b3d5780638ea5220f14610b5b57806395451c2914610b7b57806395d89b4114610b9157600080fd5b80637fdde05c14610a72578063837ae2d014610a925780638577a6d514610ab2578063868730c714610ad2578063871c128d14610af257600080fd5b806349bd5a5e116103be57806364b0f65311610330578063715018a6116102e9578063715018a6146109ba57806372d8edf4146109cf57806375829def146109ef57806375f0a87414610a0f57806377a3b60914610a2f5780637d32f34214610a4557600080fd5b806364b0f65314610905578063679ca6e91461091a5780636843cd841461093a5780636d48467b1461095a578063700bb1911461097a57806370a082311461099a57600080fd5b80634fbee193116103825780634fbee193146108405780635124f874146108795780635a84c5eb1461088f5780635c234bb6146108af5780635ebf4db9146108c55780635eee4bae146108e557600080fd5b806349bd5a5e146107b65780634a62bb65146107d65780634a74bb02146107f05780634ada218b1461080a5780634e71d92d1461082b57600080fd5b80632307b44111610457578063313ce5671161041b578063313ce567146106f75780633599bb171461071357806339509351146107335780633f407b841461075357806340ffdd8014610769578063435c89e41461078957600080fd5b80632307b4411461066d57806323b872dd1461068d57806325cd3598146106ad5780632c1f5216146106c257806330bb4cff146106e257600080fd5b8063095ea7b3116104a9578063095ea7b3146105b25780630ef35b7e146105e25780631694505e1461060257806318160ddd146106225780631d7b1fb4146106415780631fa705311461065757600080fd5b806303fd2a45146104f157806305ca5f081461052e57806306fdde031461055057806308dfe8a514610572578063092316021461059257600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b50600854610511906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561053a57600080fd5b5061054e61054936600461451b565b611028565b005b34801561055c57600080fd5b506105656110f9565b6040516105259190614534565b34801561057e57600080fd5b5061054e61058d3660046145a5565b61118b565b34801561059e57600080fd5b5061054e6105ad36600461451b565b611214565b3480156105be57600080fd5b506105d26105cd3660046145de565b6112a3565b6040519015158152602001610525565b3480156105ee57600080fd5b5061054e6105fd36600461460a565b6112ba565b34801561060e57600080fd5b50600654610511906001600160a01b031681565b34801561062e57600080fd5b506002545b604051908152602001610525565b34801561064d57600080fd5b50610633602a5481565b34801561066357600080fd5b50610633600a5481565b34801561067957600080fd5b5061054e610688366004614702565b61139f565b34801561069957600080fd5b506105d26106a83660046147c4565b611570565b3480156106b957600080fd5b506105116115d9565b3480156106ce57600080fd5b50600d54610511906001600160a01b031681565b3480156106ee57600080fd5b5061063361164c565b34801561070357600080fd5b5060405160128152602001610525565b34801561071f57600080fd5b5061054e61072e366004614805565b6116ba565b34801561073f57600080fd5b506105d261074e3660046145de565b611747565b34801561075f57600080fd5b5061063360095481565b34801561077557600080fd5b5061054e610784366004614805565b61177d565b34801561079557600080fd5b506106336107a436600461451b565b60236020526000908152604090205481565b3480156107c257600080fd5b50600754610511906001600160a01b031681565b3480156107e257600080fd5b506025546105d29060ff1681565b3480156107fc57600080fd5b50601d546105d29060ff1681565b34801561081657600080fd5b506008546105d290600160b01b900460ff1681565b34801561083757600080fd5b5061054e6117d8565b34801561084c57600080fd5b506105d261085b366004614822565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561088557600080fd5b5061063360175481565b34801561089b57600080fd5b5061054e6108aa36600461451b565b611850565b3480156108bb57600080fd5b5061063360165481565b3480156108d157600080fd5b5061054e6108e036600461451b565b6118ab565b3480156108f157600080fd5b5061054e61090036600461451b565b611906565b34801561091157600080fd5b50610633611948565b34801561092657600080fd5b5061054e610935366004614805565b611992565b34801561094657600080fd5b50610633610955366004614822565b6119cf565b34801561096657600080fd5b506105d2610975366004614822565b611a3f565b34801561098657600080fd5b5061054e61099536600461451b565b611aaf565b3480156109a657600080fd5b506106336109b5366004614822565b611b81565b3480156109c657600080fd5b5061054e611b9c565b3480156109db57600080fd5b5061054e6109ea366004614822565b611c10565b3480156109fb57600080fd5b5061054e610a0a366004614822565b611c6c565b348015610a1b57600080fd5b50600e54610511906001600160a01b031681565b348015610a3b57600080fd5b5061063360195481565b348015610a5157600080fd5b50610633610a60366004614822565b60226020526000908152604090205481565b348015610a7e57600080fd5b5061054e610a8d3660046145a5565b611d21565b348015610a9e57600080fd5b5061054e610aad36600461483f565b611d76565b348015610abe57600080fd5b5061054e610acd36600461451b565b611f20565b348015610ade57600080fd5b5061054e610aed366004614805565b611fd7565b348015610afe57600080fd5b5061054e610b0d36600461451b565b61200f565b348015610b1e57600080fd5b5061054e61208b565b348015610b3357600080fd5b5061063360135481565b348015610b4957600080fd5b506005546001600160a01b0316610511565b348015610b6757600080fd5b50600f54610511906001600160a01b031681565b348015610b8757600080fd5b5061063360145481565b348015610b9d57600080fd5b5061056561210e565b348015610bb257600080fd5b5061054e610bc13660046145a5565b61211d565b348015610bd257600080fd5b50610633601e5481565b348015610be857600080fd5b5061054e610bf7366004614805565b612155565b348015610c0857600080fd5b50610633601a5481565b348015610c1e57600080fd5b5061054e610c2d366004614805565b6121b1565b348015610c3e57600080fd5b5061054e610c4d366004614822565b612247565b348015610c5e57600080fd5b50610633601b5481565b348015610c7457600080fd5b506105d2610c833660046145de565b61231e565b348015610c9457600080fd5b5061054e610ca336600461451b565b61236d565b348015610cb457600080fd5b50610633610cc3366004614822565b612590565b348015610cd457600080fd5b506105d2610ce33660046145de565b6125c3565b348015610cf457600080fd5b50610d2b610d03366004614822565b6001600160a01b03166000908152602260209081526040808320546021909252909120549091565b60408051928352602083019190915201610525565b348015610d4c57600080fd5b50610633601c5481565b348015610d6257600080fd5b50610d76610d71366004614822565b6125d0565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610525565b348015610db957600080fd5b5061063360295481565b348015610dcf57600080fd5b506105d2610dde366004614822565b602080526000908152604090205460ff1681565b348015610dfe57600080fd5b5061054e610e0d36600461451b565b612660565b348015610e1e57600080fd5b506105d2610e2d366004614822565b6126f0565b348015610e3e57600080fd5b5061054e610e4d366004614702565b612723565b348015610e5e57600080fd5b5061063360125481565b348015610e7457600080fd5b5061054e610e83366004614822565b612bd0565b348015610e9457600080fd5b5061054e610ea3366004614805565b612cc5565b348015610eb457600080fd5b5061054e610ec3366004614822565b612d47565b348015610ed457600080fd5b50610633610ee33660046148a7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610f1a57600080fd5b5061063360115481565b348015610f3057600080fd5b50610633612e0a565b348015610f4557600080fd5b5061063360185481565b348015610f5b57600080fd5b50610633610f6a366004614822565b60216020526000908152604090205481565b348015610f8857600080fd5b50610d76610f9736600461451b565b612e54565b348015610fa857600080fd5b5061054e610fb7366004614822565b612e92565b348015610fc857600080fd5b5061054e610fd7366004614805565b612f7d565b348015610fe857600080fd5b5061063360155481565b348015610ffe57600080fd5b5061063360105481565b34801561101457600080fd5b5061054e61102336600461451b565b612fb5565b6005546001600160a01b0316331461105b5760405162461bcd60e51b8152600401611052906148d5565b60405180910390fd5b61106d81670de0b6b3a7640000614920565b90506000611088600954600a5461306b90919063ffffffff16565b905060006110ab826110a5600a54866130d190919063ffffffff16565b90613153565b905060006110c8836110a5600954876130d190919063ffffffff16565b90506110d384613195565b600a546110e09083613495565b600a556009546110f09082613495565b60095550505050565b60606003805461110890614937565b80601f016020809104026020016040519081016040528092919081815260200182805461113490614937565b80156111815780601f1061115657610100808354040283529160200191611181565b820191906000526020600020905b81548152906001019060200180831161116457829003601f168201915b5050505050905090565b6005546001600160a01b031633146111b55760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461123e5760405162461bcd60e51b8152600401611052906148d5565b600581101561128f5760405162461bcd60e51b815260206004820152601860248201527f63616e206e65766572206265207365742062656c6f77203500000000000000006044820152606401611052565b61129d81633b9aca00614920565b60265550565b60006112b03384846134d7565b5060015b92915050565b6005546001600160a01b031633146112e45760405162461bcd60e51b8152600401611052906148d5565b6000828152602360205260409020548190036112ff57600080fd5b60648111156113505760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e6720626f6e75732063616e2774206578636565642031303000006044820152606401611052565b60008281526023602090815260409182902083905581518481529081018390527f065c0eec5c5d031ee25323575d53db5536226ab058b74d8bdb03c517dd4f605d910160405180910390a15050565b6005546001600160a01b031633146113c95760405162461bcd60e51b8152600401611052906148d5565b805182511461141a5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401611052565b60c8825111156114775760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401611052565b60005b825181101561156b57600083828151811061149757611497614971565b6020026020010151905060008383815181106114b5576114b5614971565b6020026020010151670de0b6b3a76400006114d09190614920565b90506114dd3383836135fc565b600d546001600160a01b031663e30443bc836114f881611b81565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050505050808061156390614987565b91505061147a565b505050565b600061157d848484613705565b6115cf84336115ca85604051806060016040528060288152602001614bfb602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906140eb565b6134d7565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa158015611623573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906149a0565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164791906149bd565b6005546001600160a01b031633146116e45760405162461bcd60e51b8152600401611052906148d5565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561172c57600080fd5b505af1158015611740573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916112b09185906115ca908661306b565b6005546001600160a01b031633146117a75760405162461bcd60e51b8152600401611052906148d5565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd8090602401611712565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d91906149d6565b50565b6005546001600160a01b0316331461187a5760405162461bcd60e51b8152600401611052906148d5565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb90602401611712565b6005546001600160a01b031633146118d55760405162461bcd60e51b8152600401611052906148d5565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db990602401611712565b6005546001600160a01b031633146119305760405162461bcd60e51b8152600401611052906148d5565b61194281670de0b6b3a7640000614920565b60115550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b6005546001600160a01b031633146119bc5760405162461bcd60e51b8152600401611052906148d5565b6025805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906149bd565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906149d6565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2691906149f3565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611bc65760405162461bcd60e51b8152600401611052906148d5565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611c3a5760405162461bcd60e51b8152600401611052906148d5565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401611712565b6005546001600160a01b03163314611c965760405162461bcd60e51b8152600401611052906148d5565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611cdd57600080fd5b505af1158015611cf1573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601f60205260409020805460ff191660011790555061184d81612e92565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611da05760405162461bcd60e51b8152600401611052906148d5565b60168a90556017889055601886905560198490556013899055601487905560158590556012839055601a829055601b819055611de881611de28981878a61306b565b9061306b565b600b81905550611e11601a54611de2601754611de260185460195461306b90919063ffffffff16565b600c55600b54600f10801590611e2a5750600f600c5411155b611e875760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b6064820152608401611052565b601354601454601554601254601654601754601854601954601a54601b54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611f4a5760405162461bcd60e51b8152600401611052906148d5565b6005811115611f9b5760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f74206578636565642035250000006044820152606401611052565b601c8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d63990604401611712565b6005546001600160a01b031633146120395760405162461bcd60e51b8152600401611052906148d5565b62030d40811015801561204f5750620f42408111155b61205857600080fd5b601e5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601e55565b6005546001600160a01b031633146120b55760405162461bcd60e51b8152600401611052906148d5565b600854600160b01b900460ff16156120cc57600080fd5b6008805460ff60b01b1916600160b01b179055436029556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b60606004805461110890614937565b6005546001600160a01b031633146121475760405162461bcd60e51b8152600401611052906148d5565b6121518282614125565b5050565b6005546001600160a01b0316331461217f5760405162461bcd60e51b8152600401611052906148d5565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea90602401611712565b6005546001600160a01b031633146121db5760405162461bcd60e51b8152600401611052906148d5565b801515600860159054906101000a900460ff161515036121fa57600080fd5b60088054821515600160a81b0260ff60a81b199091161790556040517f0d240c24014ec8c204fc1bdcc286f7d01fd2ab6a07c558a9b2d3f12904323a8790611fcc90831515815260200190565b6005546001600160a01b031633146122715760405162461bcd60e51b8152600401611052906148d5565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050826122ed816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611712565b60006112b033846115ca85604051806060016040528060258152602001614c23602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906140eb565b600854600160a81b900460ff166123bf5760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401611052565b600081815260236020526040812054900361241c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207374616b696e67206475726174696f6e00000000000000006044820152606401611052565b612426428261306b565b336000908152602260205260409020541061248f5760405162461bcd60e51b8152602060048201526024808201527f616c7265616479207374616b656420666f722061206c6f6e67657220647572616044820152633a34b7b760e11b6064820152608401611052565b6000818152602360209081526040808320543384526021909252909120556124b7428261306b565b33600081815260226020526040902091909155600d546001600160a01b03169063e30443bc906124e6816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561252c57600080fd5b505af1158015612540573d6000803e3d6000fd5b5050505061254b3390565b6001600160a01b03167f13dd201d7da4f9b31a9064a09abc1a6ce420dacd837a77abafaec5bd9d28d2c88260405161258591815260200190565b60405180910390a250565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016119fe565b60006112b0338484613705565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264c9190614a21565b949c939b5091995097509550909350915050565b6005546001600160a01b0316331461268a5760405162461bcd60e51b8152600401611052906148d5565b61012c8111156126eb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401611052565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d4990602401611a6e565b6005546001600160a01b0316331461274d5760405162461bcd60e51b8152600401611052906148d5565b80518251146127b25760405162461bcd60e51b815260206004820152602b60248201527f436f6e7472696275746f727320616e642062616c616e636573206d757374206260448201526a652073616d652073697a6560a81b6064820152608401611052565b60c8825111156128135760405162461bcd60e51b815260206004820152602660248201527f436f6e7472696275746f72206c697374206c656e677468206d7573742062652060448201526503c3d203230360d41b6064820152608401611052565b6000805b82518160ff16101561286657612852838260ff168151811061283b5761283b614971565b60200260200101518361306b90919063ffffffff16565b91508061285e81614a74565b915050612817565b508061287133611b81565b10156128d45760405162461bcd60e51b815260206004820152602c60248201527f4163636f756e742062616c616e6365206d757374206265203e3d2073756d206f60448201526b033103130b630b731b2b997160a51b6064820152608401611052565b3360009081526001602090815260408083203084529091529020548111156129565760405162461bcd60e51b815260206004820152602f60248201527f436f6e747261637420616c6c6f77616e6365206d757374206265203e3d20737560448201526e0369037b3103130b630b731b2b9971608d1b6064820152608401611052565b60008060005b85518160ff161015612bc857858160ff168151811061297d5761297d614971565b6020026020010151925060006001600160a01b0316836001600160a01b0316141580156129b5575061dead6001600160a01b03841614155b612a015760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742061697264726f7020746f2061206465616420616464726573736044820152606401611052565b612a0a83611b81565b9150306001600160a01b03166323b872dd3385888560ff1681518110612a3257612a32614971565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab591906149d6565b50848160ff1681518110612acb57612acb614971565b602002602001015182612ade9190614a93565b612ae784611b81565b14612b4d5760405162461bcd60e51b815260206004820152603060248201527f436f6e7472696275746f72206d75737420726563696576652066756c6c20626160448201526f06c616e6365206f662061697264726f760841b6064820152608401611052565b7f8c32c568416fcf97be35ce5b27844cfddcd63a67a1a602c3595ba5dac38f303a83868360ff1681518110612b8457612b84614971565b6020026020010151604051612bae9291906001600160a01b03929092168252602082015260400190565b60405180910390a180612bc081614a74565b91505061295c565b505050505050565b6005546001600160a01b03163314612bfa5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b0381811660008181526024602081815260408084208054600160ff199182168117909255601f9093529381902080549092169093179055600d54915163031e79db60e41b815260048101939093529216916331e79db09101600060405180830381600087803b158015612c7357600080fd5b505af1158015612c87573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611fcc565b6005546001600160a01b03163314612cef5760405162461bcd60e51b8152600401611052906148d5565b601d5481151560ff909116151503612d0657600080fd5b601d805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611fcc565b6005546001600160a01b03163314612d715760405162461bcd60e51b8152600401611052906148d5565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b158015612db857600080fd5b505af1158015612dcc573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611fcc565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015611696573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161260b565b6005546001600160a01b03163314612ebc5760405162461bcd60e51b8152600401611052906148d5565b6001600160a01b038116612f215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611052565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a0490604401611712565b6005546001600160a01b03163314612fdf5760405162461bcd60e51b8152600401611052906148d5565b612ff181670de0b6b3a7640000614920565b90506107d06002546130039190614aa6565b8110156130665760405162461bcd60e51b815260206004820152602b60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360448201526a207468616e20302e30352560a81b6064820152608401611052565b601055565b6000806130788385614a93565b9050838110156130ca5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611052565b9392505050565b6000826000036130e3575060006112b4565b60006130ef8385614920565b9050826130fc8583614aa6565b146130ca5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611052565b60006130ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614246565b806000036131a05750565b6131a981614274565b60006131c2600954600a5461306b90919063ffffffff16565b60195490915060019081908190600090819081901561322357613220601a546017546019546131f19190614a93565b6131fb9190614a93565b6110a560195461321a8b6110a5600a54476130d190919063ffffffff16565b906130d1565b91505b6012541561326d5761326a601b546014546012546132419190614a93565b61324b9190614a93565b6110a560125461321a8b6110a5600954476130d190919063ffffffff16565b90505b613277828261306b565b925082156132d757600d546040516001600160a01b03909116908490600081818185875af1925050503d80600081146132cc576040519150601f19603f3d011682016040523d82523d6000602084013e6132d1565b606091505b50909650505b60006132f0601a5460175461306b90919063ffffffff16565b601b546014546132ff9161306b565b6133099190614a93565b9050600081156133205761331d4783613153565b90505b60008161333a60145460175461306b90919063ffffffff16565b6133449190614920565b9050600082613360601b54601a5461306b90919063ffffffff16565b61336a9190614920565b905081156133ca57600e546040516001600160a01b03909116908390600081818185875af1925050503d80600081146133bf576040519150601f19603f3d011682016040523d82523d6000602084013e6133c4565b606091505b50909950505b801561342857600f546040516001600160a01b03909116908290600081818185875af1925050503d806000811461341d576040519150601f19603f3d011682016040523d82523d6000602084013e613422565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd0876134548385614a93565b8c801561345e57508b5b801561346757508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b60006130ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140eb565b6001600160a01b0383166135395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611052565b6001600160a01b03821661359a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611052565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166136225760405162461bcd60e51b815260040161105290614ac8565b6001600160a01b0382166136485760405162461bcd60e51b815260040161105290614b0d565b61368581604051806060016040528060268152602001614bd5602691396001600160a01b03861660009081526020819052604090205491906140eb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546136b4908261306b565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016135ef565b6001600160a01b03831661372b5760405162461bcd60e51b815260040161105290614ac8565b6001600160a01b0382166137515760405162461bcd60e51b815260040161105290614b0d565b6001600160a01b038316600090815260246020526040812054819081908190819060ff166137d257600854600160b01b900460ff166137d25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401611052565b856000036137f0576137e6888860006135fc565b5050505050505050565b600854600160a01b900460ff1615801561382357506001600160a01b0388166000908152601f602052604090205460ff16155b801561384857506001600160a01b0387166000908152601f602052604090205460ff16155b15613fe2576001600160a01b03808816600090815260208052604080822054928b16825290205460ff918216911680158015613882575081155b156139c85760006138a360646110a5601c548c6130d190919063ffffffff16565b90506138af8982613495565b98506138bc8b30836135fc565b6138c78b8b8b6135fc565b600d546001600160a01b031663e30443bc8c6138e2816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561392857600080fd5b505af115801561393c573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b61395d816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050505050505050505050565b801580156139df5750600854600160a81b900460ff165b15613a96576001600160a01b038a16600090815260226020526040902054421015613a4c5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320617265207374616b656420616e64206c6f636b6564210000006044820152606401611052565b6001600160a01b038a1660009081526022602052604090205415613a91576001600160a01b038a16600090815260226020908152604080832083905560219091528120555b613cef565b8115613b3f57601254601354601454601554601b54602554949b509299509097509550935060ff1615613a9157602a5432600090815260286020526040902054613ae09190614a93565b421015613b285760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401611052565b326000908152602860205260409020429055613cef565b8015613cef57601954601654601754601854601a54602554949b509299509097509550935060ff1615613c7857602954613b7a906002614a93565b4311613bbd5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401611052565b6026543a1115613c0f5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401611052565b32600090815260276020526040902054439003613c655760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401611052565b3260009081526027602052604090204390555b6000613c838a611b81565b601054909150613c938a83614a93565b1115613ced5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401611052565b505b6000613d1084613cff8888614a93565b613d099190614a93565b899061306b565b90506000613d1d30611b81565b60115490915081108015908190613d4c57506001600160a01b038d16600090815260208052604090205460ff16155b15613e65576008805460ff60a01b1916600160a01b179055601d5460ff168015613d765750600087115b8015613d8457506000600c54115b15613e36576000613da2600954600a5461306b90919063ffffffff16565b90506000613dbf826110a5600a54876130d190919063ffffffff16565b90506000613ddc836110a5600954886130d190919063ffffffff16565b90506000613df9600c546110a58d866130d190919063ffffffff16565b90506000613e16600b546110a58e866130d190919063ffffffff16565b90506000613e24828461306b565b9050613e2f816143c6565b5050505050505b6000613e4130611b81565b9050613e4c81613195565b506000600a8190556009556008805460ff60a01b191690555b6000613e7660646110a58e876130d1565b905060008a15613ec9576064613e8c8e8d6130d1565b613e969190614aa6565b9050613eb88f600860009054906101000a90046001600160a01b0316836135fc565b600254613ec59082613495565b6002555b613edd613ed68284614a93565b8e90613495565b9c508615613efa57600954613ef2908361306b565b600955613f0b565b600a54613f07908361306b565b600a555b613f168f30846135fc565b601e54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015613f83575060408051601f3d908101601f19168201909252613f80918101906149f3565b60015b15613fd95760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b613fed8888886135fc565b600d546001600160a01b031663e30443bc89614008816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561404e57600080fd5b505af1158015614062573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905088614083816141ed565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140c957600080fd5b505af11580156140dd573d6000803e3d6000fd5b505050505050505050505050565b6000818484111561410f5760405162461bcd60e51b81526004016110529190614534565b50600061411c8486614b50565b95945050505050565b6001600160a01b03821660009081526020805260409020805460ff191682158015919091179091556141b157600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561419857600080fd5b505af11580156141ac573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600854600090600160a81b900460ff1661420f5761420a82611b81565b6112b4565b6001600160a01b0382166000908152602160205260409020546112b4906064906110a59061423d908361306b565b61321a86611b81565b600081836142675760405162461bcd60e51b81526004016110529190614534565b50600061411c8486614aa6565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106142a9576142a9614971565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432691906149a0565b8160018151811061433957614339614971565b6001600160a01b03928316602091820292909201015260065461435f91309116846134d7565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790614398908590600090869030904290600401614b63565b600060405180830381600087803b1580156143b257600080fd5b505af1158015612bc8573d6000803e3d6000fd5b60006143d3826002613153565b905060006143e18383613495565b9050476143ed83614274565b60006143f94783613495565b9050614405838261444d565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546144659030906001600160a01b0316846134d7565b6006546001600160a01b031663f305d71982308560008061448e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156144f6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174091906149f3565b60006020828403121561452d57600080fd5b5035919050565b600060208083528351808285015260005b8181101561456157858101830151858201604001528201614545565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461184d57600080fd5b801515811461184d57600080fd5b600080604083850312156145b857600080fd5b82356145c381614582565b915060208301356145d381614597565b809150509250929050565b600080604083850312156145f157600080fd5b82356145fc81614582565b946020939093013593505050565b6000806040838503121561461d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561466b5761466b61462c565b604052919050565b600067ffffffffffffffff82111561468d5761468d61462c565b5060051b60200190565b600082601f8301126146a857600080fd5b813560206146bd6146b883614673565b614642565b82815260059290921b840181019181810190868411156146dc57600080fd5b8286015b848110156146f757803583529183019183016146e0565b509695505050505050565b6000806040838503121561471557600080fd5b823567ffffffffffffffff8082111561472d57600080fd5b818501915085601f83011261474157600080fd5b813560206147516146b883614673565b82815260059290921b8401810191818101908984111561477057600080fd5b948201945b8386101561479757853561478881614582565b82529482019490820190614775565b965050860135925050808211156147ad57600080fd5b506147ba85828601614697565b9150509250929050565b6000806000606084860312156147d957600080fd5b83356147e481614582565b925060208401356147f481614582565b929592945050506040919091013590565b60006020828403121561481757600080fd5b81356130ca81614597565b60006020828403121561483457600080fd5b81356130ca81614582565b6000806000806000806000806000806101408b8d03121561485f57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080604083850312156148ba57600080fd5b82356148c581614582565b915060208301356145d381614582565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112b4576112b461490a565b600181811c9082168061494b57607f821691505b60208210810361496b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016149995761499961490a565b5060010190565b6000602082840312156149b257600080fd5b81516130ca81614582565b6000602082840312156149cf57600080fd5b5051919050565b6000602082840312156149e857600080fd5b81516130ca81614597565b600080600060608486031215614a0857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215614a3a57600080fd5b8651614a4581614582565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b600060ff821660ff8103614a8a57614a8a61490a565b60010192915050565b808201808211156112b4576112b461490a565b600082614ac357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156112b4576112b461490a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614bb35784516001600160a01b031683529383019391830191600101614b8e565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a655a9b481ddc39c01fb785bc213da397d3cb917f36c541cda8e9ab471069de464736f6c63430008110033
Deployed Bytecode Sourcemap
25344:29985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25507:64;;;;;;;;;;-1:-1:-1;25507:64:0;;;;-1:-1:-1;;;;;25507:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;25507:64:0;;;;;;;;50554:443;;;;;;;;;;-1:-1:-1;50554:443:0;;;;;:::i;:::-;;:::i;:::-;;5614:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33244:181::-;;;;;;;;;;-1:-1:-1;33244:181:0;;;;;:::i;:::-;;:::i;34239:164::-;;;;;;;;;;-1:-1:-1;34239:164:0;;;;;:::i;:::-;;:::i;6669:210::-;;;;;;;;;;-1:-1:-1;6669:210:0;;;;;:::i;:::-;;:::i;:::-;;;2091:14:1;;2084:22;2066:41;;2054:2;2039:18;6669:210:0;1926:187:1;32248:326:0;;;;;;;;;;-1:-1:-1;32248:326:0;;;;;:::i;:::-;;:::i;25422:41::-;;;;;;;;;;-1:-1:-1;25422:41:0;;;;-1:-1:-1;;;;;25422:41:0;;;5935:108;;;;;;;;;;-1:-1:-1;6023:12:0;;5935:108;;;2752:25:1;;;2740:2;2725:18;5935:108:0;2606:177:1;27574:33:0;;;;;;;;;;;;;;;;25727:28;;;;;;;;;;;;;;;;54689:637;;;;;;;;;;-1:-1:-1;54689:637:0;;;;;:::i;:::-;;:::i;6887:454::-;;;;;;;;;;-1:-1:-1;6887:454:0;;;;;:::i;:::-;;:::i;49537:114::-;;;;;;;;;;;;;:::i;25837:52::-;;;;;;;;;;-1:-1:-1;25837:52:0;;;;-1:-1:-1;;;;;25837:52:0;;;39253:141;;;;;;;;;;;;;:::i;32110:93::-;;;;;;;;;;-1:-1:-1;32110:93:0;;32193:2;6132:36:1;;6120:2;6105:18;32110:93:0;5990:184:1;41596:119:0;;;;;;;;;;-1:-1:-1;41596:119:0;;;;;:::i;:::-;;:::i;7349:300::-;;;;;;;;;;-1:-1:-1;7349:300:0;;;;;:::i;:::-;;:::i;25691:29::-;;;;;;;;;;;;;;;;36494:121;;;;;;;;;;-1:-1:-1;36494:121:0;;;;;:::i;:::-;;:::i;26961:49::-;;;;;;;;;;-1:-1:-1;26961:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;25472:28;;;;;;;;;;-1:-1:-1;25472:28:0;;;;-1:-1:-1;;;;;25472:28:0;;;27223:33;;;;;;;;;;-1:-1:-1;27223:33:0;;;;;;;;26496:40;;;;;;;;;;-1:-1:-1;26496:40:0;;;;;;;;25648:34;;;;;;;;;;-1:-1:-1;25648:34:0;;;;-1:-1:-1;;;25648:34:0;;;;;;40965:103;;;;;;;;;;;;;:::i;39402:126::-;;;;;;;;;;-1:-1:-1;39402:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39492:28:0;39468:4;39492:28;;;:19;:28;;;;;;;;;39402:126;26288:31;;;;;;;;;;;;;;;;49659:183;;;;;;;;;;-1:-1:-1;49659:183:0;;;;;:::i;:::-;;:::i;26255:26::-;;;;;;;;;;;;;;;;49850:175;;;;;;;;;;-1:-1:-1;49850:175:0;;;;;:::i;:::-;;:::i;35850:120::-;;;;;;;;;;-1:-1:-1;35850:120:0;;;;;:::i;:::-;;:::i;41214:142::-;;;;;;;;;;;;;:::i;34111:99::-;;;;;;;;;;-1:-1:-1;34111:99:0;;;;;:::i;:::-;;:::i;39728:171::-;;;;;;;;;;-1:-1:-1;39728:171:0;;;;;:::i;:::-;;:::i;41723:185::-;;;;;;;;;;-1:-1:-1;41723:185:0;;;;;:::i;:::-;;:::i;40547:410::-;;;;;;;;;;-1:-1:-1;40547:410:0;;;;;:::i;:::-;;:::i;6051:177::-;;;;;;;;;;-1:-1:-1;6051:177:0;;;;;:::i;:::-;;:::i;13028:148::-;;;;;;;;;;;;;:::i;33474:127::-;;;;;;;;;;-1:-1:-1;33474:127:0;;;;;:::i;:::-;;:::i;37160:208::-;;;;;;;;;;-1:-1:-1;37160:208:0;;;;;:::i;:::-;;:::i;25898:38::-;;;;;;;;;;-1:-1:-1;25898:38:0;;;;-1:-1:-1;;;;;25898:38:0;;;26363:28;;;;;;;;;;;;;;;;26903:51;;;;;;;;;;-1:-1:-1;26903:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;33902:170;;;;;;;;;;-1:-1:-1;33902:170:0;;;;;:::i;:::-;;:::i;37618:1429::-;;;;;;;;;;-1:-1:-1;37618:1429:0;;;;;:::i;:::-;;:::i;37376:234::-;;;;;;;;;;-1:-1:-1;37376:234:0;;;;;:::i;:::-;;:::i;41364:109::-;;;;;;;;;;-1:-1:-1;41364:109:0;;;;;:::i;:::-;;:::i;36911:241::-;;;;;;;;;;-1:-1:-1;36911:241:0;;;;;:::i;:::-;;:::i;32675:188::-;;;;;;;;;;;;;:::i;26144:27::-;;;;;;;;;;;;;;;;12814:79;;;;;;;;;;-1:-1:-1;12879:6:0;;-1:-1:-1;;;;;12879:6:0;12814:79;;25943:32;;;;;;;;;;-1:-1:-1;25943:32:0;;;;-1:-1:-1;;;;;25943:32:0;;;26178;;;;;;;;;;;;;;;;5722:104;;;;;;;;;;;;;:::i;36194:163::-;;;;;;;;;;-1:-1:-1;36194:163:0;;;;;:::i;:::-;;:::i;26594:40::-;;;;;;;;;;;;;;;;36365:121;;;;;;;;;;-1:-1:-1;36365:121:0;;;;;:::i;:::-;;:::i;26398:24::-;;;;;;;;;;;;;;;;34970:176;;;;;;;;;;-1:-1:-1;34970:176:0;;;;;:::i;:::-;;:::i;33639:201::-;;;;;;;;;;-1:-1:-1;33639:201:0;;;;;:::i;:::-;;:::i;26429:25::-;;;;;;;;;;;;;;;;7657:400;;;;;;;;;;-1:-1:-1;7657:400:0;;;;;:::i;:::-;;:::i;35154:662::-;;;;;;;;;;-1:-1:-1;35154:662:0;;;;;:::i;:::-;;:::i;39536:184::-;;;;;;;;;;-1:-1:-1;39536:184:0;;;;;:::i;:::-;;:::i;6236:216::-;;;;;;;;;;-1:-1:-1;6236:216:0;;;;;:::i;:::-;;:::i;39055:190::-;;;;;;;;;;-1:-1:-1;39055:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;39188:25:0;39146:7;39188:25;;;:16;:25;;;;;;;;;39215:12;:21;;;;;;;39188:25;;39055:190;;;;;7879:25:1;;;7935:2;7920:18;;7913:34;;;;7852:18;39055:190:0;7705:248:1;26461:26:0;;;;;;;;;;;;;;;;39907:307;;;;;;;;;;-1:-1:-1;39907:307:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8259:32:1;;;8241:51;;8323:2;8308:18;;8301:34;;;;8351:18;;;8344:34;;;;8409:2;8394:18;;8387:34;8452:3;8437:19;;8430:35;8279:3;8481:19;;8474:35;8228:3;8213:19;39907:307:0;7958:557:1;27541:26:0;;;;;;;;;;;;;;;;26757:57;;;;;;;;;;-1:-1:-1;26757:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34490:174;;;;;;;;;;-1:-1:-1;34490:174:0;;;;;:::i;:::-;;:::i;41916:127::-;;;;;;;;;;-1:-1:-1;41916:127:0;;;;;:::i;:::-;;:::i;53008:1673::-;;;;;;;;;;-1:-1:-1;53008:1673:0;;;;;:::i;:::-;;:::i;26108:29::-;;;;;;;;;;;;;;;;32928:268;;;;;;;;;;-1:-1:-1;32928:268:0;;;;;:::i;:::-;;:::i;35978:208::-;;;;;;;;;;-1:-1:-1;35978:208:0;;;;;:::i;:::-;;:::i;49371:158::-;;;;;;;;;;-1:-1:-1;49371:158:0;;;;;:::i;:::-;;:::i;6460:201::-;;;;;;;;;;-1:-1:-1;6460:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6626:18:0;;;6594:7;6626:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6460:201;26068:33;;;;;;;;;;;;;;;;41076:130;;;;;;;;;;;;;:::i;26326:30::-;;;;;;;;;;;;;;;;26849:47;;;;;;;;;;-1:-1:-1;26849:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;40222:317;;;;;;;;;;-1:-1:-1;40222:317:0;;;;;:::i;:::-;;:::i;13184:281::-;;;;;;;;;;-1:-1:-1;13184:281:0;;;;;:::i;:::-;;:::i;41481:107::-;;;;;;;;;;-1:-1:-1;41481:107:0;;;;;:::i;:::-;;:::i;26217:31::-;;;;;;;;;;;;;;;;26037:24;;;;;;;;;;;;;;;;34734:222;;;;;;;;;;-1:-1:-1;34734:222:0;;;;;:::i;:::-;;:::i;50554:443::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;;;;;;;;;50642:17:::1;:6:::0;50652::::1;50642:17;:::i;:::-;50633:26;;50670:19;50692:25;50706:10;;50692:9;;:13;;:25;;;;:::i;:::-;50670:47;;50728:15;50746:38;50772:11;50746:21;50757:9;;50746:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;50728:56;;50795:16;50814:39;50841:11;50814:22;50825:10;;50814:6;:10;;:22;;;;:::i;:39::-;50795:58;;50866:28;50887:6;50866:20;:28::i;:::-;50919:9;::::0;:22:::1;::::0;50933:7;50919:13:::1;:22::i;:::-;50907:9;:34:::0;50965:10:::1;::::0;:24:::1;::::0;50980:8;50965:14:::1;:24::i;:::-;50952:10;:37:::0;-1:-1:-1;;;;50554:443:0:o;5614:100::-;5668:13;5701:5;5694:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5614:100;:::o;33244:181::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33328:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;33328:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33383:34;;2066:41:1;;;33383:34:0::1;::::0;2039:18:1;33383:34:0::1;;;;;;;33244:181:::0;;:::o;34239:164::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;34325:1:::1;34317:4;:9;;34309:46;;;::::0;-1:-1:-1;;;34309:46:0;;10166:2:1;34309:46:0::1;::::0;::::1;10148:21:1::0;10205:2;10185:18;;;10178:30;10244:26;10224:18;;;10217:54;10288:18;;34309:46:0::1;9964:348:1::0;34309:46:0::1;34382:13;:4:::0;34389:6:::1;34382:13;:::i;:::-;34366;:29:::0;-1:-1:-1;34239:164:0:o;6669:210::-;6788:4;6810:39;200:10;6833:7;6842:6;6810:8;:39::i;:::-;-1:-1:-1;6867:4:0;6669:210;;;;;:::o;32248:326::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;32370:24:::1;::::0;;;:14:::1;:24;::::0;;;;;:33;;;32362:42:::1;;;::::0;::::1;;32432:3;32423:5;:12;;32415:55;;;::::0;-1:-1:-1;;;32415:55:0;;10519:2:1;32415:55:0::1;::::0;::::1;10501:21:1::0;10558:2;10538:18;;;10531:30;10597:32;10577:18;;;10570:60;10647:18;;32415:55:0::1;10317:354:1::0;32415:55:0::1;32481:24;::::0;;;:14:::1;:24;::::0;;;;;;;;:32;;;32529:37;;7879:25:1;;;7920:18;;;7913:34;;;32529:37:0::1;::::0;7852:18:1;32529:37:0::1;;;;;;;32248:326:::0;;:::o;54689:637::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;54861:6:::1;:13;54836:14;:21;:38;54828:80;;;::::0;-1:-1:-1;;;54828:80:0;;10878:2:1;54828:80:0::1;::::0;::::1;10860:21:1::0;10917:2;10897:18;;;10890:30;10956:32;10936:18;;;10929:60;11006:18;;54828:80:0::1;10676:354:1::0;54828:80:0::1;54952:3;54927:14;:21;:28;;54919:75;;;::::0;-1:-1:-1;;;54919:75:0;;11237:2:1;54919:75:0::1;::::0;::::1;11219:21:1::0;11276:2;11256:18;;;11249:30;11315:34;11295:18;;;11288:62;-1:-1:-1;;;11366:18:1;;;11359:32;11408:19;;54919:75:0::1;11035:398:1::0;54919:75:0::1;55010:9;55005:314;55029:14;:21;55025:1;:25;55005:314;;;55072:14;55089;55104:1;55089:17;;;;;;;;:::i;:::-;;;;;;;55072:34;;55121:21;55145:6;55152:1;55145:9;;;;;;;;:::i;:::-;;;;;;;55158:6;55145:20;;;;:::i;:::-;55121:44;;55180:50;55196:10;55208:6;55216:13;55180:15;:50::i;:::-;55245:15;::::0;-1:-1:-1;;;;;55245:15:0::1;:26;55280:6:::0;55289:17:::1;55280:6:::0;55289:9:::1;:17::i;:::-;55245:62;::::0;-1:-1:-1;;;;;;55245:62:0::1;::::0;;;;;;-1:-1:-1;;;;;11770:32:1;;;55245:62:0::1;::::0;::::1;11752:51:1::0;11819:18;;;11812:34;11725:18;;55245:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55057:262;;55052:3;;;;;:::i;:::-;;;;55005:314;;;;54689:637:::0;;:::o;6887:454::-;7027:4;7044:36;7054:6;7062:9;7073:6;7044:9;:36::i;:::-;7091:220;7114:6;200:10;7162:138;7218:6;7162:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7162:19:0;;;;;;:11;:19;;;;;;;;200:10;7162:33;;;;;;;;;;:37;:138::i;:::-;7091:8;:220::i;:::-;-1:-1:-1;7329:4:0;6887:454;;;;;:::o;49537:114::-;49611:15;;:32;;;-1:-1:-1;;;49611:32:0;;;;49584:7;;-1:-1:-1;;;;;49611:15:0;;:30;;:32;;;;;;;;;;;;;;:15;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49604:39;;49537:114;:::o;39253:141::-;39343:15;;:43;;;-1:-1:-1;;;39343:43:0;;;;39316:7;;-1:-1:-1;;;;;39343:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41596:119::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;41666:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;41666:41:0;;2091:14:1;;2084:22;41666:41:0::1;::::0;::::1;2066::1::0;-1:-1:-1;;;;;41666:15:0;;::::1;::::0;:34:::1;::::0;2039:18:1;;41666:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41596:119:::0;:::o;7349:300::-;200:10;7464:4;7558:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7558:34:0;;;;;;;;;;7464:4;;7486:133;;7536:7;;7558:50;;7597:10;7558:38;:50::i;36494:121::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;36564:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;36564:43:0;;2091:14:1;;2084:22;36564:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;36564:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;36564:43:0::1;1926:187:1::0;40965:103:0;41002:15;;:58;;-1:-1:-1;;;41002:58:0;;41041:10;41002:58;;;12626:51:1;41002:15:0;12693:18:1;;;12686:50;-1:-1:-1;;;;;41002:15:0;;;;:30;;12599:18:1;;41002:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40965:103::o;49659:183::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;49773:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;49773:61:0;;::::1;::::0;::::1;2752:25:1::0;;;-1:-1:-1;;;;;49773:15:0;;::::1;::::0;:54:::1;::::0;2725:18:1;;49773:61:0::1;2606:177:1::0;49850:175:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;49960:15:::1;::::0;:57:::1;::::0;-1:-1:-1;;;49960:57:0;;::::1;::::0;::::1;2752:25:1::0;;;-1:-1:-1;;;;;49960:15:0;;::::1;::::0;:50:::1;::::0;2725:18:1;;49960:57:0::1;2606:177:1::0;35850:120:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;35945:17:::1;:6:::0;35955::::1;35945:17;:::i;:::-;35924:18;:38:::0;-1:-1:-1;35850:120:0:o;41214:142::-;41307:15;;:41;;;-1:-1:-1;;;41307:41:0;;;;41280:7;;-1:-1:-1;;;;;41307:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;34111:99;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;34180:14:::1;:22:::0;;-1:-1:-1;;34180:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34111:99::o;39728:171::-;39857:15;;:34;;-1:-1:-1;;;39857:34:0;;-1:-1:-1;;;;;178:32:1;;;39857:34:0;;;160:51:1;39825:7:0;;39857:15;;:25;;133:18:1;;39857:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41723:185::-;41852:15;;:48;;-1:-1:-1;;;41852:48:0;;-1:-1:-1;;;;;178:32:1;;;41852:48:0;;;160:51:1;41823:4:0;;41852:15;;:39;;133:18:1;;41852:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40547:410::-;40729:15;;:28;;-1:-1:-1;;;;;;40729:28:0;;;;;2752:25:1;;;40627:18:0;;;;;;-1:-1:-1;;;;;40729:15:0;;:23;;2725:18:1;;40729:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40773:176;;;13539:25:1;;;13595:2;13580:18;;13573:34;;;13623:18;;;13616:34;;;13681:2;13666:18;;13659:34;;;40612:145:0;;-1:-1:-1;40612:145:0;;-1:-1:-1;40612:145:0;-1:-1:-1;40929:9:0;;40891:5;;40773:176;;13526:3:1;13511:19;40773:176:0;;;;;;;40601:356;;;40547:410;:::o;6051:177::-;-1:-1:-1;;;;;6202:18:0;6170:7;6202:18;;;;;;;;;;;;6051:177::o;13028:148::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;13119:6:::1;::::0;13098:40:::1;::::0;13135:1:::1;::::0;-1:-1:-1;;;;;13119:6:0::1;::::0;13098:40:::1;::::0;13135:1;;13098:40:::1;13149:6;:19:::0;;-1:-1:-1;;;;;;13149:19:0::1;::::0;;13028:148::o;33474:127::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;33548:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;33548:45:0;;-1:-1:-1;;;;;178:32:1;;;33548:45:0::1;::::0;::::1;160:51:1::0;33548:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;33548:45:0::1;14:203:1::0;37160:208:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;37229:15:::1;::::0;:46:::1;::::0;-1:-1:-1;;;37229:46:0;;-1:-1:-1;;;;;178:32:1;;;37229:46:0::1;::::0;::::1;160:51:1::0;37229:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;37229:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;37286:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;37286:36:0::1;37318:4;37286:36;::::0;;-1:-1:-1;37333:27:0::1;37306:8:::0;37333:17:::1;:27::i;33902:170::-:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34014:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;34014:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33902:170::o;37618:1429::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;37962:11:::1;:21:::0;;;37994:16:::1;:31:::0;;;38036:15:::1;:30:::0;;;38077:13:::1;:26:::0;;;38114:12:::1;:23:::0;;;38148:17:::1;:33:::0;;;38192:16:::1;:32:::0;;;38235:14:::1;:28:::0;;;38274:9:::1;:18:::0;;;38303:10:::1;:20:::0;;;38352:117:::1;38316:7:::0;38352:87:::1;38168:13:::0;38352:87;38252:11;38211:13;38352:32:::1;:50::i;:::-;:68:::0;::::1;:87::i;:117::-;38336:13;:133;;;;38497:113;38600:9;;38497:84;38564:16;;38497:48;38529:15;;38497:13;;:31;;:48;;;;:::i;:113::-;38482:12;:128:::0;38631:13:::1;::::0;38648:2:::1;-1:-1:-1::0;38631:19:0;::::1;::::0;:41:::1;;;38670:2;38654:12;;:18;;38631:41;38623:94;;;::::0;-1:-1:-1;;;38623:94:0;;13906:2:1;38623:94:0::1;::::0;::::1;13888:21:1::0;13945:2;13925:18;;;13918:30;13984:34;13964:18;;;13957:62;-1:-1:-1;;;14035:18:1;;;14028:38;14083:19;;38623:94:0::1;13704:404:1::0;38623:94:0::1;38760:12;::::0;38787:17:::1;::::0;38819:16:::1;::::0;38850:14:::1;::::0;38879:11:::1;::::0;38905:16:::1;::::0;38936:15:::1;::::0;38966:13:::1;::::0;38994:9:::1;::::0;39018:10:::1;::::0;38735:304:::1;::::0;;14512:25:1;;;14568:2;14553:18;;14546:34;;;;14596:18;;;14589:34;;;;14654:2;14639:18;;14632:34;;;;14697:3;14682:19;;14675:35;;;;14741:3;14726:19;;14719:35;14785:3;14770:19;;14763:35;14829:3;14814:19;;14807:35;14873:3;14858:19;;14851:35;14917:3;14902:19;;14895:35;38735:304:0::1;::::0;14499:3:1;14484:19;38735:304:0::1;;;;;;;37618:1429:::0;;;;;;;;;;:::o;37376:234::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;37482:1:::1;37464:14;:19;;37455:62;;;::::0;-1:-1:-1;;;37455:62:0;;15143:2:1;37455:62:0::1;::::0;::::1;15125:21:1::0;15182:2;15162:18;;;15155:30;15221:31;15201:18;;;15194:59;15270:18;;37455:62:0::1;14941:353:1::0;37455:62:0::1;37528:11;:28:::0;;;37572:30:::1;::::0;2752:25:1;;;37572:30:0::1;::::0;2740:2:1;2725:18;37572:30:0::1;;;;;;;;37376:234:::0;:::o;41364:109::-;41418:15;;:47;;-1:-1:-1;;;41418:47:0;;41447:10;41418:47;;;12626:51:1;12720:14;;12713:22;12693:18;;;12686:50;-1:-1:-1;;;;;41418:15:0;;;;:28;;12599:18:1;;41418:47:0;12442:300:1;36911:241:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;37009:6:::1;36997:8;:18;;:41;;;;;37031:7;37019:8;:19;;36997:41;36989:50;;;::::0;::::1;;37089:16;::::0;37055:51:::1;::::0;37079:8;;37055:51:::1;::::0;;;::::1;37117:16;:27:::0;36911:241::o;32675:188::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;32739:14:::1;::::0;-1:-1:-1;;;32739:14:0;::::1;;;32738:15;32730:24;;;::::0;::::1;;32765:14;:21:::0;;-1:-1:-1;;;;32765:21:0::1;-1:-1:-1::0;;;32765:21:0::1;::::0;;32811:12:::1;32797:11;:26:::0;32839:16:::1;::::0;::::1;::::0;32765:21;;32839:16:::1;32675:188::o:0;5722:104::-;5778:13;5811:7;5804:14;;;;;:::i;36194:163::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;36308:41:::1;36337:4;36343:5;36308:28;:41::i;:::-;36194:163:::0;;:::o;36365:121::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;36435:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;36435:43:0;;2091:14:1;;2084:22;36435:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;36435:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;36435:43:0::1;1926:187:1::0;34970:176:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;35060:6:::1;35042:24;;:14;;;;;;;;;;;:24;;::::0;35034:33:::1;;;::::0;::::1;;35078:14;:23:::0;;;::::1;;-1:-1:-1::0;;;35078:23:0::1;-1:-1:-1::0;;;;35078:23:0;;::::1;;::::0;;35117:21:::1;::::0;::::1;::::0;::::1;::::0;35095:6;2091:14:1;2084:22;2066:41;;2054:2;2039:18;;1926:187;33639:201:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;33713:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;33713:45:0;;-1:-1:-1;;;;;178:32:1;;;33713:45:0::1;::::0;::::1;160:51:1::0;33713:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;33713:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33769:15:0::1;::::0;-1:-1:-1;;;;;33769:15:0::1;::::0;-1:-1:-1;33769:26:0::1;::::0;-1:-1:-1;33796:7:0;33805:26:::1;33796:7:::0;33805:17:::1;:26::i;:::-;33769:63;::::0;-1:-1:-1;;;;;;33769:63:0::1;::::0;;;;;;-1:-1:-1;;;;;11770:32:1;;;33769:63:0::1;::::0;::::1;11752:51:1::0;11819:18;;;11812:34;11725:18;;33769:63:0::1;11570:282:1::0;7657:400:0;7777:4;7799:228;200:10;7849:7;7871:145;7928:15;7871:145;;;;;;;;;;;;;;;;;200:10;7871:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7871:34:0;;;;;;;;;;;;:38;:145::i;35154:662::-;35213:14;;-1:-1:-1;;;35213:14:0;;;;35205:49;;;;-1:-1:-1;;;35205:49:0;;16069:2:1;35205:49:0;;;16051:21:1;16108:2;16088:18;;;16081:30;-1:-1:-1;;;16127:18:1;;;16120:52;16189:18;;35205:49:0;15867:346:1;35205:49:0;35273:24;;;;:14;:24;;;;;;:29;;35265:66;;;;-1:-1:-1;;;35265:66:0;;16420:2:1;35265:66:0;;;16402:21:1;16459:2;16439:18;;;16432:30;16498:26;16478:18;;;16471:54;16542:18;;35265:66:0;16218:348:1;35265:66:0;35397:29;:15;35417:8;35397:19;:29::i;:::-;200:10;35364:30;;;;:16;:30;;;;;;:62;35342:148;;;;-1:-1:-1;;;35342:148:0;;16773:2:1;35342:148:0;;;16755:21:1;16812:2;16792:18;;;16785:30;16851:34;16831:18;;;16824:62;-1:-1:-1;;;16902:18:1;;;16895:34;16946:19;;35342:148:0;16571:400:1;35342:148:0;35530:24;;;;:14;:24;;;;;;;;;200:10;35501:26;;:12;:26;;;;;;:53;35598:29;:15;35530:24;35598:19;:29::i;:::-;200:10;35565:30;;;;:16;:30;;;;;:62;;;;35638:15;;-1:-1:-1;;;;;35638:15:0;;:26;;35706:31;200:10;35706:17;:31::i;:::-;35638:110;;-1:-1:-1;;;;;;35638:110:0;;;;;;;-1:-1:-1;;;;;11770:32:1;;;35638:110:0;;;11752:51:1;11819:18;;;11812:34;11725:18;;35638:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35785:12;200:10;;120:98;35785:12;-1:-1:-1;;;;;35764:44:0;;35799:8;35764:44;;;;2752:25:1;;2740:2;2725:18;;2606:177;35764:44:0;;;;;;;;35154:662;:::o;39536:184::-;39665:15;;:47;;-1:-1:-1;;;39665:47:0;;-1:-1:-1;;;;;178:32:1;;;39665:47:0;;;160:51:1;39633:7:0;;39665:15;;:38;;133:18:1;;39665:47:0;14:203:1;6236:216:0;6358:4;6380:42;200:10;6404:9;6415:6;6380:9;:42::i;39907:307::-;40171:15;;:35;;-1:-1:-1;;;40171:35:0;;-1:-1:-1;;;;;178:32:1;;;40171:35:0;;;160:51:1;40021:7:0;;;;;;;;;;;;40171:15;;;;:26;;133:18:1;;40171:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40164:42;;;;-1:-1:-1;40164:42:0;;-1:-1:-1;40164:42:0;-1:-1:-1;40164:42:0;-1:-1:-1;40164:42:0;;-1:-1:-1;39907:307:0;-1:-1:-1;;39907:307:0:o;34490:174::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;34578:3:::1;34569:5;:12;;34561:63;;;::::0;-1:-1:-1;;;34561:63:0;;17740:2:1;34561:63:0::1;::::0;::::1;17722:21:1::0;17779:2;17759:18;;;17752:30;17818:34;17798:18;;;17791:62;-1:-1:-1;;;17869:18:1;;;17862:36;17915:19;;34561:63:0::1;17538:402:1::0;34561:63:0::1;34635:13;:21:::0;34490:174::o;41916:127::-;42000:15;;:35;;-1:-1:-1;;;42000:35:0;;-1:-1:-1;;;;;178:32:1;;;42000:35:0;;;160:51:1;41976:4:0;;42000:15;;:26;;133:18:1;;42000:35:0;14:203:1;53008:1673:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;53186:9:::1;:16;53162:13;:20;:40;53140:133;;;::::0;-1:-1:-1;;;53140:133:0;;18147:2:1;53140:133:0::1;::::0;::::1;18129:21:1::0;18186:2;18166:18;;;18159:30;18225:34;18205:18;;;18198:62;-1:-1:-1;;;18276:18:1;;;18269:41;18327:19;;53140:133:0::1;17945:407:1::0;53140:133:0::1;53394:3;53370:13;:20;:27;;53348:115;;;::::0;-1:-1:-1;;;53348:115:0;;18559:2:1;53348:115:0::1;::::0;::::1;18541:21:1::0;18598:2;18578:18;;;18571:30;18637:34;18617:18;;;18610:62;-1:-1:-1;;;18688:18:1;;;18681:36;18734:19;;53348:115:0::1;18357:402:1::0;53348:115:0::1;53474:21;53515:7:::0;53510:119:::1;53532:9;:16;53528:1;:20;;;53510:119;;;53586:31;53604:9;53614:1;53604:12;;;;;;;;;;:::i;:::-;;;;;;;53586:13;:17;;:31;;;;:::i;:::-;53570:47:::0;-1:-1:-1;53550:3:0;::::1;::::0;::::1;:::i;:::-;;;;53510:119;;;;53686:13;53661:21;53671:10;53661:9;:21::i;:::-;:38;;53639:132;;;::::0;-1:-1:-1;;;53639:132:0;;19146:2:1;53639:132:0::1;::::0;::::1;19128:21:1::0;19185:2;19165:18;;;19158:30;19224:34;19204:18;;;19197:62;-1:-1:-1;;;19275:18:1;;;19268:42;19327:19;;53639:132:0::1;18944:408:1::0;53639:132:0::1;53814:10;6594:7:::0;6626:18;;;:11;:18;;;;;;;;53834:4:::1;6626:27:::0;;;;;;;;53844:13;-1:-1:-1;53804:53:0::1;53782:150;;;::::0;-1:-1:-1;;;53782:150:0;;19559:2:1;53782:150:0::1;::::0;::::1;19541:21:1::0;19598:2;19578:18;;;19571:30;19637:34;19617:18;;;19610:62;-1:-1:-1;;;19688:18:1;;;19681:45;19743:19;;53782:150:0::1;19357:411:1::0;53782:150:0::1;53943:19;53973::::0;54008:7:::1;54003:671;54021:13;:20;54017:1;:24;;;54003:671;;;54077:13;54091:1;54077:16;;;;;;;;;;:::i;:::-;;;;;;;54063:30;;54157:1;-1:-1:-1::0;;;;;54134:25:0::1;:11;-1:-1:-1::0;;;;;54134:25:0::1;;;:107;;;;-1:-1:-1::0;54199:42:0::1;-1:-1:-1::0;;;;;54184:57:0;::::1;;;54134:107;54108:201;;;::::0;-1:-1:-1;;;54108:201:0;;19975:2:1;54108:201:0::1;::::0;::::1;19957:21:1::0;;;19994:18;;;19987:30;20053:34;20033:18;;;20026:62;20105:18;;54108:201:0::1;19773:356:1::0;54108:201:0::1;54338:22;54348:11;54338:9;:22::i;:::-;54324:36;;54375:4;-1:-1:-1::0;;;;;54375:17:0::1;;54393:10;54405:11;54418:9;54428:1;54418:12;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;54375:56:::1;::::0;-1:-1:-1;;;;;;54375:56:0::1;::::0;;;;;;-1:-1:-1;;;;;20392:15:1;;;54375:56:0::1;::::0;::::1;20374:34:1::0;20444:15;;;;20424:18;;;20417:43;20476:18;;;20469:34;20309:18;;54375:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54512:9;54522:1;54512:12;;;;;;;;;;:::i;:::-;;;;;;;54498:11;:26;;;;:::i;:::-;54472:22;54482:11;54472:9;:22::i;:::-;:52;54446:162;;;::::0;-1:-1:-1;;;54446:162:0;;20846:2:1;54446:162:0::1;::::0;::::1;20828:21:1::0;20885:2;20865:18;;;20858:30;20924:34;20904:18;;;20897:62;-1:-1:-1;;;20975:18:1;;;20968:46;21031:19;;54446:162:0::1;20644:412:1::0;54446:162:0::1;54628:34;54636:11;54649:9;54659:1;54649:12;;;;;;;;;;:::i;:::-;;;;;;;54628:34;;;;;;-1:-1:-1::0;;;;;11770:32:1;;;;11752:51;;11834:2;11819:18;;11812:34;11740:2;11725:18;;11570:282;54628:34:0::1;;;;;;;;54043:3:::0;::::1;::::0;::::1;:::i;:::-;;;;54003:671;;;;53129:1552;;;53008:1673:::0;;:::o;32928:268::-;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33000:41:0;;::::1;;::::0;;;:33:::1;:41;::::0;;;;;;;:48;;33044:4:::1;-1:-1:-1::0;;33000:48:0;;::::1;::::0;::::1;::::0;;;33059:19:::1;:27:::0;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;33104:15:::1;::::0;:44;;-1:-1:-1;;;33104:44:0;;::::1;::::0;::::1;160:51:1::0;;;;33104:15:0;::::1;::::0;:36:::1;::::0;133:18:1;33104:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33164:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;33164:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;33164:24:0::1;14:203:1::0;35978:208:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;36058:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;36050:41:::1;;;::::0;::::1;;36102:21;:31:::0;;-1:-1:-1;;36102:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36149:29:::1;::::0;2066:41:1;;;36149:29:0::1;::::0;2054:2:1;2039:18;36149:29:0::1;1926:187:1::0;49371:158:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;49441:15:::1;::::0;:40:::1;::::0;-1:-1:-1;;;49441:40:0;;-1:-1:-1;;;;;178:32:1;;;49441:40:0::1;::::0;::::1;160:51:1::0;49441:15:0;;::::1;::::0;:33:::1;::::0;133:18:1;;49441:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49497:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;49497:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;49497:24:0::1;14:203:1::0;41076:130:0;41159:15;;:39;;;-1:-1:-1;;;41159:39:0;;;;41132:7;;-1:-1:-1;;;;;41159:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;40222:317;40491:15;;:40;;-1:-1:-1;;;40491:40:0;;;;;2752:25:1;;;40341:7:0;;;;;;;;;;;;-1:-1:-1;;;;;40491:15:0;;;;:33;;2725:18:1;;40491:40:0;2606:177:1;13184:281:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13287:22:0;::::1;13265:110;;;::::0;-1:-1:-1;;;13265:110:0;;21263:2:1;13265:110:0::1;::::0;::::1;21245:21:1::0;21302:2;21282:18;;;21275:30;21341:34;21321:18;;;21314:62;-1:-1:-1;;;21392:18:1;;;21385:36;21438:19;;13265:110:0::1;21061:402:1::0;13265:110:0::1;13412:6;::::0;13391:38:::1;::::0;-1:-1:-1;;;;;13391:38:0;;::::1;::::0;13412:6:::1;::::0;13391:38:::1;::::0;13412:6:::1;::::0;13391:38:::1;13440:6;:17:::0;;-1:-1:-1;;;;;;13440:17:0::1;-1:-1:-1::0;;;;;13440:17:0;;;::::1;::::0;;;::::1;::::0;;13184:281::o;41481:107::-;41534:15;;:46;;-1:-1:-1;;;41534:46:0;;41562:10;41534:46;;;12626:51:1;12720:14;;12713:22;12693:18;;;12686:50;-1:-1:-1;;;;;41534:15:0;;;;:27;;12599:18:1;;41534:46:0;12442:300:1;34734:222:0;12941:6;;-1:-1:-1;;;;;12941:6:0;200:10;12941:22;12933:67;;;;-1:-1:-1;;;12933:67:0;;;;;;;:::i;:::-;34809:16:::1;:5:::0;34818:6:::1;34809:16;:::i;:::-;34801:24;;34868:4;34853:12;;:19;;;;:::i;:::-;34844:5;:28;;34836:84;;;::::0;-1:-1:-1;;;34836:84:0;;21892:2:1;34836:84:0::1;::::0;::::1;21874:21:1::0;21931:2;21911:18;;;21904:30;21970:34;21950:18;;;21943:62;-1:-1:-1;;;22021:18:1;;;22014:41;22072:19;;34836:84:0::1;21690:407:1::0;34836:84:0::1;34931:9;:17:::0;34734:222::o;10840:181::-;10898:7;;10930:5;10934:1;10930;:5;:::i;:::-;10918:17;;10959:1;10954;:6;;10946:46;;;;-1:-1:-1;;;10946:46:0;;22304:2:1;10946:46:0;;;22286:21:1;22343:2;22323:18;;;22316:30;22382:29;22362:18;;;22355:57;22429:18;;10946:46:0;22102:351:1;10946:46:0;11012:1;10840:181;-1:-1:-1;;;10840:181:0:o;11407:250::-;11465:7;11489:1;11494;11489:6;11485:47;;-1:-1:-1;11519:1:0;11512:8;;11485:47;11544:9;11556:5;11560:1;11556;:5;:::i;:::-;11544:17;-1:-1:-1;11589:1:0;11580:5;11584:1;11544:17;11580:5;:::i;:::-;:10;11572:56;;;;-1:-1:-1;;;11572:56:0;;22660:2:1;11572:56:0;;;22642:21:1;22699:2;22679:18;;;22672:30;22738:34;22718:18;;;22711:62;-1:-1:-1;;;22789:18:1;;;22782:31;22830:19;;11572:56:0;22458:397:1;11665:132:0;11723:7;11750:39;11754:1;11757;11750:39;;;;;;;;;;;;;;;;;:3;:39::i;51005:1995::-;51074:6;51084:1;51074:11;51070:50;;51005:1995;:::o;51070:50::-;51130:24;51147:6;51130:16;:24::i;:::-;51165:19;51187:25;51201:10;;51187:9;;:13;;:25;;;;:::i;:::-;51428:13;;51165:47;;-1:-1:-1;51240:4:0;;;;;;51225:12;;;;;;51428:17;51424:261;;51481:192;51663:9;;51644:16;;51628:13;;:32;;;;:::i;:::-;:44;;;;:::i;:::-;51481:128;51595:13;;51481:95;51564:11;51481:64;51535:9;;51481:35;:53;;:64;;;;:::i;:95::-;:113;;:128::i;:192::-;51462:211;;51424:261;51699:14;;:18;51695:268;;51754:197;51940:10;;51920:17;;51903:14;;:34;;;;:::i;:::-;:47;;;;:::i;:::-;51754:130;51869:14;;51754:96;51838:11;51754:65;51808:10;;51754:35;:53;;:65;;;;:::i;:197::-;51734:217;;51695:268;51985:39;:16;52006:17;51985:20;:39::i;:::-;51973:51;-1:-1:-1;52041:13:0;;52037:111;;52093:15;;52085:51;;-1:-1:-1;;;;;52093:15:0;;;;52122:9;;52085:51;;;;52122:9;52093:15;52085:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52071:65:0;;-1:-1:-1;;52037:111:0;52168:21;52241:31;52262:9;;52241:16;;:20;;:31;;;;:::i;:::-;52214:10;;52192:17;;:33;;:21;:33::i;:::-;:80;;;;:::i;:::-;52168:104;-1:-1:-1;52285:19:0;52319:17;;52315:104;;52367:40;:21;52393:13;52367:25;:40::i;:::-;52353:54;;52315:104;52429:23;52497:11;52455:39;52476:17;;52455:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;52429:79;;52519:17;52567:11;52539:25;52553:10;;52539:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;52519:59;-1:-1:-1;52595:19:0;;52591:126;;52656:15;;52648:57;;-1:-1:-1;;;;;52656:15:0;;;;52685;;52648:57;;;;52685:15;52656;52648:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52631:74:0;;-1:-1:-1;;52591:126:0;52731:13;;52727:108;;52786:9;;52778:45;;-1:-1:-1;;;;;52786:9:0;;;;52809;;52778:45;;;;52809:9;52786;52778:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52761:62:0;;-1:-1:-1;;52727:108:0;52852:140;52880:9;52904:27;52922:9;52904:15;:27;:::i;:::-;52946:7;:21;;;;;52957:10;52946:21;:35;;;;;52971:10;52946:35;52852:140;;;23266:25:1;;;23322:2;23307:18;;23300:34;;;;23377:14;23370:22;23350:18;;;23343:50;23254:2;23239:18;52852:140:0;;;;;;;51059:1941;;;;;;;;;;;51005:1995;:::o;11029:136::-;11087:7;11114:43;11118:1;11121;11114:43;;;;;;;;;;;;;;;;;:3;:43::i;9532:380::-;-1:-1:-1;;;;;9668:19:0;;9660:68;;;;-1:-1:-1;;;9660:68:0;;23606:2:1;9660:68:0;;;23588:21:1;23645:2;23625:18;;;23618:30;23684:34;23664:18;;;23657:62;-1:-1:-1;;;23735:18:1;;;23728:34;23779:19;;9660:68:0;23404:400:1;9660:68:0;-1:-1:-1;;;;;9747:21:0;;9739:68;;;;-1:-1:-1;;;9739:68:0;;24011:2:1;9739:68:0;;;23993:21:1;24050:2;24030:18;;;24023:30;24089:34;24069:18;;;24062:62;-1:-1:-1;;;24140:18:1;;;24133:32;24182:19;;9739:68:0;23809:398:1;9739:68:0;-1:-1:-1;;;;;9820:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9872:32;;2752:25:1;;;9872:32:0;;2725:18:1;9872:32:0;;;;;;;;9532:380;;;:::o;8065:610::-;-1:-1:-1;;;;;8205:20:0;;8197:70;;;;-1:-1:-1;;;8197:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8286:23:0;;8278:71;;;;-1:-1:-1;;;8278:71:0;;;;;;;:::i;:::-;8442:108;8478:6;8442:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8442:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;8422:17:0;;;:9;:17;;;;;;;;;;;:128;;;;8584:20;;;;;;;:32;;8609:6;8584:24;:32::i;:::-;-1:-1:-1;;;;;8561:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;8632:35;2752:25:1;;;8561:20:0;;8632:35;;;;;;2725:18:1;8632:35:0;2606:177:1;42051:6020:0;-1:-1:-1;;;;;42183:18:0;;42175:68;;;;-1:-1:-1;;;42175:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42262:16:0;;42254:64;;;;-1:-1:-1;;;42254:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42481:39:0;;42329:18;42481:39;;;:33;:39;;;;;;42329:18;;;;;;;;42481:39;;42476:132;;42545:14;;-1:-1:-1;;;42545:14:0;;;;42537:59;;;;-1:-1:-1;;;42537:59:0;;25224:2:1;42537:59:0;;;25206:21:1;;;25243:18;;;25236:30;25302:34;25282:18;;;25275:62;25354:18;;42537:59:0;25022:356:1;42537:59:0;42622:6;42632:1;42622:11;42618:5268;;42650:28;42666:4;42672:2;42676:1;42650:15;:28::i;:::-;42693:7;;;;;42051:6020;;;:::o;42618:5268::-;42736:8;;-1:-1:-1;;;42736:8:0;;;;42735:9;:39;;;;-1:-1:-1;;;;;;42749:25:0;;;;;;:19;:25;;;;;;;;42748:26;42735:39;:67;;;;-1:-1:-1;;;;;;42779:23:0;;;;;;:19;:23;;;;;;;;42778:24;42735:67;42717:5169;;;-1:-1:-1;;;;;42846:29:0;;;42829:14;42846:29;;;:25;:29;;;;;;;42906:31;;;;;;;;42846:29;;;;;42906:31;42958:9;;:23;;;;;42972:9;42971:10;42958:23;42954:2286;;;43002:13;43018:32;43046:3;43018:23;43029:11;;43018:6;:10;;:23;;;;:::i;:32::-;43002:48;-1:-1:-1;43078:17:0;:6;43002:48;43078:10;:17::i;:::-;43069:26;;43114:43;43130:4;43144;43151:5;43114:15;:43::i;:::-;43176:33;43192:4;43198:2;43202:6;43176:15;:33::i;:::-;43228:15;;-1:-1:-1;;;;;43228:15:0;:26;43255:4;43261:23;43255:4;43261:17;:23::i;:::-;43228:57;;-1:-1:-1;;;;;;43228:57:0;;;;;;;-1:-1:-1;;;;;11770:32:1;;;43228:57:0;;;11752:51:1;11819:18;;;11812:34;11725:18;;43228:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43304:15:0;;-1:-1:-1;;;;;43304:15:0;;-1:-1:-1;43304:26:0;;-1:-1:-1;43331:2:0;43335:21;43331:2;43335:17;:21::i;:::-;43304:53;;-1:-1:-1;;;;;;43304:53:0;;;;;;;-1:-1:-1;;;;;11770:32:1;;;43304:53:0;;;11752:51:1;11819:18;;;11812:34;11725:18;;43304:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43376:7;;;;;;;;42051:6020;;;:::o;42954:2286::-;43436:8;43435:9;:27;;;;-1:-1:-1;43448:14:0;;-1:-1:-1;;;43448:14:0;;;;43435:27;43431:1809;;;-1:-1:-1;;;;;43513:22:0;;;;;;:16;:22;;;;;;43539:15;-1:-1:-1;43513:41:0;43483:144;;;;-1:-1:-1;;;43483:144:0;;25585:2:1;43483:144:0;;;25567:21:1;25624:2;25604:18;;;25597:30;25663:31;25643:18;;;25636:59;25712:18;;43483:144:0;25383:353:1;43483:144:0;-1:-1:-1;;;;;43650:22:0;;;;;;:16;:22;;;;;;:27;43646:147;;-1:-1:-1;;;;;43702:22:0;;43727:1;43702:22;;;:16;:22;;;;;;;;:26;;;43751:12;:18;;;;;:22;43646:147;43431:1809;;;43833:9;43829:1411;;;43876:14;;43920:12;;43967:17;;44018:16;;44063:10;;44098:14;;43876;;-1:-1:-1;43920:12:0;;-1:-1:-1;43967:17:0;;-1:-1:-1;44018:16:0;-1:-1:-1;44063:10:0;-1:-1:-1;44098:14:0;;44094:271;;;44202:13;;44189:9;44160:39;;;;:28;:39;;;;;;:55;;44202:13;44160:55;:::i;:::-;44141:15;:74;;44133:134;;;;-1:-1:-1;;;44133:134:0;;25943:2:1;44133:134:0;;;25925:21:1;25982:2;25962:18;;;25955:30;-1:-1:-1;;;26001:18:1;;;25994:52;26063:18;;44133:134:0;25741:346:1;44133:134:0;44315:9;44286:39;;;;:28;:39;;;;;44328:15;44286:57;;43829:1411;;;44392:8;44388:852;;;44434:13;;44477:11;;44523:16;;44573:15;;44617:9;;44651:14;;44434:13;;-1:-1:-1;44477:11:0;;-1:-1:-1;44523:16:0;;-1:-1:-1;44573:15:0;-1:-1:-1;44617:9:0;-1:-1:-1;44651:14:0;;44647:369;;;44709:11;;:15;;44723:1;44709:15;:::i;:::-;44694:12;:30;44686:60;;;;-1:-1:-1;;;44686:60:0;;26294:2:1;44686:60:0;;;26276:21:1;26333:2;26313:18;;;26306:30;-1:-1:-1;;;26352:18:1;;;26345:48;26410:18;;44686:60:0;26092:342:1;44686:60:0;44788:13;;44773:11;:28;;44765:64;;;;-1:-1:-1;;;44765:64:0;;26641:2:1;44765:64:0;;;26623:21:1;26680:2;26660:18;;;26653:30;26719:26;26699:18;;;26692:54;26763:18;;44765:64:0;26439:348:1;44765:64:0;44881:9;44856:35;;;;:24;:35;;;;;;44895:12;44856:51;;44848:83;;;;-1:-1:-1;;;44848:83:0;;26994:2:1;44848:83:0;;;26976:21:1;27033:2;27013:18;;;27006:30;-1:-1:-1;;;27052:18:1;;;27045:50;27112:18;;44848:83:0;26792:344:1;44848:83:0;44975:9;44950:35;;;;:24;:35;;;;;44988:12;44950:50;;44647:369;45044:32;45079:13;45089:2;45079:9;:13::i;:::-;45152:9;;45044:48;;-1:-1:-1;45115:33:0;45142:6;45044:48;45115:33;:::i;:::-;:46;;45107:117;;;;-1:-1:-1;;;45107:117:0;;27343:2:1;45107:117:0;;;27325:21:1;27382:2;27362:18;;;27355:30;27421:34;27401:18;;;27394:62;-1:-1:-1;;;27472:18:1;;;27465:34;27516:19;;45107:117:0;27141:400:1;45107:117:0;44402:838;44388:852;45256:17;45276:72;45340:7;45309:28;45324:13;45309:12;:28;:::i;:::-;:38;;;;:::i;:::-;45276:10;;:32;:72::i;:::-;45256:92;;45365:28;45396:24;45414:4;45396:9;:24::i;:::-;45476:18;;45365:55;;-1:-1:-1;45452:42:0;;;;;;;45515:43;;-1:-1:-1;;;;;;45527:31:0;;;;;;:25;:31;;;;;;;;45526:32;45515:43;45511:1251;;;45579:8;:15;;-1:-1:-1;;;;45579:15:0;-1:-1:-1;;;45579:15:0;;;45619:21;;45579:15;45619:21;:41;;;;;45659:1;45644:12;:16;45619:41;:61;;;;;45679:1;45664:12;;:16;45619:61;45615:903;;;45705:20;45728:25;45742:10;;45728:9;;:13;;:25;;;;:::i;:::-;45705:48;;45776:24;45803:105;45895:12;45803:61;45854:9;;45803:20;:50;;:61;;;;:::i;:105::-;45776:132;;45931:22;45956:106;46049:12;45956:62;46007:10;;45956:20;:50;;:62;;;;:::i;:106::-;45931:131;;46087:21;46111:104;46202:12;;46111:60;46158:12;46111:16;:46;;:60;;;;:::i;:104::-;46087:128;;46240:22;46265:103;46354:13;;46265:58;46310:12;46265:14;:44;;:58;;;;:::i;:103::-;46240:128;-1:-1:-1;46393:18:0;46414:33;46240:128;46433:13;46414:18;:33::i;:::-;46393:54;;46472:26;46487:10;46472:14;:26::i;:::-;45682:836;;;;;;45615:903;46538:24;46565;46583:4;46565:9;:24::i;:::-;46538:51;;46608:38;46629:16;46608:20;:38::i;:::-;-1:-1:-1;46677:1:0;46665:9;:13;;;46697:10;:14;46730:8;:16;;-1:-1:-1;;;;46730:16:0;;;45511:1251;46778:12;46793:30;46819:3;46793:21;:6;46804:9;46793:10;:21::i;:30::-;46778:45;-1:-1:-1;46838:18:0;46877:12;;46873:202;;46942:3;46919:20;:6;46930:8;46919:10;:20::i;:::-;:26;;;;:::i;:::-;46906:39;;46960;46976:4;46982;;;;;;;;;-1:-1:-1;;;;;46982:4:0;46988:10;46960:15;:39::i;:::-;47029:12;;:28;;47046:10;47029:16;:28::i;:::-;47014:12;:43;46873:202;47100:29;47111:17;47118:10;47111:4;:17;:::i;:::-;47100:6;;:10;:29::i;:::-;47091:38;;47150:9;47146:155;;;47193:10;;:20;;47208:4;47193:14;:20::i;:::-;47180:10;:33;47146:155;;;47266:9;;:19;;47280:4;47266:13;:19::i;:::-;47254:9;:31;47146:155;47317:42;47333:4;47347;47354;47317:15;:42::i;:::-;47390:16;;47427:15;;:28;;-1:-1:-1;;;;;;47427:28:0;;;;;2752:25:1;;;-1:-1:-1;;;;;47427:15:0;;;;:23;;2725:18:1;;47427:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;47427:28:0;;;;;;;;-1:-1:-1;;47427:28:0;;;;;;;;;;;;:::i;:::-;;;47423:452;;;47619:231;;;13539:25:1;;;13595:2;13580:18;;13573:34;;;13623:18;;;13616:34;;;13681:2;13666:18;;13659:34;;;47822:9:0;;47769:4;;47619:231;;13526:3:1;13511:19;47619:231:0;;;;;;;47456:410;;;47423:452;42814:5072;;;;;;;;42717:5169;47898:33;47914:4;47920:2;47924:6;47898:15;:33::i;:::-;47942:15;;-1:-1:-1;;;;;47942:15:0;:26;47969:4;47975:23;47969:4;47975:17;:23::i;:::-;47942:57;;-1:-1:-1;;;;;;47942:57:0;;;;;;;-1:-1:-1;;;;;11770:32:1;;;47942:57:0;;;11752:51:1;11819:18;;;11812:34;11725:18;;47942:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48010:15:0;;-1:-1:-1;;;;;48010:15:0;;-1:-1:-1;48010:26:0;;-1:-1:-1;48037:2:0;48041:21;48037:2;48041:17;:21::i;:::-;48010:53;;-1:-1:-1;;;;;;48010:53:0;;;;;;;-1:-1:-1;;;;;11770:32:1;;;48010:53:0;;;11752:51:1;11819:18;;;11812:34;11725:18;;48010:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42164:5907;;;;;42051:6020;;;:::o;11173:226::-;11293:7;11329:12;11321:6;;;;11313:29;;;;-1:-1:-1;;;11313:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11353:9:0;11365:5;11369:1;11365;:5;:::i;:::-;11353:17;11173:226;-1:-1:-1;;;;;11173:226:0:o;36623:280::-;-1:-1:-1;;;;;36706:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;36706:39:0;;;;;;;;;;;;36758:80;;36784:15;;:42;;-1:-1:-1;;;36784:42:0;;-1:-1:-1;;;;;178:32:1;;;36784:42:0;;;160:51:1;36784:15:0;;;;:36;;133:18:1;;36784:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36758:80;36855:40;;;;;;-1:-1:-1;;;;;36855:40:0;;;;;;;;36623:280;;:::o;48079:289::-;48185:14;;48145:7;;-1:-1:-1;;;48185:14:0;;;;:175;;48342:18;48352:7;48342:9;:18::i;:::-;48185:175;;;-1:-1:-1;;;;;48242:21:0;;;;;;:12;:21;;;;;;48219:103;;48300:3;;48219:54;;48242:30;;48300:3;48242:25;:30::i;:::-;48219:18;48229:7;48219:9;:18::i;11805:312::-;11925:7;11960:12;11953:5;11945:28;;;;-1:-1:-1;;;11945:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11984:9:0;11996:5;12000:1;11996;:5;:::i;48864:499::-;48954:16;;;48968:1;48954:16;;;;;;;;48930:21;;48954:16;;;;;;;;;;-1:-1:-1;48954:16:0;48930:40;;48999:4;48981;48986:1;48981:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48981:23:0;;;:7;;;;;;;;;;:23;;;;49025:15;;:22;;;-1:-1:-1;;;49025:22:0;;;;:15;;;;;:20;;:22;;;;;48981:7;;49025:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49015:4;49020:1;49015:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49015:32:0;;;:7;;;;;;;;;:32;49090:15;;49058:62;;49075:4;;49090:15;49108:11;49058:8;:62::i;:::-;49131:15;;:224;;-1:-1:-1;;;49131:224:0;;-1:-1:-1;;;;;49131:15:0;;;;:66;;:224;;49212:11;;49131:15;;49282:4;;49309;;49329:15;;49131:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48376:480;48435:12;48450:13;:6;48461:1;48450:10;:13::i;:::-;48435:28;-1:-1:-1;48474:17:0;48494:16;:6;48435:28;48494:10;:16::i;:::-;48474:36;-1:-1:-1;48546:21:0;48578:22;48595:4;48578:16;:22::i;:::-;48681:18;48702:41;:21;48728:14;48702:25;:41::i;:::-;48681:62;;48754:35;48767:9;48778:10;48754:12;:35::i;:::-;48805:43;;;28866:25:1;;;28922:2;28907:18;;28900:34;;;28950:18;;;28943:34;;;48805:43:0;;28854:2:1;28839:18;48805:43:0;;;;;;;48424:432;;;;48376:480;:::o;50033:513::-;50213:15;;50181:62;;50198:4;;-1:-1:-1;;;;;50213:15:0;50231:11;50181:8;:62::i;:::-;50286:15;;-1:-1:-1;;;;;50286:15:0;:31;50325:9;50358:4;50378:11;50286:15;;50490:7;12879:6;;-1:-1:-1;;;;;12879:6:0;;12814:79;50490:7;50286:252;;;;;;-1:-1:-1;;;;;;50286:252:0;;;-1:-1:-1;;;;;29347:15:1;;;50286:252:0;;;29329:34:1;29379:18;;;29372:34;;;;29422:18;;;29415:34;;;;29465:18;;;29458:34;29529:15;;;29508:19;;;29501:44;50512:15:0;29561:19:1;;;29554:35;29263:19;;50286:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:118;1182:5;1175:13;1168:21;1161:5;1158:32;1148:60;;1204:1;1201;1194:12;1219:382;1284:6;1292;1345:2;1333:9;1324:7;1320:23;1316:32;1313:52;;;1361:1;1358;1351:12;1313:52;1400:9;1387:23;1419:31;1444:5;1419:31;:::i;:::-;1469:5;-1:-1:-1;1526:2:1;1511:18;;1498:32;1539:30;1498:32;1539:30;:::i;:::-;1588:7;1578:17;;;1219:382;;;;;:::o;1606:315::-;1674:6;1682;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1911:2;1896:18;;;;1883:32;;-1:-1:-1;;;1606:315:1:o;2118:248::-;2186:6;2194;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;-1:-1:-1;;2286:23:1;;;2356:2;2341:18;;;2328:32;;-1:-1:-1;2118:248:1:o;2788:127::-;2849:10;2844:3;2840:20;2837:1;2830:31;2880:4;2877:1;2870:15;2904:4;2901:1;2894:15;2920:275;2991:2;2985:9;3056:2;3037:13;;-1:-1:-1;;3033:27:1;3021:40;;3091:18;3076:34;;3112:22;;;3073:62;3070:88;;;3138:18;;:::i;:::-;3174:2;3167:22;2920:275;;-1:-1:-1;2920:275:1:o;3200:183::-;3260:4;3293:18;3285:6;3282:30;3279:56;;;3315:18;;:::i;:::-;-1:-1:-1;3360:1:1;3356:14;3372:4;3352:25;;3200:183::o;3388:662::-;3442:5;3495:3;3488:4;3480:6;3476:17;3472:27;3462:55;;3513:1;3510;3503:12;3462:55;3549:6;3536:20;3575:4;3599:60;3615:43;3655:2;3615:43;:::i;:::-;3599:60;:::i;:::-;3693:15;;;3779:1;3775:10;;;;3763:23;;3759:32;;;3724:12;;;;3803:15;;;3800:35;;;3831:1;3828;3821:12;3800:35;3867:2;3859:6;3855:15;3879:142;3895:6;3890:3;3887:15;3879:142;;;3961:17;;3949:30;;3999:12;;;;3912;;3879:142;;;-1:-1:-1;4039:5:1;3388:662;-1:-1:-1;;;;;;3388:662:1:o;4055:1215::-;4173:6;4181;4234:2;4222:9;4213:7;4209:23;4205:32;4202:52;;;4250:1;4247;4240:12;4202:52;4290:9;4277:23;4319:18;4360:2;4352:6;4349:14;4346:34;;;4376:1;4373;4366:12;4346:34;4414:6;4403:9;4399:22;4389:32;;4459:7;4452:4;4448:2;4444:13;4440:27;4430:55;;4481:1;4478;4471:12;4430:55;4517:2;4504:16;4539:4;4563:60;4579:43;4619:2;4579:43;:::i;4563:60::-;4657:15;;;4739:1;4735:10;;;;4727:19;;4723:28;;;4688:12;;;;4763:19;;;4760:39;;;4795:1;4792;4785:12;4760:39;4819:11;;;;4839:217;4855:6;4850:3;4847:15;4839:217;;;4935:3;4922:17;4952:31;4977:5;4952:31;:::i;:::-;4996:18;;4872:12;;;;5034;;;;4839:217;;;5075:5;-1:-1:-1;;5118:18:1;;5105:32;;-1:-1:-1;;5149:16:1;;;5146:36;;;5178:1;5175;5168:12;5146:36;;5201:63;5256:7;5245:8;5234:9;5230:24;5201:63;:::i;:::-;5191:73;;;4055:1215;;;;;:::o;5275:456::-;5352:6;5360;5368;5421:2;5409:9;5400:7;5396:23;5392:32;5389:52;;;5437:1;5434;5427:12;5389:52;5476:9;5463:23;5495:31;5520:5;5495:31;:::i;:::-;5545:5;-1:-1:-1;5602:2:1;5587:18;;5574:32;5615:33;5574:32;5615:33;:::i;:::-;5275:456;;5667:7;;-1:-1:-1;;;5721:2:1;5706:18;;;;5693:32;;5275:456::o;6179:241::-;6235:6;6288:2;6276:9;6267:7;6263:23;6259:32;6256:52;;;6304:1;6301;6294:12;6256:52;6343:9;6330:23;6362:28;6384:5;6362:28;:::i;6425:247::-;6484:6;6537:2;6525:9;6516:7;6512:23;6508:32;6505:52;;;6553:1;6550;6543:12;6505:52;6592:9;6579:23;6611:31;6636:5;6611:31;:::i;6901:799::-;7041:6;7049;7057;7065;7073;7081;7089;7097;7105;7113;7166:3;7154:9;7145:7;7141:23;7137:33;7134:53;;;7183:1;7180;7173:12;7134:53;-1:-1:-1;;7206:23:1;;;7276:2;7261:18;;7248:32;;-1:-1:-1;7327:2:1;7312:18;;7299:32;;7378:2;7363:18;;7350:32;;-1:-1:-1;7429:3:1;7414:19;;7401:33;;-1:-1:-1;7481:3:1;7466:19;;7453:33;;-1:-1:-1;7533:3:1;7518:19;;7505:33;;-1:-1:-1;7585:3:1;7570:19;;7557:33;;-1:-1:-1;7637:3:1;7622:19;;7609:33;;-1:-1:-1;7689:3:1;7674:19;7661:33;;-1:-1:-1;6901:799:1;-1:-1:-1;6901:799:1:o;8520:388::-;8588:6;8596;8649:2;8637:9;8628:7;8624:23;8620:32;8617:52;;;8665:1;8662;8655:12;8617:52;8704:9;8691:23;8723:31;8748:5;8723:31;:::i;:::-;8773:5;-1:-1:-1;8830:2:1;8815:18;;8802:32;8843:33;8802:32;8843:33;:::i;8913:356::-;9115:2;9097:21;;;9134:18;;;9127:30;9193:34;9188:2;9173:18;;9166:62;9260:2;9245:18;;8913:356::o;9274:127::-;9335:10;9330:3;9326:20;9323:1;9316:31;9366:4;9363:1;9356:15;9390:4;9387:1;9380:15;9406:168;9479:9;;;9510;;9527:15;;;9521:22;;9507:37;9497:71;;9548:18;;:::i;9579:380::-;9658:1;9654:12;;;;9701;;;9722:61;;9776:4;9768:6;9764:17;9754:27;;9722:61;9829:2;9821:6;9818:14;9798:18;9795:38;9792:161;;9875:10;9870:3;9866:20;9863:1;9856:31;9910:4;9907:1;9900:15;9938:4;9935:1;9928:15;9792:161;;9579:380;;;:::o;11438:127::-;11499:10;11494:3;11490:20;11487:1;11480:31;11530:4;11527:1;11520:15;11554:4;11551:1;11544:15;11857:135;11896:3;11917:17;;;11914:43;;11937:18;;:::i;:::-;-1:-1:-1;11984:1:1;11973:13;;11857:135::o;11997:251::-;12067:6;12120:2;12108:9;12099:7;12095:23;12091:32;12088:52;;;12136:1;12133;12126:12;12088:52;12168:9;12162:16;12187:31;12212:5;12187:31;:::i;12253:184::-;12323:6;12376:2;12364:9;12355:7;12351:23;12347:32;12344:52;;;12392:1;12389;12382:12;12344:52;-1:-1:-1;12415:16:1;;12253:184;-1:-1:-1;12253:184:1:o;12747:245::-;12814:6;12867:2;12855:9;12846:7;12842:23;12838:32;12835:52;;;12883:1;12880;12873:12;12835:52;12915:9;12909:16;12934:28;12956:5;12934:28;:::i;12997:306::-;13085:6;13093;13101;13154:2;13142:9;13133:7;13129:23;13125:32;13122:52;;;13170:1;13167;13160:12;13122:52;13199:9;13193:16;13183:26;;13249:2;13238:9;13234:18;13228:25;13218:35;;13293:2;13282:9;13278:18;13272:25;13262:35;;12997:306;;;;;:::o;16976:557::-;17089:6;17097;17105;17113;17121;17129;17182:3;17170:9;17161:7;17157:23;17153:33;17150:53;;;17199:1;17196;17189:12;17150:53;17231:9;17225:16;17250:31;17275:5;17250:31;:::i;:::-;17345:2;17330:18;;17324:25;17389:2;17374:18;;17368:25;17433:2;17418:18;;17412:25;17477:3;17462:19;;17456:26;17522:3;17507:19;;;17501:26;17300:5;;17324:25;;-1:-1:-1;17368:25:1;;17412;;-1:-1:-1;17456:26:1;-1:-1:-1;17501:26:1;;-1:-1:-1;16976:557:1;-1:-1:-1;;;16976:557:1:o;18764:175::-;18801:3;18845:4;18838:5;18834:16;18874:4;18865:7;18862:17;18859:43;;18882:18;;:::i;:::-;18931:1;18918:15;;18764:175;-1:-1:-1;;18764:175:1:o;20514:125::-;20579:9;;;20600:10;;;20597:36;;;20613:18;;:::i;21468:217::-;21508:1;21534;21524:132;;21578:10;21573:3;21569:20;21566:1;21559:31;21613:4;21610:1;21603:15;21641:4;21638:1;21631:15;21524:132;-1:-1:-1;21670:9:1;;21468:217::o;24212:401::-;24414:2;24396:21;;;24453:2;24433:18;;;24426:30;24492:34;24487:2;24472:18;;24465:62;-1:-1:-1;;;24558:2:1;24543:18;;24536:35;24603:3;24588:19;;24212:401::o;24618:399::-;24820:2;24802:21;;;24859:2;24839:18;;;24832:30;24898:34;24893:2;24878:18;;24871:62;-1:-1:-1;;;24964:2:1;24949:18;;24942:33;25007:3;24992:19;;24618:399::o;27546:128::-;27613:9;;;27634:11;;;27631:37;;;27648:18;;:::i;27679:980::-;27941:4;27989:3;27978:9;27974:19;28020:6;28009:9;28002:25;28046:2;28084:6;28079:2;28068:9;28064:18;28057:34;28127:3;28122:2;28111:9;28107:18;28100:31;28151:6;28186;28180:13;28217:6;28209;28202:22;28255:3;28244:9;28240:19;28233:26;;28294:2;28286:6;28282:15;28268:29;;28315:1;28325:195;28339:6;28336:1;28333:13;28325:195;;;28404:13;;-1:-1:-1;;;;;28400:39:1;28388:52;;28495:15;;;;28460:12;;;;28436:1;28354:9;28325:195;;;-1:-1:-1;;;;;;;28576:32:1;;;;28571:2;28556:18;;28549:60;-1:-1:-1;;;28640:3:1;28625:19;28618:35;28537:3;27679:980;-1:-1:-1;;;27679:980:1:o
Swarm Source
ipfs://deca393151f0e064ce9441d95c13e09653ef269955d4adbdd9a30440c040b96e
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.