ERC-20
Overview
Max Total Supply
200,000,000 Eggnog
Holders
3
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000003163 EggnogValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
EGGNOG
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IDEXV2Router0201 { function factory() external pure returns (address); function WETH() external pure returns (address); struct route { /// @dev token from address from; /// @dev token to address to; /// @dev is stable route bool stable; } function getReserves( address tokenA, address tokenB, bool stable ) external view returns (uint256 reserveA, uint256 reserveB); function getAmountsOut(uint256 amountIn, route[] memory routes) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, route[] memory routes) external view returns (uint256[] memory amounts); 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 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); } interface IDEXV2ROUTER02 is IDEXV2Router0201 { function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, route[] calldata routes, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IDEXV2Pair { 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 IDEXV2Factory { 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, bool stable ) 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, bool stable ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } } interface IERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view 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); } interface ISTAKE { function swap( address _router, address swaptoken, address print ) external; function stake(uint256 value) external; function withdraw(uint256 value, address receiver) external; function claimReward(address _printer) external; function setPortion(uint256 _treasery, uint256 _printing) external; function setStake( uint256 _minimum, uint256 _tax, bool _on ) external; function SafeTransferToken( address _tokenAdd, address to, bool _transferETH ) external returns (bool); } contract Stake is ISTAKE { ///////// using libraries \\\\\\\\\ using SafeMath for uint256; event Staked(address _stacker, uint256 amount); event Printed(address _printer, uint256 Amount); event Withdraw(address _stackers, uint256 amount, bool out); event DistributeReward( address _rewardToken, uint256 amount, uint256 totalStackers ); event Claim(address _stacker, address _rewardToken, uint256 amount); address public Owner; address public immutable _callerToken; // authority contract which can regulate this address public nativeCoin; // native Wrraped coin address address public BURNED_ADDRESS = address(0xdead); bool stakeOn; uint256 claimTax; uint256 MINIMUM_STAKE_AMOUNT = 100000000000000000000; //100 Eggnog uint256 public totalStacked; uint256 printingPortion = 400000000000000000; //40% uint256 burningPortion = 600000000000000000; //60% struct ClaimInfo { uint256 totalCollectedClaim; uint256 pendingClaim; } bool permission = true; //permission will false when printing reward bool isEntered; //re-entrancy block mapping(address => mapping(address => ClaimInfo)) public claim; mapping(address => bool) public IsStacker; mapping(address => uint256) public stacked; mapping(address => uint256) indexByAdd; mapping(address => uint256) reseaveReward; address[] public stackers; modifier onlyToken() { require(msg.sender == _callerToken); permission = false; _; permission = true; } modifier onlyOwner() { require(msg.sender == Owner, "Only owner can call"); _; } modifier reentrancyGurd() { require(!isEntered); isEntered = true; _; isEntered = false; } constructor(address _nativeCoin, address _owner) { require(_nativeCoin != address(0), "invalid nativeCoin address"); nativeCoin = _nativeCoin; _callerToken = msg.sender; Owner = _owner; } receive() external payable {} event swapPrintedToken(uint256 _printAmount); function setBurningWallet(address _burned) external onlyOwner { require(_burned != address(0) && _burned != BURNED_ADDRESS); BURNED_ADDRESS = _burned; } function setPortion(uint256 _treasery, uint256 _printing) external onlyOwner { burningPortion = _treasery; printingPortion = _printing; } function setStake( uint256 _minimum, uint256 _tax, bool _on ) external onlyOwner { claimTax = _tax; stakeOn = _on; MINIMUM_STAKE_AMOUNT = _minimum; } function swap( address _router, address swaptoken, address printToken ) external onlyToken { uint256 finalAmount; if (swaptoken == printToken) { finalAmount = (IERC20(swaptoken).balanceOf(address(this))).sub( reseaveReward[swaptoken] ); } else { uint256 initBal = IERC20(printToken).balanceOf(address(this)); uint256 _amount = IERC20(swaptoken).balanceOf(address(this)).sub( reseaveReward[swaptoken] ); TransferHelper.safeApprove(swaptoken, _router, _amount); IDEXV2Router0201.route[] memory pathroutes; if (swaptoken == nativeCoin || printToken == nativeCoin) { pathroutes = new IDEXV2Router0201.route[](1); //native swap pathroutes[0] = IDEXV2Router0201.route({ from: swaptoken, to: printToken, stable: false }); } else { //token to token swap pathroutes = new IDEXV2Router0201.route[](2); //native swap pathroutes[0] = IDEXV2Router0201.route({ from: swaptoken, to: nativeCoin, stable: false }); pathroutes[1] = IDEXV2Router0201.route({ from: nativeCoin, to: printToken, stable: false }); } uint256[] memory amounts = IDEXV2ROUTER02(_router).getAmountsOut( _amount, pathroutes ); if (amounts[1] > 100) { IDEXV2ROUTER02(_router) .swapExactTokensForTokensSupportingFeeOnTransferTokens( _amount, 0, pathroutes, address(this), block.timestamp ); finalAmount = (IERC20(printToken).balanceOf(address(this))).sub( initBal ); emit Printed(printToken, finalAmount); } } if (finalAmount > 0) { uint256 burningAmount = (finalAmount.mul(burningPortion)).div( burningPortion.add(printingPortion) ); if (burningAmount > 0) { TransferHelper.safeTransfer( printToken, BURNED_ADDRESS, burningAmount ); } uint256 _distribute = finalAmount.sub(burningAmount); if (_distribute > 0) _distributeReward(printToken, _distribute); } } function _distributeReward(address _printerAdd, uint256 amount) private { uint256 _td; uint256 returnAmount; uint256 _totalstaker = stackers.length; if (stakeOn && _totalstaker > 0) { for (uint256 i = 0; i < _totalstaker; i++) { uint256 _rA = ((stacked[stackers[i]]).mul(amount)).div( totalStacked ); claim[stackers[i]][_printerAdd].pendingClaim += _rA; _td = _td.add(_rA); } reseaveReward[_printerAdd] += _td; returnAmount = amount.sub(_td); emit DistributeReward(_printerAdd, _td, _totalstaker); } else { returnAmount = amount; } if (returnAmount > 0) { TransferHelper.safeTransfer( _printerAdd, _callerToken, returnAmount ); } } function stake(uint256 value) external { require( value >= MINIMUM_STAKE_AMOUNT && permission /*re-entrancy when printing permission*/ ); TransferHelper.safeTransferFrom( _callerToken, msg.sender, address(this), value ); stacked[msg.sender] = stacked[msg.sender].add(value); totalStacked = totalStacked.add(value); if (!IsStacker[msg.sender]) { IsStacker[msg.sender] = true; indexByAdd[msg.sender] = stackers.length; stackers.push(msg.sender); } emit Staked(msg.sender, value); } function withdraw(uint256 value, address receiver) external reentrancyGurd { require( IsStacker[msg.sender] && value <= stacked[msg.sender] && permission /*re-entrancy when printing permission*/ ); stacked[msg.sender] = stacked[msg.sender].sub(value); totalStacked = totalStacked.sub(value); TransferHelper.safeTransfer(_callerToken, receiver, value); if (stacked[msg.sender] == 0) { IsStacker[msg.sender] = false; stackers[indexByAdd[msg.sender]] = stackers[stackers.length - 1]; stackers.pop(); emit Withdraw(msg.sender, value, true); } else { emit Withdraw(msg.sender, value, false); } } function claimReward(address _printer) external reentrancyGurd { uint256 _claim = claim[msg.sender][_printer].pendingClaim; require( _claim > 0 && reseaveReward[_printer] >= _claim && permission, /*re-entrancy when printing permission*/ "INSUFFICIENT RESERVE REWARD" ); claim[msg.sender][_printer].pendingClaim -= _claim; claim[msg.sender][_printer].totalCollectedClaim += _claim; reseaveReward[_printer] -= _claim; uint256 ct = (_claim.mul(claimTax)).div(1000000000000000000); if (ct > 0) { TransferHelper.safeTransfer(_printer, BURNED_ADDRESS, ct); } TransferHelper.safeTransfer(_printer, msg.sender, _claim.sub(ct)); emit Claim(msg.sender, _printer, _claim.sub(ct)); } function SafeTransferToken( address _tokenAdd, address to, bool _transferETH ) external onlyOwner returns (bool) { require(to != address(0), "ERC20: transfer to the zero address"); uint256 _surplasAmount = _transferETH ? address(this).balance : (IERC20(_tokenAdd).balanceOf(address(this))).sub( reseaveReward[_tokenAdd] ); require( _surplasAmount > 0, "Transfer amount must be greater than zero" ); if (_transferETH) { TransferHelper.safeTransferETH(to, _surplasAmount); } else TransferHelper.safeTransfer(_tokenAdd, to, _surplasAmount); return true; } function transferOwnership(address _owner) external onlyOwner { require(_owner != address(0), "INVALID ADD"); Owner = _owner; } } contract EGGNOG is IERC20 { using SafeMath for uint256; address public Owner; string constant _name = "EGGNOG"; string constant _symbol = "Eggnog"; uint8 constant _decimals = 18; uint256 public totalSupply = 200000000 * (10**_decimals); // 200M Initial supply uint256 constant maxSupply = 69420000000 * (10**_decimals); // 69B 420M Max Supply; uint256 public BLAST_THRESHOLD = 65000000000 * (10**_decimals); //65B threshold for regular mode uint256 BLAST_THRESHOLD_INCREASING_RATE = 100000000000000000; //10% event SwapBackSuccess( uint256 tokenAmount, uint256 ETHAmountReceived, bool success ); event Tx( uint256 amount, uint256 newAmount, uint256 mintAmount, uint256 contractAmount ); event StakeContractChanges(address Address); event UpgradedMode( string _mode, uint256 ActivateAt, uint256 activatePriceAt ); uint256 public TREASURY_FEE = 300000000000000000; // 20% treasury fee uint256 public PRINTING_FEE = 300000000000000000; // 20% treasury fee address public PRINTER_TOKEN = 0xf26Ff70573ddc8a90Bd7865AF8d7d70B8Ff019bC; //egg address PEG_TOKEN_ADDRESS; ISTAKE public eggnog_stake; IDEXV2ROUTER02 public DEXV2Router = IDEXV2ROUTER02(0x1D368773735ee1E678950B7A97bcA2CafB330CDc); //shadow router02 IDEXV2Pair public DEXV2Pair; struct balanceInfo { uint256 balance; uint256 update; } mapping(address => balanceInfo) _balances; mapping(address => mapping(address => uint256)) _allowances; mapping(address => bool) public IsExcludeFromFee; mapping(address => bool) public IsExcludeFromMaxTx; mapping(address => bool) public IsLiquidityProvider; mapping(address => bool) public AMMPair; bool IsEntered; uint256 public immutable buyFees = 50000000000000000; //5% uint256 public immutable sellFees = 30000000000000000; //3% uint256 immutable Blast_Fee = 8000000000000000; //0.8% bool public BLAST_MODE; bool STABLE_MODE; bool public HATCH_MODE; bool VOLUME_MODE; bool public APY_MODE; bool public PRINTING_ENABLE = true; uint256 constant pegDenominator = 10**(_decimals); // Peg calculation denominator according to decimal number //For APY uint256 public APY_UPDATED_AT; uint256 public Expedted_price; uint256 public APY_PERIOD; uint256 public APY_RATE_PER_PERIOD; //For HFT trading bool HFT; // HFT => High frequency Trading Mode (Demotivate Holder to early sell with high tax) uint256 HFTFee = 20000000000000000; //2% uint256 QuickSellFee = 10000000000000000; //1% uint256 HFTTimingThreshold = 60 * 60; // HFT within an Hour uint256 QuickSellTimingThreshold = 7 * 24 * 60 * 60; // QuickSell with in a week; //For Jump Mode uint256 public Hatch_THRESHOLD = 1000000000 * (10**_decimals); //amount of peg token in lp pool uint256 public Reserve_flactuate_rate = 2000000000000000000; //on 4x of lp growth uint256 public peg_flactuate_rate = 100000000000000000; //10% of peg balance uint256 public RESERVE_PEG_LP; uint256 public LAST_RESERVE_PEG_LP; //For swap back uint256 public RESERVE_FOR_PRINT; uint256 MINIMUM_SWAPBACK = 10000000000000000000; //10 eggnog //Limited TX mode (LTM) bool LTM = true; uint256 immutable GSL = 100000000000000000; // General sell limit (GSL) => 10% of peg $eggnog amount can sell at a time On LLS mode. //For price appreciation and depreciation bool public Buy_Appreciation_Mode; bool public Sell_Depreciation_Mode; uint256 public Sell_Depreciation_Rate; uint256 public Buy_Appreciation_Rate; uint256 public HigherThreshold; uint256 public LowerThreshold; uint256 public App_Rate; uint256 BuyAppTxLimit; uint256 SellDepTxLimit; bool init; uint256 initialPrice; struct route { /// @dev token from address from; /// @dev token to address to; /// @dev is stable route bool stable; } modifier onlyOwner() { require(msg.sender == Owner, "Caller isn't owner"); _; } modifier reentrancyGurd() { require(IsEntered == false); IsEntered = true; _; IsEntered = false; } constructor() { Owner = msg.sender; IsLiquidityProvider[msg.sender] = true; eggnog_stake = new Stake(DEXV2Router.WETH(), msg.sender); IsExcludeFromMaxTx[address(this)] = true; IsExcludeFromMaxTx[address(eggnog_stake)] = true; _balances[msg.sender].balance = totalSupply; } receive() external payable {} function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account].balance; } function transfer(address to, uint256 value) public virtual returns (bool) { _transfer(msg.sender, to, value); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 value) public virtual returns (bool) { require(spender != address(0), "INVALID ZERO ADD"); _allowances[msg.sender][spender] += value; emit Approval(msg.sender, spender, value); return true; } function transferFrom( address from, address to, uint256 value ) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } //////////////////////////////////// internal functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ function _spendAllowance( address owner, address spender, uint256 value ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= value, "Exceed Allowance"); unchecked { _allowances[owner][spender] = currentAllowance - value; } } } function _mint(address account, uint256 value) private { require(account != address(0), "INVALID MINTER ADDRESS"); if (totalSupply < maxSupply) { if (totalSupply.add(value) > maxSupply) { uint256 _r = maxSupply.sub(totalSupply); //shouldn't exceed max supply totalSupply += _r; _balances[account].balance = (_balances[account].balance).add( _r ); } else { _balances[account].balance = (_balances[account].balance).add( value ); totalSupply += value; } } if (totalSupply >= BLAST_THRESHOLD && BLAST_THRESHOLD != maxSupply) { BLAST_MODE = true; BLAST_THRESHOLD = totalSupply == maxSupply ? maxSupply : (BLAST_THRESHOLD.mul(BLAST_THRESHOLD_INCREASING_RATE)).div( pegDenominator ); TREASURY_FEE = PRINTING_FEE = 500000000000000000; emit UpgradedMode("Blast", block.timestamp, Expedted_price); } emit Transfer(address(0), account, value); } function swapTokensForPegToken(uint256 tokenAmount) private returns (uint256 swaped) { // generate the DEX pair path of token -> wETH IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); _allowances[address(this)][address(DEXV2Router)] += tokenAmount; uint256 _preBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(eggnog_stake) ); // execute the swap DEXV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH pathroutes, address(eggnog_stake), block.timestamp ); return (IERC20(PEG_TOKEN_ADDRESS).balanceOf(address(eggnog_stake))).sub( _preBal ); } function swapBack() private { uint256 contractBalance = _balances[address(this)].balance; if (RESERVE_FOR_PRINT < MINIMUM_SWAPBACK) { return; } if (contractBalance >= RESERVE_FOR_PRINT) { uint256 AMountToSwapForPegToken = RESERVE_FOR_PRINT; uint256 _maxSwap = LTM ? MaximumTxOnLTM() : (totalSupply.mul(2)).div(100); //max amount for swapback if (RESERVE_FOR_PRINT > _maxSwap) AMountToSwapForPegToken = _maxSwap; swapTokensForPegToken(AMountToSwapForPegToken); eggnog_stake.swap( address(DEXV2Router), PEG_TOKEN_ADDRESS, PRINTER_TOKEN ); RESERVE_FOR_PRINT = RESERVE_FOR_PRINT.sub(AMountToSwapForPegToken); } } function _transfer( address from, address to, uint256 amount ) private returns (bool) { require(from != address(0) && !AMMPair[to], "INVALID SENDER WALLET"); require( from == address(this) ? true : IsEntered == false, "Reentrancy Err" ); IsEntered = true; uint256 feeAmount; //updating sender balance uint256 fromBalance = _balances[from].balance; require(fromBalance >= amount, "INSUFFICIENT SENDER BALANCE"); unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from].balance = fromBalance - amount; } //ON BUY if ( from == address(DEXV2Pair) && !IsLiquidityProvider[to] && !BLAST_MODE ) { feeAmount = !IsExcludeFromFee[to] ? (amount.mul(buyFees)).div(pegDenominator) : 0; _brebase(amount); _update(from, to, amount.sub(feeAmount)); //update receiver balance _balances[to].update = block.timestamp; // update buy timestamp For HFT trading } //ON SELL else if ( to == address(DEXV2Pair) && !IsLiquidityProvider[from] && !BLAST_MODE ) { uint256 _sellAmount = MaximumTxOnLTM(); require( !IsExcludeFromMaxTx[from] && LTM ? amount <= _sellAmount : true, "EXCEED LTM SELL LIMIT" ); feeAmount = !IsExcludeFromFee[from] && Sell_Depreciation_Mode ? (amount.mul(sellFees)).div(pegDenominator) : 0; //No sell taxes in hard peg stable mode; if (HFT && !IsExcludeFromFee[from]) { uint256 HFTaxAmount = (block.timestamp).sub( _balances[from].update ) <= HFTTimingThreshold ? (amount.mul(HFTFee)).div(pegDenominator) : (block.timestamp).sub(_balances[from].update) <= QuickSellTimingThreshold ? (amount.mul(QuickSellFee.mul(10))).div(pegDenominator) : 0; feeAmount = feeAmount.add(HFTaxAmount); } if ( from != address(this) && from != address(eggnog_stake) && !IsExcludeFromFee[from] && PRINTING_ENABLE ) swapBack(); _srebase(from, amount.sub(feeAmount), feeAmount); } //if(isTransfer || IsLiquidityProvider[from] || IsLiquidityProvider[to] || BLAST_MODE) else { if (BLAST_MODE) { if (from == address(DEXV2Pair) && !IsExcludeFromFee[to]) feeAmount = (amount.mul(Blast_Fee)).div(pegDenominator); if (to == address(DEXV2Pair) && !IsExcludeFromFee[from]) { uint256 _price; feeAmount = (amount.mul(Blast_Fee)).div(pegDenominator); if (PRINTING_ENABLE && from != address(this)) swapBack(); (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair .getReserves(); uint256 amountWithoutFee = amount.sub(feeAmount); IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); uint _amountOut = DEXV2Router.getAmountsOut(amountWithoutFee, pathroutes)[1]; if (DEXV2Pair.token0() == address(this)) { _price = ((reserve1.sub(_amountOut)).mul(pegDenominator)) .div(reserve0.add(amountWithoutFee)); RESERVE_PEG_LP = reserve1.sub(_amountOut); } else { _price = ((reserve0.sub(_amountOut)).mul(pegDenominator)) .div(reserve1.add(amountWithoutFee)); RESERVE_PEG_LP = reserve0.sub(_amountOut); } if (_price <= Expedted_price) { BLAST_MODE = false; Expedted_price = _price; TREASURY_FEE = PRINTING_FEE = 300000000000000000; _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; } } } else { if (from != address(DEXV2Pair) && to != address(DEXV2Pair)) DISTRIBUTE(); if (IsLiquidityProvider[from] || IsLiquidityProvider[to]) { IsLiquidityProvider[from] = false; IsLiquidityProvider[to] = false; } } _update(from, to, amount.sub(feeAmount)); //update receiver balances } if (feeAmount > 0) { if (PRINTING_ENABLE) { uint256 printingAmount = ( feeAmount.mul(PRINTING_FEE.add(TREASURY_FEE)) ).div(pegDenominator); RESERVE_FOR_PRINT += printingAmount; } _update(from, address(this), feeAmount); } IsEntered = false; return true; } function _update( address from, address to, uint256 value ) internal { require(to != address(0), "INVALID RECEIVER WALLET"); unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to].balance += value; } emit Transfer(from, to, value); } function _brebase(uint256 amount) private { uint256 newAmount; uint256 mintAmount; uint256 contractAmount; uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; //uint256 pairPegBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf(address(DEXV2Pair)); //_apy(); // APY rising (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: PEG_TOKEN_ADDRESS, to: address(this), stable: false }); uint256[] memory amounts = DEXV2Router.getAmountsIn(amount, pathroutes); if (DEXV2Pair.token0() == address(this)) RESERVE_PEG_LP = reserve1.add(amounts[0]); else RESERVE_PEG_LP = reserve0.add(amounts[0]); newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(Expedted_price); //expected new pair LADDER balance for repeg price if (Buy_Appreciation_Mode) { //On Buy appreciation uint256 newPrice = VOLUME_MODE ? Expedted_price.add( (amount.mul(HigherThreshold.sub(Expedted_price))).div( pairEggnogBal ) ) : Expedted_price.add(Buy_Appreciation_Rate); uint256 price = (pegDenominator.mul(RESERVE_PEG_LP)).div( pairEggnogBal.add(amount) ); if (price > newPrice && newPrice > 0 && newPrice > Expedted_price) { newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(newPrice); Expedted_price = newPrice; } } if (newAmount > pairEggnogBal) { uint256 supplyAmount = newAmount.sub(pairEggnogBal); //require amount to repeg with added more vlue in pair uint256 _rb = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); //contract available balance without printing reserve to repeg if (_rb > supplyAmount) { //is contract reserve is enough for repeg _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(supplyAmount); _update(address(this), address(DEXV2Pair), supplyAmount); } else { mintAmount = supplyAmount.sub(_rb); //need to mint new token to repeg if (_rb > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(_rb); _update(address(this), address(DEXV2Pair), _rb); } if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } else { //adjust the balance to repeg if pair has exceed amount then require contractAmount = pairEggnogBal.sub(newAmount); //transfer extra funds to contract from pair _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).sub(contractAmount); _update(address(DEXV2Pair), address(this), contractAmount); } emit Tx(amount, newAmount, mintAmount, contractAmount); } function _srebase( address sender, uint256 _amount, uint256 _fee ) private { uint256 contractAmount; uint256 newAmount; uint256 mintAmount; (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; uint256 pairPegTokenBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(DEXV2Pair) ); if (msg.sender == address(DEXV2Router)) { uint256 optimalAmount = ((_amount.add(_fee)).mul(pairPegTokenBal)) .div(pairEggnogBal); require( address(DEXV2Router).balance < optimalAmount && IERC20(PEG_TOKEN_ADDRESS).allowance( sender, address(DEXV2Router) ) < optimalAmount, "Only LiquidityAdder can addLiquidity or remove WNATIVE allowance in router to sell" ); } IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); if(DEXV2Pair.token0() == address(this)) RESERVE_PEG_LP = reserve1.sub(DEXV2Router.getAmountsOut(_amount, pathroutes)[1]); else RESERVE_PEG_LP = reserve0.sub(DEXV2Router.getAmountsOut(_amount, pathroutes)[1]); if (sender != address(this)) { //if contract is selling for printing, peg will remain stable if (pairPegTokenBal >= Hatch_THRESHOLD && !HATCH_MODE) { HATCH_MODE = true; LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } if ( (HATCH_MODE && RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator)) || (HATCH_MODE && RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator)) ) { if ( RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.add( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } if ( RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.sub( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div( Expedted_price ); if (Buy_Appreciation_Mode || Sell_Depreciation_Mode) _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep threshold according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } else _apy(); if ( Sell_Depreciation_Mode && sender != address(this) && Expedted_price.sub(LowerThreshold) > 100 ) { uint256 newPrice = VOLUME_MODE ? Expedted_price.sub( (_amount.mul(Expedted_price.sub(LowerThreshold))).div( pairEggnogBal ) ) : Expedted_price.sub(Sell_Depreciation_Rate); newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(newPrice); uint256 _price = (pegDenominator.mul(RESERVE_PEG_LP)).div( pairEggnogBal ); if (_price > LowerThreshold && newPrice > LowerThreshold) { newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div( Expedted_price ); Expedted_price = newPrice; } } } newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(Expedted_price); if (newAmount > pairEggnogBal) { uint256 supplyAmount = newAmount.sub(pairEggnogBal); //require amount to repeg with added more value in pair if (_amount > supplyAmount) { //if selling amount is enough _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(supplyAmount); contractAmount = _amount.sub(supplyAmount); _balances[address(this)].balance = ( _balances[address(this)].balance ).add(contractAmount); } else { _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(_amount); uint256 surplasAmount = supplyAmount.sub(_amount); uint256 _rb = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); if (_rb > surplasAmount) { //is selling and contract reserve is enough _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(surplasAmount); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(surplasAmount); emit Transfer( address(this), address(DEXV2Pair), surplasAmount ); } else { mintAmount = surplasAmount.sub(_rb); //if need to mint new token if (_rb > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(_rb); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(_rb); emit Transfer(address(this), address(DEXV2Pair), _rb); } if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } } else { //adjust the balance to repeg if pair has exceed amount then require uint256 expectedDiff = pairEggnogBal.sub(newAmount); uint256 expectedPairAmount = pairEggnogBal.sub(expectedDiff); _balances[address(DEXV2Pair)].balance = expectedPairAmount.sub( _amount.add(_fee) ); contractAmount = _amount.add(expectedDiff); DEXV2Pair.sync(); //external syncing reserve to insure expected return for seller inspite repeging _balances[address(DEXV2Pair)].balance = expectedPairAmount; //then assign expected balance for repeg //transfer extra funds to contract from pair _balances[address(this)].balance = ( _balances[address(this)].balance ).add(contractAmount); emit Transfer(address(DEXV2Pair), address(this), contractAmount); } emit Transfer(sender, address(DEXV2Pair), _amount); emit Tx(_amount, newAmount, mintAmount, contractAmount); } function setAPY( uint256 _apy_rate_per_period, uint256 _upgradingPeriod, bool _apy_mode ) external onlyOwner { APY_PERIOD = _upgradingPeriod; if (_upgradingPeriod > 0) { APY_RATE_PER_PERIOD = _apy_rate_per_period.add(pegDenominator); APY_UPDATED_AT = block.timestamp; APY_MODE = _apy_mode; if (_apy_mode) emit UpgradedMode("APY", block.timestamp, Expedted_price); } } function _apy() private returns (bool) { if (APY_MODE) { uint256 _periods = ((block.timestamp).sub(APY_UPDATED_AT)).div( APY_PERIOD ); //how many period over since last peg rise by apy if (_periods > 0) { uint256 newPrice = Expedted_price; for (uint256 i = 0; i < _periods; i++) { uint256 updatePrice = (newPrice.mul(APY_RATE_PER_PERIOD)) .div(pegDenominator); newPrice = updatePrice; } APY_UPDATED_AT += (APY_PERIOD.mul(_periods)); //last period updated timestamp Expedted_price = newPrice; if (Buy_Appreciation_Mode) _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price } } return true; } function DISTRIBUTE() public { if ((APY_MODE && BLAST_MODE) || (HATCH_MODE && BLAST_MODE)) { uint256 _prePrice = Expedted_price; _apy(); //APY BPEGV RISING if ( (HATCH_MODE && RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator)) || (HATCH_MODE && RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator)) ) { if ( RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.add( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } if ( RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.sub( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } if (_prePrice != Expedted_price) _recover(Expedted_price); } } function HARD_UPGRADE(uint256 _price, bool _recoveringToInitialPhase) external onlyOwner { // if(init == false){ // init = true; // initialPrice = priceNow(); // } _recover(_price); if (_recoveringToInitialPhase) { STABLE_MODE = true; Buy_Appreciation_Mode = false; Sell_Depreciation_Mode = false; HATCH_MODE = false; APY_MODE = false; emit UpgradedMode("HardPeg", block.timestamp, Expedted_price); } } function _recover(uint256 _basePrice) private { uint256 supplyAmount; uint256 newAmount; (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; if (DEXV2Pair.token0() == address(this)) { newAmount = (pegDenominator.mul(reserve1)).div(_basePrice); } else { newAmount = (pegDenominator.mul(reserve0)).div(_basePrice); } if (pairEggnogBal > newAmount) { //transfer surplas amount to contract for peg repeg uint256 contractAmount = pairEggnogBal.sub(newAmount); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).sub(contractAmount); _update(address(DEXV2Pair), address(this), contractAmount); } else { supplyAmount = newAmount.sub(pairEggnogBal); uint256 contractReserve = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); if (contractReserve >= supplyAmount) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(supplyAmount); _update(address(this), address(DEXV2Pair), supplyAmount); } else { if (contractReserve > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(contractReserve); _update(address(this), address(DEXV2Pair), contractReserve); } uint256 mintAmount = supplyAmount.sub(contractReserve); if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } //force syncing to get wanted reserve DEXV2Pair.sync(); Expedted_price = _basePrice; } function _upgradeApp( uint256 _appRate, bool _ba, bool _sd, bool _volumeMode, uint256 _buyTxLimit, uint256 _sellTxLimit ) private { uint256 _app = (Expedted_price.mul(_appRate)).div(pegDenominator); HigherThreshold = Expedted_price.add(_app); LowerThreshold = Expedted_price.sub(_app); App_Rate = _appRate; STABLE_MODE = !(_ba || _sd); // price stability will false on app or dep turn on. if (!_volumeMode) { // Peg App. and Dep. will count according to Number Of Txs if (_ba) { Buy_Appreciation_Mode = _ba; Buy_Appreciation_Rate = _app.div(_buyTxLimit); BuyAppTxLimit = _buyTxLimit; } if (_sd) { Sell_Depreciation_Mode = _sd; Sell_Depreciation_Rate = _app.div(_sellTxLimit); SellDepTxLimit = _sellTxLimit; } } else { // Peg App. and Dep. will count according to volume Of Txs Buy_Appreciation_Mode = _ba; Sell_Depreciation_Mode = _sd; } VOLUME_MODE = _volumeMode; if (!STABLE_MODE) emit UpgradedMode("App", block.timestamp, Expedted_price); } function upgradeAppreciationAndDepreciation( uint256 _appRate, bool _ba, bool _sd, bool _volumeMode, uint256 _buyTxLimit, uint256 _sellTxLimit ) external onlyOwner { _upgradeApp(_appRate, _ba, _sd, _volumeMode, _buyTxLimit, _sellTxLimit); } function MaximumTxOnLTM() public view returns (uint256 sellAmount) { uint256 _pegBal = _balances[address(DEXV2Pair)].balance; sellAmount = (_pegBal.mul(GSL)).div(pegDenominator); } function priceNow() public view returns (uint256 _pegPriceWithDecimal) { (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); if (DEXV2Pair.token0() == address(this)) { _pegPriceWithDecimal = (reserve1.mul(pegDenominator)).div(reserve0); } else { _pegPriceWithDecimal = (reserve0.mul(pegDenominator)).div(reserve1); } } ///////////// settings ///////////////////// function setBlastMode( uint256 _theshold, uint256 _rate, bool _execute ) external onlyOwner { BLAST_MODE = _execute; BLAST_THRESHOLD = _theshold; BLAST_THRESHOLD_INCREASING_RATE = _rate.add(pegDenominator); } function setAMMPair( address[] calldata pairAdds, bool _setPeg, bool _isBlock ) external onlyOwner { if(_setPeg){ require(pairAdds.length == 1, "only One pair"); DEXV2Pair = IDEXV2Pair(pairAdds[0]); PEG_TOKEN_ADDRESS = pairAdds[0]; IsExcludeFromMaxTx[pairAdds[0]] = true; }else{ for(uint i ; i < pairAdds.length; i++){ AMMPair[pairAdds[i]] = _isBlock; } } } function transferOwnership(address _owner) external onlyOwner { require(_owner != address(0), "INVALID ADD"); Owner = _owner; } function setRouter(address _routerAdd, bool _stable) external onlyOwner { DEXV2Router = IDEXV2ROUTER02(_routerAdd); if (PEG_TOKEN_ADDRESS != address(0)) { address _pairAdd = IDEXV2Factory(DEXV2Router.factory()).getPair( PEG_TOKEN_ADDRESS, address(this), _stable ); if (_pairAdd == address(0)) { _pairAdd = IDEXV2Factory(DEXV2Router.factory()).createPair( PEG_TOKEN_ADDRESS, address(this), _stable ); } DEXV2Pair = IDEXV2Pair(_pairAdd); IsExcludeFromMaxTx[_pairAdd] = true; } } function setHatching( uint256 _reserve_rate, uint256 _peg_rate, uint256 _hatchThreshold, bool execute ) external onlyOwner { Reserve_flactuate_rate = _reserve_rate; peg_flactuate_rate = _peg_rate; LAST_RESERVE_PEG_LP = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(DEXV2Pair) ); Hatch_THRESHOLD = _hatchThreshold; HATCH_MODE = execute; } function setPrinting( address _printer, uint256 _minimum_swapback, bool _printing ) external onlyOwner { require(_printer != address(0)); PRINTING_ENABLE = _printing; PRINTER_TOKEN = _printer; MINIMUM_SWAPBACK = _minimum_swapback; } function setLiquidityProvider(address account, bool execute) external onlyOwner { require(account != address(0)); IsLiquidityProvider[account] = execute; } function setExempt( address[] calldata _exempters, bool _execute, uint256 _pos ) external onlyOwner { for (uint256 i = 0; i < _exempters.length; i++) { require(_exempters[i] != address(0)); if (_pos == 1) IsExcludeFromFee[_exempters[i]] = _execute; else if (_pos == 2) IsExcludeFromMaxTx[_exempters[i]] = _execute; else { IsExcludeFromFee[_exempters[i]] = _execute; IsExcludeFromMaxTx[_exempters[i]] = _execute; } } } function setHFT( uint256 _hft, uint256 _quicksellfee, uint256 _hftThreshole, uint256 _qsThreshole, bool execute ) external onlyOwner { HFTFee = _hft; QuickSellFee = _quicksellfee; HFTTimingThreshold = _hftThreshole; QuickSellTimingThreshold = _qsThreshole; HFT = execute; } function SafeTransferToken( address _tokenAdd, address to, uint256 amount, bool _transferETH ) public reentrancyGurd onlyOwner { require(to != address(0), "ERC20: transfer to the zero address"); uint256 _contractBal = _transferETH ? address(this).balance : IERC20(_tokenAdd).balanceOf(address(this)); require( amount > 0 && amount <= _contractBal, "Transfer amount must be greater than zero or lower than reserve" ); if (_transferETH) { TransferHelper.safeTransferETH(to, amount); } else TransferHelper.safeTransfer(_tokenAdd, to, amount); } function airDrop(address[] memory to, uint256[] memory amount) public reentrancyGurd onlyOwner { require(to.length == amount.length); for (uint256 i = 0; i < to.length; i++) { require(to[i] != address(0), "ERC20: transfer to the zero address"); require( amount[i] > 0 && amount[i] <= (_balances[address(this)].balance).sub(RESERVE_FOR_PRINT), "Transfer amount must be greater than zero or Lower than reserve" ); bool success = _transfer(address(this), to[i], amount[i]); require(success, "ERC20 token transfer failed"); } } function setStakeContract(address _add) external onlyOwner { require( _add != address(0) && _add != address(eggnog_stake), "Invalid Add" ); eggnog_stake = ISTAKE(_add); emit StakeContractChanges(_add); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Address","type":"address"}],"name":"StakeContractChanges","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"contractAmount","type":"uint256"}],"name":"Tx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_mode","type":"string"},{"indexed":false,"internalType":"uint256","name":"ActivateAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"activatePriceAt","type":"uint256"}],"name":"UpgradedMode","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_RATE_PER_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_UPDATED_AT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"App_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Buy_Appreciation_Mode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Buy_Appreciation_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEXV2Pair","outputs":[{"internalType":"contract IDEXV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEXV2Router","outputs":[{"internalType":"contract IDEXV2ROUTER02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISTRIBUTE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Expedted_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bool","name":"_recoveringToInitialPhase","type":"bool"}],"name":"HARD_UPGRADE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"HATCH_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Hatch_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HigherThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsExcludeFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsLiquidityProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAST_RESERVE_PEG_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LowerThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaximumTxOnLTM","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTER_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTING_ENABLE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_FOR_PRINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_PEG_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Reserve_flactuate_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"_transferETH","type":"bool"}],"name":"SafeTransferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sell_Depreciation_Mode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sell_Depreciation_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airDrop","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eggnog_stake","outputs":[{"internalType":"contract ISTAKE","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peg_flactuate_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceNow","outputs":[{"internalType":"uint256","name":"_pegPriceWithDecimal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairAdds","type":"address[]"},{"internalType":"bool","name":"_setPeg","type":"bool"},{"internalType":"bool","name":"_isBlock","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_apy_rate_per_period","type":"uint256"},{"internalType":"uint256","name":"_upgradingPeriod","type":"uint256"},{"internalType":"bool","name":"_apy_mode","type":"bool"}],"name":"setAPY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_theshold","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_execute","type":"bool"}],"name":"setBlastMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exempters","type":"address[]"},{"internalType":"bool","name":"_execute","type":"bool"},{"internalType":"uint256","name":"_pos","type":"uint256"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hft","type":"uint256"},{"internalType":"uint256","name":"_quicksellfee","type":"uint256"},{"internalType":"uint256","name":"_hftThreshole","type":"uint256"},{"internalType":"uint256","name":"_qsThreshole","type":"uint256"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setHFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserve_rate","type":"uint256"},{"internalType":"uint256","name":"_peg_rate","type":"uint256"},{"internalType":"uint256","name":"_hatchThreshold","type":"uint256"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setHatching","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_printer","type":"address"},{"internalType":"uint256","name":"_minimum_swapback","type":"uint256"},{"internalType":"bool","name":"_printing","type":"bool"}],"name":"setPrinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAdd","type":"address"},{"internalType":"bool","name":"_stable","type":"bool"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"setStakeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_appRate","type":"uint256"},{"internalType":"bool","name":"_ba","type":"bool"},{"internalType":"bool","name":"_sd","type":"bool"},{"internalType":"bool","name":"_volumeMode","type":"bool"},{"internalType":"uint256","name":"_buyTxLimit","type":"uint256"},{"internalType":"uint256","name":"_sellTxLimit","type":"uint256"}],"name":"upgradeAppreciationAndDepreciation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
610100604052620000136012600a620003d1565b6200002390630bebc200620003e9565b600155620000346012600a620003d1565b6200004590640f224d4a00620003e9565b60025567016345785d8a0000600355670429d069189e00006004819055600555600680546001600160a01b031990811673f26ff70573ddc8a90bd7865af8d7d70b8ff019bc1790915560098054909116731d368773735ee1e678950b7a97bca2cafb330cdc17905566b1a2bc2ec50000608052666a94d74f43000060a052661c6bf52634000060c0526011805460ff60301b1916660100000000000017905566470de4df820000601755662386f26fc10000601855610e1060195562093a80601a55620001156012600a620003d1565b6200012590633b9aca00620003e9565b601b55671bc16d674ec80000601c5567016345785d8a0000601d819055678ac7230489e800006021556022805460ff1916600117905560e0523480156200016b57600080fd5b50600080546001600160a01b0319163390811782558152600f6020908152604091829020805460ff1916600117905560095482516315ab88c960e31b815292516001600160a01b03919091169263ad5c46489260048083019391928290030181865afa158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000206919062000403565b336040516200021590620002ae565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000249573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03928316178155306000908152600e60209081526040808320805460ff19908116600190811790925594549095168352808320805490941685179093559254338252600b90935220556200042e565b6120048062005af283390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000313578160001904821115620002f757620002f7620002bc565b808516156200030557918102915b93841c9390800290620002d7565b509250929050565b6000826200032c57506001620003cb565b816200033b57506000620003cb565b81600181146200035457600281146200035f576200037f565b6001915050620003cb565b60ff841115620003735762000373620002bc565b50506001821b620003cb565b5060208310610133831016604e8410600b8410161715620003a4575081810a620003cb565b620003b08383620002d2565b8060001904821115620003c757620003c7620002bc565b0290505b92915050565b6000620003e260ff8416836200031b565b9392505050565b8082028115828204841417620003cb57620003cb620002bc565b6000602082840312156200041657600080fd5b81516001600160a01b0381168114620003e257600080fd5b60805160a05160c05160e0516156756200047d600039600061162e0152600081816127b6015261282f015260008181610a3501526125b3015260008181610a69015261242001526156756000f3fe6080604052600436106103b15760003560e01c80639a99d574116101e7578063d4c48e5a1161010d578063ecbaaa65116100a0578063f2fde38b1161006f578063f2fde38b14610b42578063f52ec0a614610b62578063feaa7f2914610b78578063ffefc7d314610b8d57600080fd5b8063ecbaaa6514610acb578063f12cc5ca14610aeb578063f12dda8b14610b01578063f245e51a14610b2257600080fd5b8063e0f3ccf5116100dc578063e0f3ccf514610a23578063e4748b9e14610a57578063e7ee883014610a8b578063e8f6ae2914610aab57600080fd5b8063d4c48e5a14610991578063dd47a7e7146109b1578063dd62ed3e146109c7578063de0daf1014610a0d57600080fd5b8063b040c39b11610185578063c3c6467411610154578063c3c6467414610925578063c85256c114610945578063c8f50c8f1461095b578063cdd9aa0f1461097157600080fd5b8063b040c39b146108af578063b4a99a4e146108c5578063b9ac8099146108e5578063bf468f901461090557600080fd5b8063a70dbe12116101c1578063a70dbe121461083a578063a9059cbb1461085b578063aae7539c1461087b578063ae613b411461089057600080fd5b80639a99d574146107ee5780639ab23382146108045780639ac740331461082457600080fd5b8063509484d5116102d757806370a082311161026a5780638ce1a483116102395780638ce1a483146107695780638e28c9771461077f57806393e14fc21461079f57806395d89b41146107bf57600080fd5b806370a08231146106ce57806380fef5af1461070457806384421f2a1461071957806387f30d601461074957600080fd5b806367e417f7116102a657806367e417f71461065257806368cb2642146106685780636cad473c146106885780636facfe0d1461069e57600080fd5b8063509484d5146105cc57806356e7718c146105ec57806358fcf5e91461061c57806365216a411461063257600080fd5b806327033ae81161034f578063387c0d971161031e578063387c0d971461052e57806342dcdbaf1461054457806346811ed11461057c5780634fc9ab151461059c57600080fd5b806327033ae8146104c5578063313ce567146104e657806334ffe7531461050257806337d753cf1461051857600080fd5b8063095ea7b31161038b578063095ea7b31461044d57806318160ddd1461046d57806318a5a9eb1461048357806323b872dd146104a557600080fd5b806301551222146103bd57806304ababba146103f157806306fdde031461041557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506022546103dc90610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156103fd57600080fd5b5061040760155481565b6040519081526020016103e8565b34801561042157600080fd5b506040805180820190915260068152654547474e4f4760d01b60208201525b6040516103e89190614c03565b34801561045957600080fd5b506103dc610468366004614c4b565b610ba3565b34801561047957600080fd5b5061040760015481565b34801561048f57600080fd5b506104a361049e366004614c85565b610c75565b005b3480156104b157600080fd5b506103dc6104c0366004614cd8565b610e0f565b3480156104d157600080fd5b506011546103dc906301000000900460ff1681565b3480156104f257600080fd5b50604051601281526020016103e8565b34801561050e57600080fd5b50610407601c5481565b34801561052457600080fd5b5061040760275481565b34801561053a57600080fd5b5061040760025481565b34801561055057600080fd5b50600854610564906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b34801561058857600080fd5b50600954610564906001600160a01b031681565b3480156105a857600080fd5b506103dc6105b7366004614d19565b60106020526000908152604090205460ff1681565b3480156105d857600080fd5b506104a36105e7366004614d19565b610e34565b3480156105f857600080fd5b506103dc610607366004614d19565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061040760245481565b34801561063e57600080fd5b506104a361064d366004614e0c565b610f12565b34801561065e57600080fd5b50610407601e5481565b34801561067457600080fd5b506104a3610683366004614f1a565b611141565b34801561069457600080fd5b5061040760255481565b3480156106aa57600080fd5b506103dc6106b9366004614d19565b600d6020526000908152604090205460ff1681565b3480156106da57600080fd5b506104076106e9366004614d19565b6001600160a01b03166000908152600b602052604090205490565b34801561071057600080fd5b506104a3611303565b34801561072557600080fd5b506103dc610734366004614d19565b600e6020526000908152604090205460ff1681565b34801561075557600080fd5b506104a3610764366004614f77565b6114fb565b34801561077557600080fd5b5061040760045481565b34801561078b57600080fd5b506022546103dc9062010000900460ff1681565b3480156107ab57600080fd5b50600654610564906001600160a01b031681565b3480156107cb57600080fd5b506040805180820190915260068152654567676e6f6760d01b6020820152610440565b3480156107fa57600080fd5b50610407601d5481565b34801561081057600080fd5b506104a361081f366004614fdc565b61153b565b34801561083057600080fd5b5061040760235481565b34801561084657600080fd5b506011546103dc90600160301b900460ff1681565b34801561086757600080fd5b506103dc610876366004614c4b565b6115e3565b34801561088757600080fd5b506104076115fa565b34801561089c57600080fd5b506011546103dc90610100900460ff1681565b3480156108bb57600080fd5b5061040760135481565b3480156108d157600080fd5b50600054610564906001600160a01b031681565b3480156108f157600080fd5b506104a361090036600461500c565b611658565b34801561091157600080fd5b506104a3610920366004615045565b611718565b34801561093157600080fd5b506104a3610940366004615092565b611767565b34801561095157600080fd5b5061040760125481565b34801561096757600080fd5b5061040760055481565b34801561097d57600080fd5b50600a54610564906001600160a01b031681565b34801561099d57600080fd5b506104a36109ac3660046150c0565b6119e6565b3480156109bd57600080fd5b5061040760145481565b3480156109d357600080fd5b506104076109e23660046150f7565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a1957600080fd5b5061040760265481565b348015610a2f57600080fd5b506104077f000000000000000000000000000000000000000000000000000000000000000081565b348015610a6357600080fd5b506104077f000000000000000000000000000000000000000000000000000000000000000081565b348015610a9757600080fd5b506104a3610aa636600461500c565b611a69565b348015610ab757600080fd5b506104a3610ac6366004615092565b611ac9565b348015610ad757600080fd5b506104a3610ae6366004615125565b611b31565b348015610af757600080fd5b50610407601f5481565b348015610b0d57600080fd5b506011546103dc90600160281b900460ff1681565b348015610b2e57600080fd5b506104a3610b3d366004615182565b611cfe565b348015610b4e57600080fd5b506104a3610b5d366004614d19565b611dcb565b348015610b6e57600080fd5b5061040760205481565b348015610b8457600080fd5b50610407611e5b565b348015610b9957600080fd5b50610407601b5481565b60006001600160a01b038316610bf35760405162461bcd60e51b815260206004820152601060248201526f125395905312510816915493c810511160821b60448201526064015b60405180910390fd5b336000908152600c602090815260408083206001600160a01b038716845290915281208054849290610c269084906151ce565b90915550506040518281526001600160a01b0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259060200160405180910390a35060015b92915050565b60115460ff1615610c8557600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610cbe5760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038316610ce45760405162461bcd60e51b8152600401610bea9061520d565b600081610d58576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d539190615250565b610d5a565b475b9050600083118015610d6c5750808311155b610dde5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72206c6f776572207468616e2072657365727665006064820152608401610bea565b8115610df357610dee8484611fb8565b610dfe565b610dfe858585612081565b50506011805460ff19169055505050565b600033610e1d858285612195565b610e28858585612237565b50600195945050505050565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b03811615801590610e8457506008546001600160a01b03828116911614155b610ebe5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590810591960aa1b6044820152606401610bea565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527fc3eb9c17db91ff277fbf18fe474a08cd23c7089279c75f51f8a0b92cc306f9469060200160405180910390a150565b60115460ff1615610f2257600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610f5b5760405162461bcd60e51b8152600401610bea906151e1565b8051825114610f6957600080fd5b60005b82518110156111325760006001600160a01b0316838281518110610f9257610f92615269565b60200260200101516001600160a01b031603610fc05760405162461bcd60e51b8152600401610bea9061520d565b6000828281518110610fd457610fd4615269565b602002602001015111801561101f575060208054306000908152600b90925260409091205461100291612cf9565b82828151811061101457611014615269565b602002602001015111155b6110915760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72204c6f776572207468616e2072657365727665006064820152608401610bea565b60006110d0308584815181106110a9576110a9615269565b60200260200101518585815181106110c3576110c3615269565b6020026020010151612237565b90508061111f5760405162461bcd60e51b815260206004820152601b60248201527f455243323020746f6b656e207472616e73666572206661696c656400000000006044820152606401610bea565b508061112a8161527f565b915050610f6c565b50506011805460ff1916905550565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610bea906151e1565b60005b838110156112fc57600085858381811061118a5761118a615269565b905060200201602081019061119f9190614d19565b6001600160a01b0316036111b257600080fd5b816001036112135782600d60008787858181106111d1576111d1615269565b90506020020160208101906111e69190614d19565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556112ea565b816002036112325782600e60008787858181106111d1576111d1615269565b82600d600087878581811061124957611249615269565b905060200201602081019061125e9190614d19565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082600e60008787858181106112ac576112ac615269565b90506020020160208101906112c19190614d19565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806112f48161527f565b91505061116e565b5050505050565b601154600160281b900460ff1680156113235750601154610100900460ff165b8061134957506011546301000000900460ff1680156113495750601154610100900460ff165b156114f957601354611359612d5c565b506011546301000000900460ff1680156113ae57506113a961137d6012600a61537c565b6113a361139a601c546012600a611394919061537c565b90612e53565b601f5490612eb2565b90612f34565b601e54115b806113f957506011546301000000900460ff1680156113f957506113f46113d76012600a61537c565b6113a361139a601c546012600a6113ee919061537c565b90612cf9565b601e54105b156114e35761140d61137d6012600a61537c565b601e541115611444576114406114376114286012600a61537c565b601d546013546113a391612eb2565b60135490612e53565b6013555b6114536113d76012600a61537c565b601e54101561147b5761147761146e6114286012600a61537c565b60135490612cf9565b6013555b6027546022546011546028546029546114b2949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b601e54601f55601354604051600080516020615600833981519152916114da9142919061538b565b60405180910390a15b60135481146114f7576114f76013546130f3565b505b565b6000546001600160a01b031633146115255760405162461bcd60e51b8152600401610bea906151e1565b611533868686868686612f8f565b505050505050565b6000546001600160a01b031633146115655760405162461bcd60e51b8152600401610bea906151e1565b61156e826130f3565b80156115df57601180546022805462ffff001916905565ff00ffff0000191662010000179055601354604080516060808252600790820152664861726450656760c81b6080820152426020820152908101919091526000805160206156008339815191529060a00160405180910390a15b5050565b60006115f0338484612237565b5060019392505050565b600a80546001600160a01b03166000908152600b60205260408120549091611652906116289060129061537c565b6113a3837f0000000000000000000000000000000000000000000000000000000000000000612eb2565b91505090565b6000546001600160a01b031633146116825760405162461bcd60e51b8152600401610bea906151e1565b60148290558115611713576116a361169c6012600a61537c565b8490612e53565b601555426012556011805482158015600160281b0265ff00000000001990921691909117909155611713576013546040805160608082526003908201526241505960e81b608082015242602082015280820192909252516000805160206156008339815191529181900360a00190a15b505050565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610bea906151e1565b601794909455601892909255601955601a556016805460ff1916911515919091179055565b6000546001600160a01b031633146117915760405162461bcd60e51b8152600401610bea906151e1565b600980546001600160a01b0319166001600160a01b038481169190911790915560075416156115df576009546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611804573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182891906153b7565b6007546040516306801cc360e41b81526001600160a01b0391821660048201523060248201528415156044820152911690636801cc3090606401602060405180830381865afa15801561187f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a391906153b7565b90506001600160a01b0381166119aa57600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a91906153b7565b6007546040516320b7f73960e21b81526001600160a01b03918216600482015230602482015284151560448201529116906382dfdce4906064016020604051808303816000875af1158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a791906153b7565b90505b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600e60205260409020805460ff191660011790555050565b6000546001600160a01b03163314611a105760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038316611a2357600080fd5b60118054911515600160301b0266ff00000000000019909216919091179055600680546001600160a01b039093166001600160a01b031990931692909217909155602155565b6000546001600160a01b03163314611a935760405162461bcd60e51b8152600401610bea906151e1565b6011805461ff001916610100831515021790556002839055611ac1611aba6012600a61537c565b8390612e53565b600355505050565b6000546001600160a01b03163314611af35760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038216611b0657600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b5b5760405162461bcd60e51b8152600401610bea906151e1565b8115611c875760018314611ba15760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9027b732903830b4b960991b6044820152606401610bea565b83836000818110611bb457611bb4615269565b9050602002016020810190611bc99190614d19565b600a80546001600160a01b0319166001600160a01b03929092169190911790558383600081611bfa57611bfa615269565b9050602002016020810190611c0f9190614d19565b600780546001600160a01b0319166001600160a01b03929092169190911790556001600e600086868281611c4557611c45615269565b9050602002016020810190611c5a9190614d19565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611cf8565b60005b838110156112fc578160106000878785818110611ca957611ca9615269565b9050602002016020810190611cbe9190614d19565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611cf08161527f565b915050611c8a565b50505050565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610bea906151e1565b601c849055601d839055600754600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da29190615250565b601f55601b919091556011805491151563010000000263ff000000199092169190911790555050565b6000546001600160a01b03163314611df55760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038116611e395760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b6044820152606401610bea565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed791906153f0565b506001600160701b031691506001600160701b03169150306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f91906153b7565b6001600160a01b031603611f9e57611f97826113a3611f906012600a61537c565b8490612eb2565b9250505090565b611f97816113a3611fb16012600a61537c565b8590612eb2565b604080516000808252602082019092526001600160a01b038416908390604051611fe29190615435565b60006040518083038185875af1925050503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b50509050806117135760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610bea565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120dd9190615435565b6000604051808303816000865af19150503d806000811461211a576040519150601f19603f3d011682016040523d82523d6000602084013e61211f565b606091505b50915091508180156121495750805115806121495750808060200190518101906121499190615451565b6112fc5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610bea565b6001600160a01b038381166000908152600c60209081526040808320938616835292905220546000198114611cf857818110156122075760405162461bcd60e51b815260206004820152601060248201526f45786365656420416c6c6f77616e636560801b6044820152606401610bea565b6001600160a01b038085166000908152600c60209081526040808320938716835292905220828203905550505050565b60006001600160a01b0384161580159061226a57506001600160a01b03831660009081526010602052604090205460ff16155b6122ae5760405162461bcd60e51b8152602060048201526015602482015274125395905312510814d1539111548815d053131155605a1b6044820152606401610bea565b6001600160a01b03841630146122ca5760115460ff16156122cd565b60015b61230a5760405162461bcd60e51b815260206004820152600e60248201526d2932b2b73a3930b731bc9022b93960911b6044820152606401610bea565b6011805460ff191660011790556001600160a01b0384166000908152600b6020526040812054838110156123805760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542053454e4445522042414c414e434500000000006044820152606401610bea565b6001600160a01b038087166000818152600b602052604090208684039055600a549091161480156123ca57506001600160a01b0385166000908152600f602052604090205460ff16155b80156123de5750601154610100900460ff16155b15612487576001600160a01b0385166000908152600d602052604090205460ff161561240b576000612444565b61244461241a6012600a61537c565b6113a3867f0000000000000000000000000000000000000000000000000000000000000000612eb2565b915061244f84613419565b612463868661245e8786612cf9565b613945565b6001600160a01b0385166000908152600b6020526040902042600190910155612c73565b600a546001600160a01b0386811691161480156124bd57506001600160a01b0386166000908152600f602052604090205460ff16155b80156124d15750601154610100900460ff16155b156127565760006124e06115fa565b6001600160a01b0388166000908152600e602052604090205490915060ff1615801561250e575060225460ff165b61251957600161251e565b808511155b6125625760405162461bcd60e51b8152602060048201526015602482015274115610d15151081315134814d15313081312535255605a1b6044820152606401610bea565b6001600160a01b0387166000908152600d602052604090205460ff16158015612593575060225462010000900460ff165b61259e5760006125d7565b6125d76125ad6012600a61537c565b6113a3877f0000000000000000000000000000000000000000000000000000000000000000612eb2565b60165490935060ff16801561260557506001600160a01b0387166000908152600d602052604090205460ff16155b156126ce576019546001600160a01b0388166000908152600b6020526040812060010154909190612637904290612cf9565b11156126a157601a546001600160a01b0389166000908152600b6020526040902060010154612667904290612cf9565b11156126745760006126be565b61269c6126836012600a61537c565b6018546113a39061269590600a612eb2565b8990612eb2565b6126be565b6126be6126b06012600a61537c565b6017546113a3908990612eb2565b90506126ca8482612e53565b9350505b6001600160a01b03871630148015906126f557506008546001600160a01b03888116911614155b801561271a57506001600160a01b0387166000908152600d602052604090205460ff16155b801561272f5750601154600160301b900460ff165b1561273c5761273c6139ec565b6127508761274a8786612cf9565b85613af6565b50612c73565b601154610100900460ff1615612bb357600a546001600160a01b03878116911614801561279c57506001600160a01b0385166000908152600d602052604090205460ff16155b156127dd576127da6127b06012600a61537c565b6113a3867f0000000000000000000000000000000000000000000000000000000000000000612eb2565b91505b600a546001600160a01b03868116911614801561281357506001600160a01b0386166000908152600d602052604090205460ff16155b15612bae5760006128536128296012600a61537c565b6113a3877f0000000000000000000000000000000000000000000000000000000000000000612eb2565b601154909350600160301b900460ff16801561287857506001600160a01b0387163014155b15612885576128856139ec565b600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff91906153f0565b506001600160701b039182169350169050600061291c8887612cf9565b60408051600180825281830190925291925060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181612937575050604080516060810182523081526007546001600160a01b03166020820152600091810182905282519293509183919061299e5761299e615269565b60209081029190910101526009546040516326207f2d60e21b81526000916001600160a01b031690639881fcb4906129dc90869086906004016154cd565b600060405180830381865afa1580156129f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a2191908101906154e6565b600181518110612a3357612a33615269565b60200260200101519050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abe91906153b7565b6001600160a01b031603612b0c57612af8612ad98685612e53565b6113a3612ae86012600a61537c565b612af28886612cf9565b90612eb2565b9550612b048482612cf9565b601e55612b42565b612b32612b198585612e53565b6113a3612b286012600a61537c565b612af28986612cf9565b9550612b3e8582612cf9565b601e555b6013548611612ba7576011805461ff001916908190556013879055670429d069189e00006005819055600455602754602254602854602954612ba09460ff6101008504811694620100009004811693600160201b9092041691612f8f565b601e54601f555b5050505050505b612c64565b600a546001600160a01b03878116911614801590612bdf5750600a546001600160a01b03868116911614155b15612bec57612bec611303565b6001600160a01b0386166000908152600f602052604090205460ff1680612c2b57506001600160a01b0385166000908152600f602052604090205460ff165b15612c64576001600160a01b038087166000908152600f6020526040808220805460ff1990811690915592881682529020805490911690555b612c73868661245e8786612cf9565b8115612ce357601154600160301b900460ff1615612cd8576000612cbd612c9c6012600a61537c565b6113a3612cb6600454600554612e5390919063ffffffff16565b8690612eb2565b90508060206000828254612cd191906151ce565b9091555050505b612ce3863084613945565b50506011805460ff191690555060019392505050565b600082821115612d4b5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bea565b612d558284615577565b9392505050565b601154600090600160281b900460ff1615612e4d576000612d8e6014546113a360125442612cf990919063ffffffff16565b90508015612e4b5760135460005b82811015612dd9576000612dc3612db56012600a61537c565b6015546113a3908690612eb2565b9250819050612dd18161527f565b915050612d9c565b50601454612de79083612eb2565b60126000828254612df891906151ce565b90915550506013819055602254610100900460ff1615612e4957602754602254601154602854602954612e49949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b505b505b50600190565b600080612e6083856151ce565b905083811015612d555760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bea565b600082600003612ec457506000610c6f565b6000612ed0838561558a565b905082612edd85836155a1565b14612d555760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bea565b6000808211612f855760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bea565b612d5582846155a1565b6000612fad612fa06012600a61537c565b6013546113a3908a612eb2565b601354909150612fbd9082612e53565b602555601354612fcd9082612cf9565b60265560278790558580612fde5750845b6011805462ff000019169115620100000291909117905583613059578515613026576022805461ff0019166101008815150217905561301d8184612f34565b60245560288390555b8415613054576022805462ff00001916620100008715150217905561304b8183612f34565b60235560298290555b61307d565b6022805462ffff0019166101008815150262ff000019161762010000871515021790555b6011805464ff000000001916600160201b86151502179081905560ff62010000909104166130ea576013546040805160608082526003908201526204170760ec1b608082015242602082015280820192909252516000805160206156008339815191529181900360a00190a15b50505050505050565b600080600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561314c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317091906153f0565b50600a546001600160a01b03166000818152600b6020908152604091829020548251630dfe168160e01b815292516001600160701b0396871698509490951695503093630dfe16819260048082019392918290030181865afa1580156131da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fe91906153b7565b6001600160a01b03160361322757613220866113a384612af26012600a61537c565b935061323e565b61323b866113a385612af26012600a61537c565b93505b838111156132ae5760006132528286612cf9565b600a546001600160a01b03166000908152600b602052604090205490915061327a9082612cf9565b600a80546001600160a01b039081166000908152600b6020526040902092909255546132a891163083613945565b506133a4565b6132b88482612cf9565b60208054306000908152600b909252604082205492975090916132da91612cf9565b905085811061332c57306000908152600b60205260409020546132fd9087612cf9565b306000818152600b6020526040902091909155600a5461332791906001600160a01b031688613945565b6133a2565b801561337657306000908152600b602052604090205461334c9082612cf9565b306000818152600b6020526040902091909155600a5461337691906001600160a01b031683613945565b60006133828783612cf9565b905080156133a057600a546133a0906001600160a01b031682614707565b505b505b600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133f457600080fd5b505af1158015613408573d6000803e3d6000fd5b505050601396909655505050505050565b600a546001600160a01b03166000818152600b6020526040808220548151630240bc6b60e21b81529151929384938493849283929091630902f1ac9160048083019260609291908290030181865afa158015613479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349d91906153f0565b506040805160018082528183019092526001600160701b039384169550919092169250600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816134c8575050604080516060810182526007546001600160a01b03168152306020820152600091810182905282519293509183919061352f5761352f615269565b602090810291909101015260095460405163d5c54e3360e01b81526000916001600160a01b03169063d5c54e339061356d908c9086906004016154cd565b600060405180830381865afa15801561358a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135b291908101906154e6565b9050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363591906153b7565b6001600160a01b031603613678576136708160008151811061365957613659615269565b602002602001015184612e5390919063ffffffff16565b601e556136a9565b6136a58160008151811061368e5761368e615269565b602002602001015185612e5390919063ffffffff16565b601e555b6136c36013546113a3601e546012600a612af2919061537c565b602254909850610100900460ff161561379057601154600090600160201b900460ff166136fe576024546013546136f991612e53565b613726565b613726611437876113a361371f601354602554612cf990919063ffffffff16565b8e90612eb2565b9050600061374a613737888d612e53565b601e546113a390612af26012600a61537c565b9050818111801561375b5750600082115b8015613768575060135482115b1561378d57613785826113a3601e546012600a612af2919061537c565b601383905599505b50505b848811156138925760006137a48987612cf9565b60208054306000908152600b909252604082205492935090916137c691612cf9565b90508181111561381957306000908152600b60205260409020546137ea9083612cf9565b306000818152600b6020526040902091909155600a5461381491906001600160a01b031684613945565b61388b565b6138238282612cf9565b9850801561386f57306000908152600b60205260409020546138459082612cf9565b306000818152600b6020526040902091909155600a5461386f91906001600160a01b031683613945565b881561388b57600a5461388b906001600160a01b03168a614707565b50506138f2565b61389c8589612cf9565b600a546001600160a01b03166000908152600b60205260409020549096506138c49087612cf9565b600a80546001600160a01b039081166000908152600b6020526040902092909255546138f291163088613945565b604080518a8152602081018a9052908101889052606081018790527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a1505050505050505050565b6001600160a01b03821661399b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49442052454345495645522057414c4c45540000000000000000006044820152606401610bea565b6001600160a01b038083166000818152600b602052604090819020805485019055519091851690600080516020615620833981519152906139df9085815260200190565b60405180910390a3505050565b306000908152600b6020908152604090912054602154915490911115613a0f5750565b60205481106114f75760205460225460009060ff16613a4857613a4360646113a36002600154612eb290919063ffffffff16565b613a50565b613a506115fa565b9050806020541115613a60578091505b613a69826149b3565b50600854600954600754600654604051634998b10960e11b81526001600160a01b039384166004820152918316602483015282166044820152911690639331621290606401600060405180830381600087803b158015613ac857600080fd5b505af1158015613adc573d6000803e3d6000fd5b5050602054613aee9250905083612cf9565b602055505050565b6000806000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7591906153f0565b50600a546001600160a01b039081166000818152600b60205260408082205460075491516370a0823160e01b815260048101949094526001600160701b0396871698509490951695509293909116906370a0823190602401602060405180830381865afa158015613bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0e9190615250565b6009549091506001600160a01b03163303613d5d576000613c37836113a384612af28e8e612e53565b6009549091506001600160a01b03163181118015613cce5750600754600954604051636eb1769f60e11b81526001600160a01b038e8116600483015291821660248201528392919091169063dd62ed3e90604401602060405180830381865afa158015613ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccc9190615250565b105b613d5b5760405162461bcd60e51b815260206004820152605260248201527f4f6e6c79204c697175696469747941646465722063616e206164644c6971756960448201527f64697479206f722072656d6f766520574e415449564520616c6c6f77616e6365606482015271081a5b881c9bdd5d195c881d1bc81cd95b1b60721b608482015260a401610bea565b505b604080516001808252818301909252600091816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181613d74575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190613ddb57613ddb615269565b6020026020010181905250306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6791906153b7565b6001600160a01b031603613f1f576009546040516326207f2d60e21b8152613f17916001600160a01b031690639881fcb490613ea9908e9086906004016154cd565b600060405180830381865afa158015613ec6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eee91908101906154e6565b600181518110613f0057613f00615269565b602002602001015185612cf990919063ffffffff16565b601e55613fc5565b6009546040516326207f2d60e21b8152613fc1916001600160a01b031690639881fcb490613f53908e9086906004016154cd565b600060405180830381865afa158015613f70573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9891908101906154e6565b600181518110613faa57613faa615269565b602002602001015186612cf990919063ffffffff16565b601e555b6001600160a01b038b1630146142b357601b548210158015613ff157506011546301000000900460ff16155b1561403a576011805463ff00000019166301000000179055601e54601f55601354604051600080516020615600833981519152916140319142919061538b565b60405180910390a15b6011546301000000900460ff168015614062575061405d61137d6012600a61537c565b601e54115b8061409057506011546301000000900460ff168015614090575061408b6113d76012600a61537c565b601e54105b1561419d576140a461137d6012600a61537c565b601e5411156140c3576140bf6114376114286012600a61537c565b6013555b6140d26113d76012600a61537c565b601e5410156140f1576140ed61146e6114286012600a61537c565b6013555b61410b6013546113a3601e546012600a612af2919061537c565b602254909750610100900460ff168061412c575060225462010000900460ff165b1561416857602754602254601154602854602954614168949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b601e54601f55601354604051600080516020615600833981519152916141909142919061538b565b60405180910390a16141a7565b6141a5612d5c565b505b60225462010000900460ff1680156141c857506001600160a01b038b163014155b80156141ea575060646141e8602654601354612cf990919063ffffffff16565b115b156142b357601154600090600160201b900460ff166142175760235460135461421291612cf9565b61423f565b61423f61146e856113a3614238602654601354612cf990919063ffffffff16565b8f90612eb2565b9050614259816113a3601e546012600a612af2919061537c565b97506000614275856113a3601e546012600a612af2919061537c565b905060265481118015614289575060265482115b156142b0576142a86013546113a3601e546012600a612af2919061537c565b601383905598505b50505b6142cd6013546113a3601e546012600a612af2919061537c565b9650828711156145435760006142e38885612cf9565b9050808b111561436957600a546001600160a01b03166000908152600b60205260409020546143129082612e53565b600a546001600160a01b03166000908152600b60205260409020556143378b82612cf9565b306000908152600b6020526040902054909950614354908a612e53565b306000908152600b602052604090205561453d565b600a546001600160a01b03166000908152600b602052604090205461438e908c612e53565b600a546001600160a01b03166000908152600b60205260408120919091556143b6828d612cf9565b60208054306000908152600b909252604082205492935090916143d891612cf9565b90508181111561447957306000908152600b60205260409020546143fc9083612cf9565b306000908152600b602052604080822092909255600a546001600160a01b03168152205461442a9083612e53565b600a80546001600160a01b039081166000908152600b602090815260409182902094909455915491518581529116913091600080516020615620833981519152910160405180910390a361453a565b6144838282612cf9565b9850801561451e57306000908152600b60205260409020546144a59082612cf9565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546144d39082612e53565b600a80546001600160a01b039081166000908152600b602090815260409182902094909455915491518481529116913091600080516020615620833981519152910160405180910390a35b881561453a57600a5461453a906001600160a01b03168a614707565b50505b5061467f565b600061454f8489612cf9565b9050600061455d8583612cf9565b905061457361456c8d8d612e53565b8290612cf9565b600a546001600160a01b03166000908152600b60205260409020556145988c83612e53565b9950600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145ea57600080fd5b505af11580156145fe573d6000803e3d6000fd5b5050600a546001600160a01b03166000908152600b6020526040808220859055308252902054614631925090508b612e53565b306000818152600b60205260409081902092909255600a54915190916001600160a01b03169060008051602061562083398151915290614674908e815260200190565b60405180910390a350505b600a546040518b81526001600160a01b03918216918d16906000805160206156208339815191529060200160405180910390a3604080518b815260208101899052908101879052606081018990527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a15050505050505050505050565b6001600160a01b0382166147565760405162461bcd60e51b8152602060048201526016602482015275494e56414c4944204d494e544552204144445245535360501b6044820152606401610bea565b6147626012600a61537c565b61477190641029c1230061558a565b600154101561487f576147866012600a61537c565b61479590641029c1230061558a565b6001546147a29083612e53565b11156148285760006147cd6001546012600a6147be919061537c565b6113ee90641029c1230061558a565b905080600160008282546147e191906151ce565b90915550506001600160a01b0383166000908152600b60205260409020546148099082612e53565b6001600160a01b0384166000908152600b60205260409020555061487f565b6001600160a01b0382166000908152600b602052604090205461484b9082612e53565b6001600160a01b0383166000908152600b6020526040812091909155600180548392906148799084906151ce565b90915550505b600254600154101580156148af575061489a6012600a61537c565b6148a990641029c1230061558a565b60025414155b15614980576011805461ff0019166101001790556148cf6012600a61537c565b6148de90641029c1230061558a565b60015414614909576149046148f56012600a61537c565b6003546002546113a391612eb2565b614924565b6149156012600a61537c565b61492490641029c1230061558a565b6002556706f05b59d3b20000600581815560049190915560135460408051606080825281019390935264109b185cdd60da1b60808401524260208401528201526000805160206156008339815191529060a00160405180910390a15b6040518181526001600160a01b038316906000906000805160206156208339815191529060200160405180910390a35050565b604080516001808252818301909252600091829190816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816149cd575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190614a3457614a34615269565b602090810291909101810191909152306000908152600c825260408082206009546001600160a01b031683529092529081208054859290614a769084906151ce565b90915550506007546008546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af09190615250565b600954600854604051636cc1ae1360e01b81529293506001600160a01b0391821692636cc1ae1392614b2f9289926000928992169042906004016155c3565b600060405180830381600087803b158015614b4957600080fd5b505af1158015614b5d573d6000803e3d6000fd5b50506007546008546040516370a0823160e01b81526001600160a01b039182166004820152614bd794508593509116906370a0823190602401602060405180830381865afa158015614bb3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190615250565b949350505050565b60005b83811015614bfa578181015183820152602001614be2565b50506000910152565b6020815260008251806020840152614c22816040850160208701614bdf565b601f01601f19169190910160400192915050565b6001600160a01b03811681146114f757600080fd5b60008060408385031215614c5e57600080fd5b8235614c6981614c36565b946020939093013593505050565b80151581146114f757600080fd5b60008060008060808587031215614c9b57600080fd5b8435614ca681614c36565b93506020850135614cb681614c36565b9250604085013591506060850135614ccd81614c77565b939692955090935050565b600080600060608486031215614ced57600080fd5b8335614cf881614c36565b92506020840135614d0881614c36565b929592945050506040919091013590565b600060208284031215614d2b57600080fd5b8135612d5581614c36565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614d7557614d75614d36565b604052919050565b600067ffffffffffffffff821115614d9757614d97614d36565b5060051b60200190565b600082601f830112614db257600080fd5b81356020614dc7614dc283614d7d565b614d4c565b82815260059290921b84018101918181019086841115614de657600080fd5b8286015b84811015614e015780358352918301918301614dea565b509695505050505050565b60008060408385031215614e1f57600080fd5b823567ffffffffffffffff80821115614e3757600080fd5b818501915085601f830112614e4b57600080fd5b81356020614e5b614dc283614d7d565b82815260059290921b84018101918181019089841115614e7a57600080fd5b948201945b83861015614ea1578535614e9281614c36565b82529482019490820190614e7f565b96505086013592505080821115614eb757600080fd5b50614ec485828601614da1565b9150509250929050565b60008083601f840112614ee057600080fd5b50813567ffffffffffffffff811115614ef857600080fd5b6020830191508360208260051b8501011115614f1357600080fd5b9250929050565b60008060008060608587031215614f3057600080fd5b843567ffffffffffffffff811115614f4757600080fd5b614f5387828801614ece565b9095509350506020850135614f6781614c77565b9396929550929360400135925050565b60008060008060008060c08789031215614f9057600080fd5b863595506020870135614fa281614c77565b94506040870135614fb281614c77565b93506060870135614fc281614c77565b9598949750929560808101359460a0909101359350915050565b60008060408385031215614fef57600080fd5b82359150602083013561500181614c77565b809150509250929050565b60008060006060848603121561502157600080fd5b8335925060208401359150604084013561503a81614c77565b809150509250925092565b600080600080600060a0868803121561505d57600080fd5b85359450602086013593506040860135925060608601359150608086013561508481614c77565b809150509295509295909350565b600080604083850312156150a557600080fd5b82356150b081614c36565b9150602083013561500181614c77565b6000806000606084860312156150d557600080fd5b83356150e081614c36565b925060208401359150604084013561503a81614c77565b6000806040838503121561510a57600080fd5b823561511581614c36565b9150602083013561500181614c36565b6000806000806060858703121561513b57600080fd5b843567ffffffffffffffff81111561515257600080fd5b61515e87828801614ece565b909550935050602085013561517281614c77565b91506040850135614ccd81614c77565b6000806000806080858703121561519857600080fd5b8435935060208501359250604085013591506060850135614ccd81614c77565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6f57610c6f6151b8565b60208082526012908201527121b0b63632b91034b9b713ba1037bbb732b960711b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561526257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201615291576152916151b8565b5060010190565b600181815b808511156152d35781600019048211156152b9576152b96151b8565b808516156152c657918102915b93841c939080029061529d565b509250929050565b6000826152ea57506001610c6f565b816152f757506000610c6f565b816001811461530d576002811461531757615333565b6001915050610c6f565b60ff841115615328576153286151b8565b50506001821b610c6f565b5060208310610133831016604e8410600b8410161715615356575081810a610c6f565b6153608383615298565b8060001904821115615374576153746151b8565b029392505050565b6000612d5560ff8416836152db565b60608082526005908201526409082a886960db1b60808201526020810192909252604082015260a00190565b6000602082840312156153c957600080fd5b8151612d5581614c36565b80516001600160701b03811681146153eb57600080fd5b919050565b60008060006060848603121561540557600080fd5b61540e846153d4565b925061541c602085016153d4565b9150604084015163ffffffff8116811461503a57600080fd5b60008251615447818460208701614bdf565b9190910192915050565b60006020828403121561546357600080fd5b8151612d5581614c77565b600081518084526020808501945080840160005b838110156154c257815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101615482565b509495945050505050565b828152604060208201526000614bd7604083018461546e565b600060208083850312156154f957600080fd5b825167ffffffffffffffff81111561551057600080fd5b8301601f8101851361552157600080fd5b805161552f614dc282614d7d565b81815260059190911b8201830190838101908783111561554e57600080fd5b928401925b8284101561556c57835182529284019290840190615553565b979650505050505050565b81810381811115610c6f57610c6f6151b8565b8082028115828204841417610c6f57610c6f6151b8565b6000826155be57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006155e260a083018661546e565b6001600160a01b039490941660608301525060800152939250505056fe6b394e3b256f53d27bc3bd048c71d1c38a3924a1b67754ddd32d50c67e85e0e8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122012580195be743d21579b83b0d4ce891f6e56ff63091d70fd2c005c0f8a31462064736f6c6343000811003360a0604052600280546001600160a01b03191661dead17905568056bc75e2d6310000060045567058d15e176280000600655670853a0d2313c00006007556008805460ff191660011790553480156200005757600080fd5b5060405162002004380380620020048339810160408190526200007a9162000128565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206e6174697665436f696e2061646472657373000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b031991821617909155336080526000805492909316911617905562000160565b80516001600160a01b03811681146200012357600080fd5b919050565b600080604083850312156200013c57600080fd5b62000147836200010b565b915062000157602084016200010b565b90509250929050565b608051611e6c62000198600039600081816102ee015281816104980152818161088a01528181610db701526118740152611e6c6000f3fe60806040526004361061010c5760003560e01c8063781e6b9611610095578063a81e887d11610064578063a81e887d14610350578063b4a99a4e14610370578063d279c19114610390578063f2fde38b146103b0578063fb453e23146103d057600080fd5b8063781e6b96146102bc5780637fd75249146102dc5780639331621214610310578063a694fc3a1461033057600080fd5b806329eae70d116100dc57806329eae70d146102065780632d5bfffc1461021c578063650cf03f1461023c578063651dca711461025c5780636709d5c81461029c57600080fd5b8062f714ce14610118578063167b78cd1461013a57806321c0b342146101775780632349c1e8146101cb57600080fd5b3661011357005b600080fd5b34801561012457600080fd5b506101386101333660046119e5565b6103f0565b005b34801561014657600080fd5b5060015461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018357600080fd5b506101b6610192366004611a11565b60096020908152600092835260408084209091529082529020805460019091015482565b6040805192835260208301919091520161016e565b3480156101d757600080fd5b506101f86101e6366004611a3b565b600b6020526000908152604090205481565b60405190815260200161016e565b34801561021257600080fd5b506101f860055481565b34801561022857600080fd5b50610138610237366004611a67565b610643565b34801561024857600080fd5b50610138610257366004611aa0565b61069d565b34801561026857600080fd5b5061028c610277366004611a3b565b600a6020526000908152604090205460ff1681565b604051901515815260200161016e565b3480156102a857600080fd5b5061028c6102b7366004611ac2565b6106d2565b3480156102c857600080fd5b5060025461015a906001600160a01b031681565b3480156102e857600080fd5b5061015a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031c57600080fd5b5061013861032b366004611afe565b61087f565b34801561033c57600080fd5b5061013861034b366004611b41565b610d95565b34801561035c57600080fd5b5061013861036b366004611a3b565b610ed5565b34801561037c57600080fd5b5060005461015a906001600160a01b031681565b34801561039c57600080fd5b506101386103ab366004611a3b565b610f50565b3480156103bc57600080fd5b506101386103cb366004611a3b565b61117b565b3480156103dc57600080fd5b5061015a6103eb366004611b41565b61120b565b600854610100900460ff161561040557600080fd5b6008805461ff001916610100179055336000908152600a602052604090205460ff1680156104425750336000908152600b60205260409020548211155b8015610450575060085460ff165b61045957600080fd5b336000908152600b60205260409020546104739083611235565b336000908152600b60205260409020556005546104909083611235565b6005556104be7f0000000000000000000000000000000000000000000000000000000000000000828461129a565b336000908152600b602052604081205490036105f357336000908152600a60205260409020805460ff19169055600e80546104fb90600190611b70565b8154811061050b5761050b611b83565b6000918252602080832090910154338352600c909152604090912054600e80546001600160a01b0390931692909190811061054857610548611b83565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e80548061058757610587611b99565b6000828152602090819020600019908301810180546001600160a01b0319169055909101909155604080513381529182018490526001908201527f039d3e7ccc0d8edf3fb8206bf9f58888c4cced8c157c730a2407a54aad7c865c9060600160405180910390a1610634565b604080513381526020810184905260008183015290517f039d3e7ccc0d8edf3fb8206bf9f58888c4cced8c157c730a2407a54aad7c865c9181900360600190a15b50506008805461ff0019169055565b6000546001600160a01b031633146106765760405162461bcd60e51b815260040161066d90611baf565b60405180910390fd5b60039190915560028054911515600160a01b0260ff60a01b19909216919091179055600455565b6000546001600160a01b031633146106c75760405162461bcd60e51b815260040161066d90611baf565b600791909155600655565b600080546001600160a01b031633146106fd5760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b03831661075f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066d565b6000826107ee576001600160a01b0385166000818152600d6020526040908190205490516370a0823160e01b81523060048201526107e992906370a08231906024015b602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e39190611bdc565b90611235565b6107f0565b475b9050600081116108545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161066d565b82156108695761086484826113b5565b610874565b61087485858361129a565b506001949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108b457600080fd5b6008805460ff1916905560006001600160a01b038083169084160361091a576001600160a01b0383166000818152600d6020526040908190205490516370a0823160e01b815230600482015261091392906370a08231906024016107a2565b9050610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109859190611bdc565b6001600160a01b0385166000818152600d60205260408082205490516370a0823160e01b815230600482015293945090926109c992906370a08231906024016107a2565b90506109d6858783611483565b6001546060906001600160a01b0387811691161480610a0257506001546001600160a01b038681169116145b15610a9e5760408051600180825281830190925290816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610a1c5790505090506040518060600160405280876001600160a01b03168152602001866001600160a01b031681526020016000151581525081600081518110610a8e57610a8e611b83565b6020026020010181905250610b8c565b6040805160028082526060820190925290816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610ab4575050604080516060810182526001600160a01b0389811682526001541660208201526000918101829052825192935091839190610b1d57610b1d611b83565b60200260200101819052506040518060600160405280600160009054906101000a90046001600160a01b03166001600160a01b03168152602001866001600160a01b031681526020016000151581525081600181518110610b8057610b80611b83565b60200260200101819052505b6040516326207f2d60e21b81526000906001600160a01b03891690639881fcb490610bbd9086908690600401611c6a565b600060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c029190810190611c8b565b9050606481600181518110610c1957610c19611b83565b60200260200101511115610d0657604051636cc1ae1360e01b81526001600160a01b03891690636cc1ae1390610c5c908690600090879030904290600401611d49565b600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152610cc092508691506001600160a01b038916906370a08231906024016107a2565b604080516001600160a01b0389168152602081018390529196507f7be6bf01cc66b7a84d4a39bf92a8cecd29d5c2f86192c445ad2396a0cc64a477910160405180910390a15b505050505b8015610d82576000610d41610d2d60065460075461159790919063ffffffff16565b600754610d3b9085906115f6565b90611678565b90508015610d6157600254610d619084906001600160a01b03168361129a565b6000610d6d8383611235565b90508015610d7f57610d7f84826116d3565b50505b50506008805460ff191660011790555050565b6004548110158015610da9575060085460ff165b610db257600080fd5b610dde7f0000000000000000000000000000000000000000000000000000000000000000333084611899565b336000908152600b6020526040902054610df89082611597565b336000908152600b6020526040902055600554610e159082611597565b600555336000908152600a602052604090205460ff16610e9957336000818152600a60209081526040808320805460ff19166001908117909155600e8054600c909452918420839055820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b03191690911790555b60408051338152602081018390527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d910160405180910390a150565b6000546001600160a01b03163314610eff5760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b03811615801590610f2557506002546001600160a01b03828116911614155b610f2e57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600854610100900460ff1615610f6557600080fd5b6008805461ff0019166101001790553360009081526009602090815260408083206001600160a01b03851684529091529020600101548015801590610fc257506001600160a01b0382166000908152600d60205260409020548111155b8015610fd0575060085460ff165b61101c5760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542052455345525645205245574152440000000000604482015260640161066d565b3360009081526009602090815260408083206001600160a01b038616845290915281206001018054839290611052908490611b70565b90915550503360009081526009602090815260408083206001600160a01b03861684529091528120805483929061108a908490611d85565b90915550506001600160a01b0382166000908152600d6020526040812080548392906110b7908490611b70565b9250508190555060006110e1670de0b6b3a7640000610d3b600354856115f690919063ffffffff16565b90508015611101576002546111019084906001600160a01b03168361129a565b61111583336111108585611235565b61129a565b7f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706833846111428585611235565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a150506008805461ff001916905550565b6000546001600160a01b031633146111a55760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b0381166111e95760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b604482015260640161066d565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e818154811061121b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000828211156112875760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161066d565b6112918284611b70565b90505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916112f69190611d98565b6000604051808303816000865af19150503d8060008114611333576040519150601f19603f3d011682016040523d82523d6000602084013e611338565b606091505b50915091508180156113625750805115806113625750808060200190518101906113629190611dc7565b6113ae5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161066d565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516113df9190611d98565b60006040518083038185875af1925050503d806000811461141c576040519150601f19603f3d011682016040523d82523d6000602084013e611421565b606091505b505090508061147e5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b606482015260840161066d565b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916114df9190611d98565b6000604051808303816000865af19150503d806000811461151c576040519150601f19603f3d011682016040523d82523d6000602084013e611521565b606091505b509150915081801561154b57508051158061154b57508080602001905181019061154b9190611dc7565b6113ae5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161066d565b6000806115a48385611d85565b9050838110156112915760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161066d565b60008260000361160857506000611294565b60006116148385611de4565b9050826116218583611dfb565b146112915760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161066d565b60008082116116c95760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161066d565b6112918284611dfb565b600e546002546000918291600160a01b900460ff1680156116f45750600081115b156118645760005b818110156117d9576000611752600554610d3b88600b6000600e888154811061172757611727611b83565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906115f6565b90508060096000600e858154811061176c5761176c611b83565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938c16825292909252812060010180549091906117b3908490611d85565b909155506117c390508582611597565b94505080806117d190611e1d565b9150506116fc565b506001600160a01b0385166000908152600d602052604081208054859290611802908490611d85565b9091555061181290508484611235565b604080516001600160a01b0388168152602081018690529081018390529092507f510d28ecf924610b79771480622864eb4408788da304360f252a7432adb3c5e39060600160405180910390a1611868565b8391505b81156113ae576113ae857f00000000000000000000000000000000000000000000000000000000000000008461129a565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916118fd9190611d98565b6000604051808303816000865af19150503d806000811461193a576040519150601f19603f3d011682016040523d82523d6000602084013e61193f565b606091505b50915091508180156119695750805115806119695750808060200190518101906119699190611dc7565b6119c15760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161066d565b505050505050565b80356001600160a01b03811681146119e057600080fd5b919050565b600080604083850312156119f857600080fd5b82359150611a08602084016119c9565b90509250929050565b60008060408385031215611a2457600080fd5b611a2d836119c9565b9150611a08602084016119c9565b600060208284031215611a4d57600080fd5b611291826119c9565b8015158114611a6457600080fd5b50565b600080600060608486031215611a7c57600080fd5b83359250602084013591506040840135611a9581611a56565b809150509250925092565b60008060408385031215611ab357600080fd5b50508035926020909101359150565b600080600060608486031215611ad757600080fd5b611ae0846119c9565b9250611aee602085016119c9565b91506040840135611a9581611a56565b600080600060608486031215611b1357600080fd5b611b1c846119c9565b9250611b2a602085016119c9565b9150611b38604085016119c9565b90509250925092565b600060208284031215611b5357600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561129457611294611b5a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526013908201527213db9b1e481bdddb995c8818d85b8818d85b1b606a1b604082015260600190565b600060208284031215611bee57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015611c5f57815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101611c1f565b509495945050505050565b828152604060208201526000611c836040830184611c0b565b949350505050565b60006020808385031215611c9e57600080fd5b825167ffffffffffffffff80821115611cb657600080fd5b818501915085601f830112611cca57600080fd5b815181811115611cdc57611cdc611bf5565b8060051b604051601f19603f83011681018181108582111715611d0157611d01611bf5565b604052918252848201925083810185019188831115611d1f57600080fd5b938501935b82851015611d3d57845184529385019392850192611d24565b98975050505050505050565b85815284602082015260a060408201526000611d6860a0830186611c0b565b6001600160a01b0394909416606083015250608001529392505050565b8082018082111561129457611294611b5a565b6000825160005b81811015611db95760208186018101518583015201611d9f565b506000920191825250919050565b600060208284031215611dd957600080fd5b815161129181611a56565b808202811582820484141761129457611294611b5a565b600082611e1857634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611e2f57611e2f611b5a565b506001019056fea26469706673582212207b4e79475354e5eaa368db98f39b596fb4d71513c7c556b9a4c6937d0bb83ea164736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c80639a99d574116101e7578063d4c48e5a1161010d578063ecbaaa65116100a0578063f2fde38b1161006f578063f2fde38b14610b42578063f52ec0a614610b62578063feaa7f2914610b78578063ffefc7d314610b8d57600080fd5b8063ecbaaa6514610acb578063f12cc5ca14610aeb578063f12dda8b14610b01578063f245e51a14610b2257600080fd5b8063e0f3ccf5116100dc578063e0f3ccf514610a23578063e4748b9e14610a57578063e7ee883014610a8b578063e8f6ae2914610aab57600080fd5b8063d4c48e5a14610991578063dd47a7e7146109b1578063dd62ed3e146109c7578063de0daf1014610a0d57600080fd5b8063b040c39b11610185578063c3c6467411610154578063c3c6467414610925578063c85256c114610945578063c8f50c8f1461095b578063cdd9aa0f1461097157600080fd5b8063b040c39b146108af578063b4a99a4e146108c5578063b9ac8099146108e5578063bf468f901461090557600080fd5b8063a70dbe12116101c1578063a70dbe121461083a578063a9059cbb1461085b578063aae7539c1461087b578063ae613b411461089057600080fd5b80639a99d574146107ee5780639ab23382146108045780639ac740331461082457600080fd5b8063509484d5116102d757806370a082311161026a5780638ce1a483116102395780638ce1a483146107695780638e28c9771461077f57806393e14fc21461079f57806395d89b41146107bf57600080fd5b806370a08231146106ce57806380fef5af1461070457806384421f2a1461071957806387f30d601461074957600080fd5b806367e417f7116102a657806367e417f71461065257806368cb2642146106685780636cad473c146106885780636facfe0d1461069e57600080fd5b8063509484d5146105cc57806356e7718c146105ec57806358fcf5e91461061c57806365216a411461063257600080fd5b806327033ae81161034f578063387c0d971161031e578063387c0d971461052e57806342dcdbaf1461054457806346811ed11461057c5780634fc9ab151461059c57600080fd5b806327033ae8146104c5578063313ce567146104e657806334ffe7531461050257806337d753cf1461051857600080fd5b8063095ea7b31161038b578063095ea7b31461044d57806318160ddd1461046d57806318a5a9eb1461048357806323b872dd146104a557600080fd5b806301551222146103bd57806304ababba146103f157806306fdde031461041557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506022546103dc90610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156103fd57600080fd5b5061040760155481565b6040519081526020016103e8565b34801561042157600080fd5b506040805180820190915260068152654547474e4f4760d01b60208201525b6040516103e89190614c03565b34801561045957600080fd5b506103dc610468366004614c4b565b610ba3565b34801561047957600080fd5b5061040760015481565b34801561048f57600080fd5b506104a361049e366004614c85565b610c75565b005b3480156104b157600080fd5b506103dc6104c0366004614cd8565b610e0f565b3480156104d157600080fd5b506011546103dc906301000000900460ff1681565b3480156104f257600080fd5b50604051601281526020016103e8565b34801561050e57600080fd5b50610407601c5481565b34801561052457600080fd5b5061040760275481565b34801561053a57600080fd5b5061040760025481565b34801561055057600080fd5b50600854610564906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b34801561058857600080fd5b50600954610564906001600160a01b031681565b3480156105a857600080fd5b506103dc6105b7366004614d19565b60106020526000908152604090205460ff1681565b3480156105d857600080fd5b506104a36105e7366004614d19565b610e34565b3480156105f857600080fd5b506103dc610607366004614d19565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061040760245481565b34801561063e57600080fd5b506104a361064d366004614e0c565b610f12565b34801561065e57600080fd5b50610407601e5481565b34801561067457600080fd5b506104a3610683366004614f1a565b611141565b34801561069457600080fd5b5061040760255481565b3480156106aa57600080fd5b506103dc6106b9366004614d19565b600d6020526000908152604090205460ff1681565b3480156106da57600080fd5b506104076106e9366004614d19565b6001600160a01b03166000908152600b602052604090205490565b34801561071057600080fd5b506104a3611303565b34801561072557600080fd5b506103dc610734366004614d19565b600e6020526000908152604090205460ff1681565b34801561075557600080fd5b506104a3610764366004614f77565b6114fb565b34801561077557600080fd5b5061040760045481565b34801561078b57600080fd5b506022546103dc9062010000900460ff1681565b3480156107ab57600080fd5b50600654610564906001600160a01b031681565b3480156107cb57600080fd5b506040805180820190915260068152654567676e6f6760d01b6020820152610440565b3480156107fa57600080fd5b50610407601d5481565b34801561081057600080fd5b506104a361081f366004614fdc565b61153b565b34801561083057600080fd5b5061040760235481565b34801561084657600080fd5b506011546103dc90600160301b900460ff1681565b34801561086757600080fd5b506103dc610876366004614c4b565b6115e3565b34801561088757600080fd5b506104076115fa565b34801561089c57600080fd5b506011546103dc90610100900460ff1681565b3480156108bb57600080fd5b5061040760135481565b3480156108d157600080fd5b50600054610564906001600160a01b031681565b3480156108f157600080fd5b506104a361090036600461500c565b611658565b34801561091157600080fd5b506104a3610920366004615045565b611718565b34801561093157600080fd5b506104a3610940366004615092565b611767565b34801561095157600080fd5b5061040760125481565b34801561096757600080fd5b5061040760055481565b34801561097d57600080fd5b50600a54610564906001600160a01b031681565b34801561099d57600080fd5b506104a36109ac3660046150c0565b6119e6565b3480156109bd57600080fd5b5061040760145481565b3480156109d357600080fd5b506104076109e23660046150f7565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a1957600080fd5b5061040760265481565b348015610a2f57600080fd5b506104077f000000000000000000000000000000000000000000000000006a94d74f43000081565b348015610a6357600080fd5b506104077f00000000000000000000000000000000000000000000000000b1a2bc2ec5000081565b348015610a9757600080fd5b506104a3610aa636600461500c565b611a69565b348015610ab757600080fd5b506104a3610ac6366004615092565b611ac9565b348015610ad757600080fd5b506104a3610ae6366004615125565b611b31565b348015610af757600080fd5b50610407601f5481565b348015610b0d57600080fd5b506011546103dc90600160281b900460ff1681565b348015610b2e57600080fd5b506104a3610b3d366004615182565b611cfe565b348015610b4e57600080fd5b506104a3610b5d366004614d19565b611dcb565b348015610b6e57600080fd5b5061040760205481565b348015610b8457600080fd5b50610407611e5b565b348015610b9957600080fd5b50610407601b5481565b60006001600160a01b038316610bf35760405162461bcd60e51b815260206004820152601060248201526f125395905312510816915493c810511160821b60448201526064015b60405180910390fd5b336000908152600c602090815260408083206001600160a01b038716845290915281208054849290610c269084906151ce565b90915550506040518281526001600160a01b0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259060200160405180910390a35060015b92915050565b60115460ff1615610c8557600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610cbe5760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038316610ce45760405162461bcd60e51b8152600401610bea9061520d565b600081610d58576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d539190615250565b610d5a565b475b9050600083118015610d6c5750808311155b610dde5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72206c6f776572207468616e2072657365727665006064820152608401610bea565b8115610df357610dee8484611fb8565b610dfe565b610dfe858585612081565b50506011805460ff19169055505050565b600033610e1d858285612195565b610e28858585612237565b50600195945050505050565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b03811615801590610e8457506008546001600160a01b03828116911614155b610ebe5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590810591960aa1b6044820152606401610bea565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527fc3eb9c17db91ff277fbf18fe474a08cd23c7089279c75f51f8a0b92cc306f9469060200160405180910390a150565b60115460ff1615610f2257600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610f5b5760405162461bcd60e51b8152600401610bea906151e1565b8051825114610f6957600080fd5b60005b82518110156111325760006001600160a01b0316838281518110610f9257610f92615269565b60200260200101516001600160a01b031603610fc05760405162461bcd60e51b8152600401610bea9061520d565b6000828281518110610fd457610fd4615269565b602002602001015111801561101f575060208054306000908152600b90925260409091205461100291612cf9565b82828151811061101457611014615269565b602002602001015111155b6110915760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72204c6f776572207468616e2072657365727665006064820152608401610bea565b60006110d0308584815181106110a9576110a9615269565b60200260200101518585815181106110c3576110c3615269565b6020026020010151612237565b90508061111f5760405162461bcd60e51b815260206004820152601b60248201527f455243323020746f6b656e207472616e73666572206661696c656400000000006044820152606401610bea565b508061112a8161527f565b915050610f6c565b50506011805460ff1916905550565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610bea906151e1565b60005b838110156112fc57600085858381811061118a5761118a615269565b905060200201602081019061119f9190614d19565b6001600160a01b0316036111b257600080fd5b816001036112135782600d60008787858181106111d1576111d1615269565b90506020020160208101906111e69190614d19565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556112ea565b816002036112325782600e60008787858181106111d1576111d1615269565b82600d600087878581811061124957611249615269565b905060200201602081019061125e9190614d19565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082600e60008787858181106112ac576112ac615269565b90506020020160208101906112c19190614d19565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b806112f48161527f565b91505061116e565b5050505050565b601154600160281b900460ff1680156113235750601154610100900460ff165b8061134957506011546301000000900460ff1680156113495750601154610100900460ff165b156114f957601354611359612d5c565b506011546301000000900460ff1680156113ae57506113a961137d6012600a61537c565b6113a361139a601c546012600a611394919061537c565b90612e53565b601f5490612eb2565b90612f34565b601e54115b806113f957506011546301000000900460ff1680156113f957506113f46113d76012600a61537c565b6113a361139a601c546012600a6113ee919061537c565b90612cf9565b601e54105b156114e35761140d61137d6012600a61537c565b601e541115611444576114406114376114286012600a61537c565b601d546013546113a391612eb2565b60135490612e53565b6013555b6114536113d76012600a61537c565b601e54101561147b5761147761146e6114286012600a61537c565b60135490612cf9565b6013555b6027546022546011546028546029546114b2949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b601e54601f55601354604051600080516020615600833981519152916114da9142919061538b565b60405180910390a15b60135481146114f7576114f76013546130f3565b505b565b6000546001600160a01b031633146115255760405162461bcd60e51b8152600401610bea906151e1565b611533868686868686612f8f565b505050505050565b6000546001600160a01b031633146115655760405162461bcd60e51b8152600401610bea906151e1565b61156e826130f3565b80156115df57601180546022805462ffff001916905565ff00ffff0000191662010000179055601354604080516060808252600790820152664861726450656760c81b6080820152426020820152908101919091526000805160206156008339815191529060a00160405180910390a15b5050565b60006115f0338484612237565b5060019392505050565b600a80546001600160a01b03166000908152600b60205260408120549091611652906116289060129061537c565b6113a3837f000000000000000000000000000000000000000000000000016345785d8a0000612eb2565b91505090565b6000546001600160a01b031633146116825760405162461bcd60e51b8152600401610bea906151e1565b60148290558115611713576116a361169c6012600a61537c565b8490612e53565b601555426012556011805482158015600160281b0265ff00000000001990921691909117909155611713576013546040805160608082526003908201526241505960e81b608082015242602082015280820192909252516000805160206156008339815191529181900360a00190a15b505050565b6000546001600160a01b031633146117425760405162461bcd60e51b8152600401610bea906151e1565b601794909455601892909255601955601a556016805460ff1916911515919091179055565b6000546001600160a01b031633146117915760405162461bcd60e51b8152600401610bea906151e1565b600980546001600160a01b0319166001600160a01b038481169190911790915560075416156115df576009546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611804573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182891906153b7565b6007546040516306801cc360e41b81526001600160a01b0391821660048201523060248201528415156044820152911690636801cc3090606401602060405180830381865afa15801561187f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a391906153b7565b90506001600160a01b0381166119aa57600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a91906153b7565b6007546040516320b7f73960e21b81526001600160a01b03918216600482015230602482015284151560448201529116906382dfdce4906064016020604051808303816000875af1158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a791906153b7565b90505b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600e60205260409020805460ff191660011790555050565b6000546001600160a01b03163314611a105760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038316611a2357600080fd5b60118054911515600160301b0266ff00000000000019909216919091179055600680546001600160a01b039093166001600160a01b031990931692909217909155602155565b6000546001600160a01b03163314611a935760405162461bcd60e51b8152600401610bea906151e1565b6011805461ff001916610100831515021790556002839055611ac1611aba6012600a61537c565b8390612e53565b600355505050565b6000546001600160a01b03163314611af35760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038216611b0657600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b5b5760405162461bcd60e51b8152600401610bea906151e1565b8115611c875760018314611ba15760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9027b732903830b4b960991b6044820152606401610bea565b83836000818110611bb457611bb4615269565b9050602002016020810190611bc99190614d19565b600a80546001600160a01b0319166001600160a01b03929092169190911790558383600081611bfa57611bfa615269565b9050602002016020810190611c0f9190614d19565b600780546001600160a01b0319166001600160a01b03929092169190911790556001600e600086868281611c4557611c45615269565b9050602002016020810190611c5a9190614d19565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611cf8565b60005b838110156112fc578160106000878785818110611ca957611ca9615269565b9050602002016020810190611cbe9190614d19565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611cf08161527f565b915050611c8a565b50505050565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610bea906151e1565b601c849055601d839055600754600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da29190615250565b601f55601b919091556011805491151563010000000263ff000000199092169190911790555050565b6000546001600160a01b03163314611df55760405162461bcd60e51b8152600401610bea906151e1565b6001600160a01b038116611e395760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b6044820152606401610bea565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed791906153f0565b506001600160701b031691506001600160701b03169150306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f91906153b7565b6001600160a01b031603611f9e57611f97826113a3611f906012600a61537c565b8490612eb2565b9250505090565b611f97816113a3611fb16012600a61537c565b8590612eb2565b604080516000808252602082019092526001600160a01b038416908390604051611fe29190615435565b60006040518083038185875af1925050503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b50509050806117135760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610bea565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120dd9190615435565b6000604051808303816000865af19150503d806000811461211a576040519150601f19603f3d011682016040523d82523d6000602084013e61211f565b606091505b50915091508180156121495750805115806121495750808060200190518101906121499190615451565b6112fc5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610bea565b6001600160a01b038381166000908152600c60209081526040808320938616835292905220546000198114611cf857818110156122075760405162461bcd60e51b815260206004820152601060248201526f45786365656420416c6c6f77616e636560801b6044820152606401610bea565b6001600160a01b038085166000908152600c60209081526040808320938716835292905220828203905550505050565b60006001600160a01b0384161580159061226a57506001600160a01b03831660009081526010602052604090205460ff16155b6122ae5760405162461bcd60e51b8152602060048201526015602482015274125395905312510814d1539111548815d053131155605a1b6044820152606401610bea565b6001600160a01b03841630146122ca5760115460ff16156122cd565b60015b61230a5760405162461bcd60e51b815260206004820152600e60248201526d2932b2b73a3930b731bc9022b93960911b6044820152606401610bea565b6011805460ff191660011790556001600160a01b0384166000908152600b6020526040812054838110156123805760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542053454e4445522042414c414e434500000000006044820152606401610bea565b6001600160a01b038087166000818152600b602052604090208684039055600a549091161480156123ca57506001600160a01b0385166000908152600f602052604090205460ff16155b80156123de5750601154610100900460ff16155b15612487576001600160a01b0385166000908152600d602052604090205460ff161561240b576000612444565b61244461241a6012600a61537c565b6113a3867f00000000000000000000000000000000000000000000000000b1a2bc2ec50000612eb2565b915061244f84613419565b612463868661245e8786612cf9565b613945565b6001600160a01b0385166000908152600b6020526040902042600190910155612c73565b600a546001600160a01b0386811691161480156124bd57506001600160a01b0386166000908152600f602052604090205460ff16155b80156124d15750601154610100900460ff16155b156127565760006124e06115fa565b6001600160a01b0388166000908152600e602052604090205490915060ff1615801561250e575060225460ff165b61251957600161251e565b808511155b6125625760405162461bcd60e51b8152602060048201526015602482015274115610d15151081315134814d15313081312535255605a1b6044820152606401610bea565b6001600160a01b0387166000908152600d602052604090205460ff16158015612593575060225462010000900460ff165b61259e5760006125d7565b6125d76125ad6012600a61537c565b6113a3877f000000000000000000000000000000000000000000000000006a94d74f430000612eb2565b60165490935060ff16801561260557506001600160a01b0387166000908152600d602052604090205460ff16155b156126ce576019546001600160a01b0388166000908152600b6020526040812060010154909190612637904290612cf9565b11156126a157601a546001600160a01b0389166000908152600b6020526040902060010154612667904290612cf9565b11156126745760006126be565b61269c6126836012600a61537c565b6018546113a39061269590600a612eb2565b8990612eb2565b6126be565b6126be6126b06012600a61537c565b6017546113a3908990612eb2565b90506126ca8482612e53565b9350505b6001600160a01b03871630148015906126f557506008546001600160a01b03888116911614155b801561271a57506001600160a01b0387166000908152600d602052604090205460ff16155b801561272f5750601154600160301b900460ff165b1561273c5761273c6139ec565b6127508761274a8786612cf9565b85613af6565b50612c73565b601154610100900460ff1615612bb357600a546001600160a01b03878116911614801561279c57506001600160a01b0385166000908152600d602052604090205460ff16155b156127dd576127da6127b06012600a61537c565b6113a3867f000000000000000000000000000000000000000000000000001c6bf526340000612eb2565b91505b600a546001600160a01b03868116911614801561281357506001600160a01b0386166000908152600d602052604090205460ff16155b15612bae5760006128536128296012600a61537c565b6113a3877f000000000000000000000000000000000000000000000000001c6bf526340000612eb2565b601154909350600160301b900460ff16801561287857506001600160a01b0387163014155b15612885576128856139ec565b600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff91906153f0565b506001600160701b039182169350169050600061291c8887612cf9565b60408051600180825281830190925291925060009190816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181612937575050604080516060810182523081526007546001600160a01b03166020820152600091810182905282519293509183919061299e5761299e615269565b60209081029190910101526009546040516326207f2d60e21b81526000916001600160a01b031690639881fcb4906129dc90869086906004016154cd565b600060405180830381865afa1580156129f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a2191908101906154e6565b600181518110612a3357612a33615269565b60200260200101519050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abe91906153b7565b6001600160a01b031603612b0c57612af8612ad98685612e53565b6113a3612ae86012600a61537c565b612af28886612cf9565b90612eb2565b9550612b048482612cf9565b601e55612b42565b612b32612b198585612e53565b6113a3612b286012600a61537c565b612af28986612cf9565b9550612b3e8582612cf9565b601e555b6013548611612ba7576011805461ff001916908190556013879055670429d069189e00006005819055600455602754602254602854602954612ba09460ff6101008504811694620100009004811693600160201b9092041691612f8f565b601e54601f555b5050505050505b612c64565b600a546001600160a01b03878116911614801590612bdf5750600a546001600160a01b03868116911614155b15612bec57612bec611303565b6001600160a01b0386166000908152600f602052604090205460ff1680612c2b57506001600160a01b0385166000908152600f602052604090205460ff165b15612c64576001600160a01b038087166000908152600f6020526040808220805460ff1990811690915592881682529020805490911690555b612c73868661245e8786612cf9565b8115612ce357601154600160301b900460ff1615612cd8576000612cbd612c9c6012600a61537c565b6113a3612cb6600454600554612e5390919063ffffffff16565b8690612eb2565b90508060206000828254612cd191906151ce565b9091555050505b612ce3863084613945565b50506011805460ff191690555060019392505050565b600082821115612d4b5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bea565b612d558284615577565b9392505050565b601154600090600160281b900460ff1615612e4d576000612d8e6014546113a360125442612cf990919063ffffffff16565b90508015612e4b5760135460005b82811015612dd9576000612dc3612db56012600a61537c565b6015546113a3908690612eb2565b9250819050612dd18161527f565b915050612d9c565b50601454612de79083612eb2565b60126000828254612df891906151ce565b90915550506013819055602254610100900460ff1615612e4957602754602254601154602854602954612e49949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b505b505b50600190565b600080612e6083856151ce565b905083811015612d555760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bea565b600082600003612ec457506000610c6f565b6000612ed0838561558a565b905082612edd85836155a1565b14612d555760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bea565b6000808211612f855760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bea565b612d5582846155a1565b6000612fad612fa06012600a61537c565b6013546113a3908a612eb2565b601354909150612fbd9082612e53565b602555601354612fcd9082612cf9565b60265560278790558580612fde5750845b6011805462ff000019169115620100000291909117905583613059578515613026576022805461ff0019166101008815150217905561301d8184612f34565b60245560288390555b8415613054576022805462ff00001916620100008715150217905561304b8183612f34565b60235560298290555b61307d565b6022805462ffff0019166101008815150262ff000019161762010000871515021790555b6011805464ff000000001916600160201b86151502179081905560ff62010000909104166130ea576013546040805160608082526003908201526204170760ec1b608082015242602082015280820192909252516000805160206156008339815191529181900360a00190a15b50505050505050565b600080600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561314c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317091906153f0565b50600a546001600160a01b03166000818152600b6020908152604091829020548251630dfe168160e01b815292516001600160701b0396871698509490951695503093630dfe16819260048082019392918290030181865afa1580156131da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fe91906153b7565b6001600160a01b03160361322757613220866113a384612af26012600a61537c565b935061323e565b61323b866113a385612af26012600a61537c565b93505b838111156132ae5760006132528286612cf9565b600a546001600160a01b03166000908152600b602052604090205490915061327a9082612cf9565b600a80546001600160a01b039081166000908152600b6020526040902092909255546132a891163083613945565b506133a4565b6132b88482612cf9565b60208054306000908152600b909252604082205492975090916132da91612cf9565b905085811061332c57306000908152600b60205260409020546132fd9087612cf9565b306000818152600b6020526040902091909155600a5461332791906001600160a01b031688613945565b6133a2565b801561337657306000908152600b602052604090205461334c9082612cf9565b306000818152600b6020526040902091909155600a5461337691906001600160a01b031683613945565b60006133828783612cf9565b905080156133a057600a546133a0906001600160a01b031682614707565b505b505b600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133f457600080fd5b505af1158015613408573d6000803e3d6000fd5b505050601396909655505050505050565b600a546001600160a01b03166000818152600b6020526040808220548151630240bc6b60e21b81529151929384938493849283929091630902f1ac9160048083019260609291908290030181865afa158015613479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349d91906153f0565b506040805160018082528183019092526001600160701b039384169550919092169250600091816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816134c8575050604080516060810182526007546001600160a01b03168152306020820152600091810182905282519293509183919061352f5761352f615269565b602090810291909101015260095460405163d5c54e3360e01b81526000916001600160a01b03169063d5c54e339061356d908c9086906004016154cd565b600060405180830381865afa15801561358a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135b291908101906154e6565b9050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363591906153b7565b6001600160a01b031603613678576136708160008151811061365957613659615269565b602002602001015184612e5390919063ffffffff16565b601e556136a9565b6136a58160008151811061368e5761368e615269565b602002602001015185612e5390919063ffffffff16565b601e555b6136c36013546113a3601e546012600a612af2919061537c565b602254909850610100900460ff161561379057601154600090600160201b900460ff166136fe576024546013546136f991612e53565b613726565b613726611437876113a361371f601354602554612cf990919063ffffffff16565b8e90612eb2565b9050600061374a613737888d612e53565b601e546113a390612af26012600a61537c565b9050818111801561375b5750600082115b8015613768575060135482115b1561378d57613785826113a3601e546012600a612af2919061537c565b601383905599505b50505b848811156138925760006137a48987612cf9565b60208054306000908152600b909252604082205492935090916137c691612cf9565b90508181111561381957306000908152600b60205260409020546137ea9083612cf9565b306000818152600b6020526040902091909155600a5461381491906001600160a01b031684613945565b61388b565b6138238282612cf9565b9850801561386f57306000908152600b60205260409020546138459082612cf9565b306000818152600b6020526040902091909155600a5461386f91906001600160a01b031683613945565b881561388b57600a5461388b906001600160a01b03168a614707565b50506138f2565b61389c8589612cf9565b600a546001600160a01b03166000908152600b60205260409020549096506138c49087612cf9565b600a80546001600160a01b039081166000908152600b6020526040902092909255546138f291163088613945565b604080518a8152602081018a9052908101889052606081018790527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a1505050505050505050565b6001600160a01b03821661399b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49442052454345495645522057414c4c45540000000000000000006044820152606401610bea565b6001600160a01b038083166000818152600b602052604090819020805485019055519091851690600080516020615620833981519152906139df9085815260200190565b60405180910390a3505050565b306000908152600b6020908152604090912054602154915490911115613a0f5750565b60205481106114f75760205460225460009060ff16613a4857613a4360646113a36002600154612eb290919063ffffffff16565b613a50565b613a506115fa565b9050806020541115613a60578091505b613a69826149b3565b50600854600954600754600654604051634998b10960e11b81526001600160a01b039384166004820152918316602483015282166044820152911690639331621290606401600060405180830381600087803b158015613ac857600080fd5b505af1158015613adc573d6000803e3d6000fd5b5050602054613aee9250905083612cf9565b602055505050565b6000806000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7591906153f0565b50600a546001600160a01b039081166000818152600b60205260408082205460075491516370a0823160e01b815260048101949094526001600160701b0396871698509490951695509293909116906370a0823190602401602060405180830381865afa158015613bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0e9190615250565b6009549091506001600160a01b03163303613d5d576000613c37836113a384612af28e8e612e53565b6009549091506001600160a01b03163181118015613cce5750600754600954604051636eb1769f60e11b81526001600160a01b038e8116600483015291821660248201528392919091169063dd62ed3e90604401602060405180830381865afa158015613ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccc9190615250565b105b613d5b5760405162461bcd60e51b815260206004820152605260248201527f4f6e6c79204c697175696469747941646465722063616e206164644c6971756960448201527f64697479206f722072656d6f766520574e415449564520616c6c6f77616e6365606482015271081a5b881c9bdd5d195c881d1bc81cd95b1b60721b608482015260a401610bea565b505b604080516001808252818301909252600091816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181613d74575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190613ddb57613ddb615269565b6020026020010181905250306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6791906153b7565b6001600160a01b031603613f1f576009546040516326207f2d60e21b8152613f17916001600160a01b031690639881fcb490613ea9908e9086906004016154cd565b600060405180830381865afa158015613ec6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eee91908101906154e6565b600181518110613f0057613f00615269565b602002602001015185612cf990919063ffffffff16565b601e55613fc5565b6009546040516326207f2d60e21b8152613fc1916001600160a01b031690639881fcb490613f53908e9086906004016154cd565b600060405180830381865afa158015613f70573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9891908101906154e6565b600181518110613faa57613faa615269565b602002602001015186612cf990919063ffffffff16565b601e555b6001600160a01b038b1630146142b357601b548210158015613ff157506011546301000000900460ff16155b1561403a576011805463ff00000019166301000000179055601e54601f55601354604051600080516020615600833981519152916140319142919061538b565b60405180910390a15b6011546301000000900460ff168015614062575061405d61137d6012600a61537c565b601e54115b8061409057506011546301000000900460ff168015614090575061408b6113d76012600a61537c565b601e54105b1561419d576140a461137d6012600a61537c565b601e5411156140c3576140bf6114376114286012600a61537c565b6013555b6140d26113d76012600a61537c565b601e5410156140f1576140ed61146e6114286012600a61537c565b6013555b61410b6013546113a3601e546012600a612af2919061537c565b602254909750610100900460ff168061412c575060225462010000900460ff165b1561416857602754602254601154602854602954614168949360ff610100820481169462010000909204811693600160201b9092041691612f8f565b601e54601f55601354604051600080516020615600833981519152916141909142919061538b565b60405180910390a16141a7565b6141a5612d5c565b505b60225462010000900460ff1680156141c857506001600160a01b038b163014155b80156141ea575060646141e8602654601354612cf990919063ffffffff16565b115b156142b357601154600090600160201b900460ff166142175760235460135461421291612cf9565b61423f565b61423f61146e856113a3614238602654601354612cf990919063ffffffff16565b8f90612eb2565b9050614259816113a3601e546012600a612af2919061537c565b97506000614275856113a3601e546012600a612af2919061537c565b905060265481118015614289575060265482115b156142b0576142a86013546113a3601e546012600a612af2919061537c565b601383905598505b50505b6142cd6013546113a3601e546012600a612af2919061537c565b9650828711156145435760006142e38885612cf9565b9050808b111561436957600a546001600160a01b03166000908152600b60205260409020546143129082612e53565b600a546001600160a01b03166000908152600b60205260409020556143378b82612cf9565b306000908152600b6020526040902054909950614354908a612e53565b306000908152600b602052604090205561453d565b600a546001600160a01b03166000908152600b602052604090205461438e908c612e53565b600a546001600160a01b03166000908152600b60205260408120919091556143b6828d612cf9565b60208054306000908152600b909252604082205492935090916143d891612cf9565b90508181111561447957306000908152600b60205260409020546143fc9083612cf9565b306000908152600b602052604080822092909255600a546001600160a01b03168152205461442a9083612e53565b600a80546001600160a01b039081166000908152600b602090815260409182902094909455915491518581529116913091600080516020615620833981519152910160405180910390a361453a565b6144838282612cf9565b9850801561451e57306000908152600b60205260409020546144a59082612cf9565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546144d39082612e53565b600a80546001600160a01b039081166000908152600b602090815260409182902094909455915491518481529116913091600080516020615620833981519152910160405180910390a35b881561453a57600a5461453a906001600160a01b03168a614707565b50505b5061467f565b600061454f8489612cf9565b9050600061455d8583612cf9565b905061457361456c8d8d612e53565b8290612cf9565b600a546001600160a01b03166000908152600b60205260409020556145988c83612e53565b9950600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145ea57600080fd5b505af11580156145fe573d6000803e3d6000fd5b5050600a546001600160a01b03166000908152600b6020526040808220859055308252902054614631925090508b612e53565b306000818152600b60205260409081902092909255600a54915190916001600160a01b03169060008051602061562083398151915290614674908e815260200190565b60405180910390a350505b600a546040518b81526001600160a01b03918216918d16906000805160206156208339815191529060200160405180910390a3604080518b815260208101899052908101879052606081018990527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a15050505050505050505050565b6001600160a01b0382166147565760405162461bcd60e51b8152602060048201526016602482015275494e56414c4944204d494e544552204144445245535360501b6044820152606401610bea565b6147626012600a61537c565b61477190641029c1230061558a565b600154101561487f576147866012600a61537c565b61479590641029c1230061558a565b6001546147a29083612e53565b11156148285760006147cd6001546012600a6147be919061537c565b6113ee90641029c1230061558a565b905080600160008282546147e191906151ce565b90915550506001600160a01b0383166000908152600b60205260409020546148099082612e53565b6001600160a01b0384166000908152600b60205260409020555061487f565b6001600160a01b0382166000908152600b602052604090205461484b9082612e53565b6001600160a01b0383166000908152600b6020526040812091909155600180548392906148799084906151ce565b90915550505b600254600154101580156148af575061489a6012600a61537c565b6148a990641029c1230061558a565b60025414155b15614980576011805461ff0019166101001790556148cf6012600a61537c565b6148de90641029c1230061558a565b60015414614909576149046148f56012600a61537c565b6003546002546113a391612eb2565b614924565b6149156012600a61537c565b61492490641029c1230061558a565b6002556706f05b59d3b20000600581815560049190915560135460408051606080825281019390935264109b185cdd60da1b60808401524260208401528201526000805160206156008339815191529060a00160405180910390a15b6040518181526001600160a01b038316906000906000805160206156208339815191529060200160405180910390a35050565b604080516001808252818301909252600091829190816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816149cd575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190614a3457614a34615269565b602090810291909101810191909152306000908152600c825260408082206009546001600160a01b031683529092529081208054859290614a769084906151ce565b90915550506007546008546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af09190615250565b600954600854604051636cc1ae1360e01b81529293506001600160a01b0391821692636cc1ae1392614b2f9289926000928992169042906004016155c3565b600060405180830381600087803b158015614b4957600080fd5b505af1158015614b5d573d6000803e3d6000fd5b50506007546008546040516370a0823160e01b81526001600160a01b039182166004820152614bd794508593509116906370a0823190602401602060405180830381865afa158015614bb3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190615250565b949350505050565b60005b83811015614bfa578181015183820152602001614be2565b50506000910152565b6020815260008251806020840152614c22816040850160208701614bdf565b601f01601f19169190910160400192915050565b6001600160a01b03811681146114f757600080fd5b60008060408385031215614c5e57600080fd5b8235614c6981614c36565b946020939093013593505050565b80151581146114f757600080fd5b60008060008060808587031215614c9b57600080fd5b8435614ca681614c36565b93506020850135614cb681614c36565b9250604085013591506060850135614ccd81614c77565b939692955090935050565b600080600060608486031215614ced57600080fd5b8335614cf881614c36565b92506020840135614d0881614c36565b929592945050506040919091013590565b600060208284031215614d2b57600080fd5b8135612d5581614c36565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614d7557614d75614d36565b604052919050565b600067ffffffffffffffff821115614d9757614d97614d36565b5060051b60200190565b600082601f830112614db257600080fd5b81356020614dc7614dc283614d7d565b614d4c565b82815260059290921b84018101918181019086841115614de657600080fd5b8286015b84811015614e015780358352918301918301614dea565b509695505050505050565b60008060408385031215614e1f57600080fd5b823567ffffffffffffffff80821115614e3757600080fd5b818501915085601f830112614e4b57600080fd5b81356020614e5b614dc283614d7d565b82815260059290921b84018101918181019089841115614e7a57600080fd5b948201945b83861015614ea1578535614e9281614c36565b82529482019490820190614e7f565b96505086013592505080821115614eb757600080fd5b50614ec485828601614da1565b9150509250929050565b60008083601f840112614ee057600080fd5b50813567ffffffffffffffff811115614ef857600080fd5b6020830191508360208260051b8501011115614f1357600080fd5b9250929050565b60008060008060608587031215614f3057600080fd5b843567ffffffffffffffff811115614f4757600080fd5b614f5387828801614ece565b9095509350506020850135614f6781614c77565b9396929550929360400135925050565b60008060008060008060c08789031215614f9057600080fd5b863595506020870135614fa281614c77565b94506040870135614fb281614c77565b93506060870135614fc281614c77565b9598949750929560808101359460a0909101359350915050565b60008060408385031215614fef57600080fd5b82359150602083013561500181614c77565b809150509250929050565b60008060006060848603121561502157600080fd5b8335925060208401359150604084013561503a81614c77565b809150509250925092565b600080600080600060a0868803121561505d57600080fd5b85359450602086013593506040860135925060608601359150608086013561508481614c77565b809150509295509295909350565b600080604083850312156150a557600080fd5b82356150b081614c36565b9150602083013561500181614c77565b6000806000606084860312156150d557600080fd5b83356150e081614c36565b925060208401359150604084013561503a81614c77565b6000806040838503121561510a57600080fd5b823561511581614c36565b9150602083013561500181614c36565b6000806000806060858703121561513b57600080fd5b843567ffffffffffffffff81111561515257600080fd5b61515e87828801614ece565b909550935050602085013561517281614c77565b91506040850135614ccd81614c77565b6000806000806080858703121561519857600080fd5b8435935060208501359250604085013591506060850135614ccd81614c77565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6f57610c6f6151b8565b60208082526012908201527121b0b63632b91034b9b713ba1037bbb732b960711b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561526257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201615291576152916151b8565b5060010190565b600181815b808511156152d35781600019048211156152b9576152b96151b8565b808516156152c657918102915b93841c939080029061529d565b509250929050565b6000826152ea57506001610c6f565b816152f757506000610c6f565b816001811461530d576002811461531757615333565b6001915050610c6f565b60ff841115615328576153286151b8565b50506001821b610c6f565b5060208310610133831016604e8410600b8410161715615356575081810a610c6f565b6153608383615298565b8060001904821115615374576153746151b8565b029392505050565b6000612d5560ff8416836152db565b60608082526005908201526409082a886960db1b60808201526020810192909252604082015260a00190565b6000602082840312156153c957600080fd5b8151612d5581614c36565b80516001600160701b03811681146153eb57600080fd5b919050565b60008060006060848603121561540557600080fd5b61540e846153d4565b925061541c602085016153d4565b9150604084015163ffffffff8116811461503a57600080fd5b60008251615447818460208701614bdf565b9190910192915050565b60006020828403121561546357600080fd5b8151612d5581614c77565b600081518084526020808501945080840160005b838110156154c257815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101615482565b509495945050505050565b828152604060208201526000614bd7604083018461546e565b600060208083850312156154f957600080fd5b825167ffffffffffffffff81111561551057600080fd5b8301601f8101851361552157600080fd5b805161552f614dc282614d7d565b81815260059190911b8201830190838101908783111561554e57600080fd5b928401925b8284101561556c57835182529284019290840190615553565b979650505050505050565b81810381811115610c6f57610c6f6151b8565b8082028115828204841417610c6f57610c6f6151b8565b6000826155be57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006155e260a083018661546e565b6001600160a01b039490941660608301525060800152939250505056fe6b394e3b256f53d27bc3bd048c71d1c38a3924a1b67754ddd32d50c67e85e0e8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122012580195be743d21579b83b0d4ce891f6e56ff63091d70fd2c005c0f8a31462064736f6c63430008110033
Deployed Bytecode Sourcemap
23637:43176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27306:33;;;;;;;;;;-1:-1:-1;27306:33:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;27306:33:0;;;;;;;;26151:34;;;;;;;;;;;;;;;;;;;352:25:1;;;340:2;325:18;26151:34:0;206:177:1;28499:91:0;;;;;;;;;;-1:-1:-1;28577:5:0;;;;;;;;;;;;-1:-1:-1;;;28577:5:0;;;;28499:91;;;;;;;:::i;29281:306::-;;;;;;;;;;-1:-1:-1;29281:306:0;;;;;:::i;:::-;;:::i;23848:56::-;;;;;;;;;;;;;;;;65090:706;;;;;;;;;;-1:-1:-1;65090:706:0;;;;;:::i;:::-;;:::i;:::-;;29595:281;;;;;;;;;;-1:-1:-1;29595:281:0;;;;;:::i;:::-;;:::i;25793:22::-;;;;;;;;;;-1:-1:-1;25793:22:0;;;;;;;;;;;28701:91;;;;;;;;;;-1:-1:-1;28701:91:0;;23839:2;2823:36:1;;2811:2;2796:18;28701:91:0;2681:184:1;26692:59:0;;;;;;;;;;;;;;;;27547:23;;;;;;;;;;;;;;;;24025:62;;;;;;;;;;;;;;;;24907:26;;;;;;;;;;-1:-1:-1;24907:26:0;;;;-1:-1:-1;;;;;24907:26:0;;;;;;-1:-1:-1;;;;;3049:32:1;;;3031:51;;3019:2;3004:18;24907:26:0;2870:218:1;24942:103:0;;;;;;;;;;-1:-1:-1;24942:103:0;;;;-1:-1:-1;;;;;24942:103:0;;;25476:39;;;;;;;;;;-1:-1:-1;25476:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;66540:270;;;;;;;;;;-1:-1:-1;66540:270:0;;;;;:::i;:::-;;:::i;25418:51::-;;;;;;;;;;-1:-1:-1;25418:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27431:36;;;;;;;;;;;;;;;;65804:728;;;;;;;;;;-1:-1:-1;65804:728:0;;;;;:::i;:::-;;:::i;26861:29::-;;;;;;;;;;;;;;;;64130:571;;;;;;;;;;-1:-1:-1;64130:571:0;;;;;:::i;:::-;;:::i;27474:30::-;;;;;;;;;;;;;;;;25306:48;;;;;;;;;;-1:-1:-1;25306:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28800:126;;;;;;;;;;-1:-1:-1;28800:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;28892:18:0;28865:7;28892:18;;;:9;:18;;;;;:26;;28800:126;54076:2435;;;;;;;;;;;;;:::i;25361:50::-;;;;;;;;;;-1:-1:-1;25361:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;60458:313;;;;;;;;;;-1:-1:-1;60458:313:0;;;;;:::i;:::-;;:::i;24635:48::-;;;;;;;;;;;;;;;;27346:34;;;;;;;;;;-1:-1:-1;27346:34:0;;;;;;;;;;;24787:73;;;;;;;;;;-1:-1:-1;24787:73:0;;;;-1:-1:-1;;;;;24787:73:0;;;28598:95;;;;;;;;;;-1:-1:-1;28678:7:0;;;;;;;;;;;;-1:-1:-1;;;28678:7:0;;;;28598:95;;26779:54;;;;;;;;;;;;;;;;56519:581;;;;;;;;;;-1:-1:-1;56519:581:0;;;;;:::i;:::-;;:::i;27387:37::-;;;;;;;;;;;;;;;;25872:34;;;;;;;;;;-1:-1:-1;25872:34:0;;;;-1:-1:-1;;;25872:34:0;;;;;;28934:148;;;;;;;;;;-1:-1:-1;28934:148:0;;;;;:::i;:::-;;:::i;60779:203::-;;;;;;;;;;;;;:::i;25741:22::-;;;;;;;;;;-1:-1:-1;25741:22:0;;;;;;;;;;;26083:29;;;;;;;;;;;;;;;;23703:20;;;;;;;;;;-1:-1:-1;23703:20:0;;;;-1:-1:-1;;;;;23703:20:0;;;52404:500;;;;;;;;;;-1:-1:-1;52404:500:0;;;;;:::i;:::-;;:::i;64709:373::-;;;;;;;;;;-1:-1:-1;64709:373:0;;;;;:::i;:::-;;:::i;62409:734::-;;;;;;;;;;-1:-1:-1;62409:734:0;;;;;:::i;:::-;;:::i;26047:29::-;;;;;;;;;;;;;;;;24710:48;;;;;;;;;;;;;;;;25070:27;;;;;;;;;;-1:-1:-1;25070:27:0;;;;-1:-1:-1;;;;;25070:27:0;;;63608:305;;;;;;;;;;-1:-1:-1;63608:305:0;;;;;:::i;:::-;;:::i;26119:25::-;;;;;;;;;;;;;;;;29090:183;;;;;;;;;;-1:-1:-1;29090:183:0;;;;;:::i;:::-;-1:-1:-1;;;;;29238:18:0;;;29206:7;29238:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29090:183;27511:29;;;;;;;;;;;;;;;;25612:53;;;;;;;;;;;;;;;25547;;;;;;;;;;;;;;;61447:272;;;;;;;;;;-1:-1:-1;61447:272:0;;;;;:::i;:::-;;:::i;63921:201::-;;;;;;;;;;-1:-1:-1;63921:201:0;;;;;:::i;:::-;;:::i;61727:516::-;;;;;;;;;;-1:-1:-1;61727:516:0;;;;;:::i;:::-;;:::i;26897:34::-;;;;;;;;;;;;;;;;25845:20;;;;;;;;;;-1:-1:-1;25845:20:0;;;;-1:-1:-1;;;25845:20:0;;;;;;63151:449;;;;;;;;;;-1:-1:-1;63151:449:0;;;;;:::i;:::-;;:::i;62251:150::-;;;;;;;;;;-1:-1:-1;62251:150:0;;;;;:::i;:::-;;:::i;26961:32::-;;;;;;;;;;;;;;;;60990:399;;;;;;;;;;;;;:::i;26591:61::-;;;;;;;;;;;;;;;;29281:306;29381:4;-1:-1:-1;;;;;29411:21:0;;29403:50;;;;-1:-1:-1;;;29403:50:0;;12040:2:1;29403:50:0;;;12022:21:1;12079:2;12059:18;;;12052:30;-1:-1:-1;;;12098:18:1;;;12091:46;12154:18;;29403:50:0;;;;;;;;;29476:10;29464:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29464:32:0;;;;;;;;;:41;;29500:5;;29464:23;:41;;29500:5;;29464:41;:::i;:::-;;;;-1:-1:-1;;29521:36:0;;352:25:1;;;-1:-1:-1;;;;;29521:36:0;;;29530:10;;29521:36;;340:2:1;325:18;29521:36:0;;;;;;;-1:-1:-1;29575:4:0;29281:306;;;;;:::o;65090:706::-;28021:9;;;;:18;28013:27;;;;;;28051:9;:16;;-1:-1:-1;;28051:16:0;28063:4;28051:16;;;:9;27920:5;27906:10:::1;-1:-1:-1::0;;;;;27920:5:0;;::::1;27906:19;27898:50;;;;-1:-1:-1::0;;;27898:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;65277:16:0;::::2;65269:64;;;;-1:-1:-1::0;;;65269:64:0::2;;;;;;;:::i;:::-;65344:20;65367:12;:107;;65432:42;::::0;-1:-1:-1;;;65432:42:0;;65468:4:::2;65432:42;::::0;::::2;3031:51:1::0;-1:-1:-1;;;;;65432:27:0;::::2;::::0;::::2;::::0;3004:18:1;;65432:42:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65367:107;;;65395:21;65367:107;65344:130;;65516:1;65507:6;:10;:36;;;;;65531:12;65521:6;:22;;65507:36;65485:149;;;::::0;-1:-1:-1;;;65485:149:0;;13587:2:1;65485:149:0::2;::::0;::::2;13569:21:1::0;13626:2;13606:18;;;13599:30;13665:34;13645:18;;;13638:62;13736:33;13716:18;;;13709:61;13787:19;;65485:149:0::2;13385:427:1::0;65485:149:0::2;65649:12;65645:143;;;65678:42;65709:2;65713:6;65678:30;:42::i;:::-;65645:143;;;65738:50;65766:9;65777:2;65781:6;65738:27;:50::i;:::-;-1:-1:-1::0;;28090:9:0;:17;;-1:-1:-1;;28090:17:0;;;-1:-1:-1;;;65090:706:0:o;29595:281::-;29716:4;29751:10;29772:37;29788:4;29751:10;29803:5;29772:15;:37::i;:::-;29820:26;29830:4;29836:2;29840:5;29820:9;:26::i;:::-;-1:-1:-1;29864:4:0;;29595:281;-1:-1:-1;;;;;29595:281:0:o;66540:270::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;66632:18:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;66670:12:0::1;::::0;-1:-1:-1;;;;;66654:29:0;;::::1;66670:12:::0;::::1;66654:29;;66632:51;66610:112;;;::::0;-1:-1:-1;;;66610:112:0;;14019:2:1;66610:112:0::1;::::0;::::1;14001:21:1::0;14058:2;14038:18;;;14031:30;-1:-1:-1;;;14077:18:1;;;14070:41;14128:18;;66610:112:0::1;13817:335:1::0;66610:112:0::1;66733:12;:27:::0;;-1:-1:-1;;;;;;66733:27:0::1;-1:-1:-1::0;;;;;66733:27:0;::::1;::::0;;::::1;::::0;;;66776:26:::1;::::0;3031:51:1;;;66776:26:0::1;::::0;3019:2:1;3004:18;66776:26:0::1;;;;;;;66540:270:::0;:::o;65804:728::-;28021:9;;;;:18;28013:27;;;;;;28051:9;:16;;-1:-1:-1;;28051:16:0;28063:4;28051:16;;;:9;27920:5;27906:10:::1;-1:-1:-1::0;;;;;27920:5:0;;::::1;27906:19;27898:50;;;;-1:-1:-1::0;;;27898:50:0::1;;;;;;;:::i;:::-;65963:6:::2;:13;65950:2;:9;:26;65942:35;;;::::0;::::2;;65993:9;65988:537;66012:2;:9;66008:1;:13;65988:537;;;66068:1;-1:-1:-1::0;;;;;66051:19:0::2;:2;66054:1;66051:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;66051:19:0::2;::::0;66043:67:::2;;;;-1:-1:-1::0;;;66043:67:0::2;;;;;;;:::i;:::-;66163:1;66151:6;66158:1;66151:9;;;;;;;;:::i;:::-;;;;;;;:13;:129;;;;-1:-1:-1::0;66262:17:0::2;::::0;;66242:4:::2;66224:24;::::0;;;:9:::2;:24:::0;;;;;;;:32;66223:57:::2;::::0;:38:::2;:57::i;:::-;66189:6;66196:1;66189:9;;;;;;;;:::i;:::-;;;;;;;:91;;66151:129;66125:254;;;::::0;-1:-1:-1;;;66125:254:0;;14491:2:1;66125:254:0::2;::::0;::::2;14473:21:1::0;14530:2;14510:18;;;14503:30;14569:34;14549:18;;;14542:62;14640:33;14620:18;;;14613:61;14691:19;;66125:254:0::2;14289:427:1::0;66125:254:0::2;66394:12;66409:42;66427:4;66434:2;66437:1;66434:5;;;;;;;;:::i;:::-;;;;;;;66441:6;66448:1;66441:9;;;;;;;;:::i;:::-;;;;;;;66409;:42::i;:::-;66394:57;;66474:7;66466:47;;;::::0;-1:-1:-1;;;66466:47:0;;14923:2:1;66466:47:0::2;::::0;::::2;14905:21:1::0;14962:2;14942:18;;;14935:30;15001:29;14981:18;;;14974:57;15048:18;;66466:47:0::2;14721:351:1::0;66466:47:0::2;-1:-1:-1::0;66023:3:0;::::2;::::0;::::2;:::i;:::-;;;;65988:537;;;-1:-1:-1::0;;28090:9:0;:17;;-1:-1:-1;;28090:17:0;;;-1:-1:-1;65804:728:0:o;64130:571::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;64278:9:::1;64273:421;64293:21:::0;;::::1;64273:421;;;64369:1;64344:10:::0;;64355:1;64344:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64344:27:0::1;::::0;64336:36:::1;;;::::0;::::1;;64391:4;64399:1;64391:9:::0;64387:296:::1;;64436:8;64402:16;:31;64419:10;;64430:1;64419:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64402:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;64402:31:0;:42;;-1:-1:-1;;64402:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64387:296:::1;;;64468:4;64476:1;64468:9:::0;64464:219:::1;;64515:8;64479:18;:33;64498:10;;64509:1;64498:13;;;;;;;:::i;64464:219::-;64596:8;64562:16;:31;64579:10;;64590:1;64579:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64562:31:0::1;-1:-1:-1::0;;;;;64562:31:0::1;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;64659:8;64623:18;:33;64642:10;;64653:1;64642:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64623:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;64623:33:0;:44;;-1:-1:-1;;64623:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64464:219:::1;64316:3:::0;::::1;::::0;::::1;:::i;:::-;;;;64273:421;;;;64130:571:::0;;;;:::o;54076:2435::-;54121:8;;-1:-1:-1;;;54121:8:0;;;;:22;;;;-1:-1:-1;54133:10:0;;;;;;;54121:22;54120:54;;;-1:-1:-1;54149:10:0;;;;;;;:24;;;;-1:-1:-1;54163:10:0;;;;;;;54149:24;54116:2388;;;54211:14;;54240:6;:4;:6::i;:::-;-1:-1:-1;54305:10:0;;;;;;;:266;;;;-1:-1:-1;54378:193:0;25949:15;23839:2;25949;:15;:::i;:::-;54405:123;54459:42;54478:22;;23839:2;25949;:15;;;;:::i;:::-;54459:18;;:42::i;:::-;54405:19;;;:23;:123::i;:::-;54378:177;;:193::i;:::-;54340:14;;:231;54305:266;54304:557;;;-1:-1:-1;54594:10:0;;;;;;;:266;;;;-1:-1:-1;54667:193:0;25949:15;23839:2;25949;:15;:::i;:::-;54694:123;54748:42;54767:22;;23839:2;25949;:15;;;;:::i;:::-;54748:18;;:42::i;54667:193::-;54629:14;;:231;54594:266;54282:2139;;;54960:193;25949:15;23839:2;25949;:15;:::i;54960:193::-;54922:14;;:231;54896:521;;;55213:184;55258:116;25949:15;23839:2;25949;:15;:::i;:::-;55278:18;;55259:14;;:38;;:18;:38::i;55258:116::-;55213:14;;;:18;:184::i;:::-;55196:14;:201;54896:521;55499:193;25949:15;23839:2;25949;:15;:::i;55499:193::-;55461:14;;:231;55435:521;;;55752:184;55797:116;25949:15;23839:2;25949;:15;:::i;55797:116::-;55752:14;;;:18;:184::i;:::-;55735:14;:201;55435:521;56008:8;;56039:21;;56128:11;;56162:13;;56198:14;;55974:257;;56008:8;56039:21;;;;;;;56083:22;;;;;;;-1:-1:-1;;;56128:11:0;;;;;55974;:257::i;:::-;56313:14;;56291:19;:36;56390:14;;56351:54;;-1:-1:-1;;;;;;;;;;;56351:54:0;;;56373:15;;56390:14;56351:54;:::i;:::-;;;;;;;;54282:2139;56452:14;;56439:9;:27;56435:57;;56468:24;56477:14;;56468:8;:24::i;:::-;54176:2328;54116:2388;54076:2435::o;60458:313::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;60692:71:::1;60704:8;60714:3;60719;60724:11;60737;60750:12;60692:11;:71::i;:::-;60458:313:::0;;;;;;:::o;56519:581::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;56761:16:::1;56770:6;56761:8;:16::i;:::-;56792:25;56788:305;;;56834:11;:18:::0;;56867:21:::1;:29:::0;;-1:-1:-1;;56911:30:0;;;-1:-1:-1;;56989:16:0;56834:18;56989:16;;;57066:14:::1;::::0;57025:56:::1;::::0;;17337:2:1;17319:21;;;17376:1;17356:18;;;17349:29;-1:-1:-1;;;17409:3:1;17394:19;;17387:38;57049:15:0::1;17492:4:1::0;17477:20;;17470:36;17522:18;;;17515:34;;;;-1:-1:-1;;;;;;;;;;;57025:56:0;17457:3:1;17442:19;57025:56:0::1;;;;;;;56788:305;56519:581:::0;;:::o;28934:148::-;29003:4;29020:32;29030:10;29042:2;29046:5;29020:9;:32::i;:::-;-1:-1:-1;29070:4:0;;28934:148;-1:-1:-1;;;28934:148:0:o;60779:203::-;60893:9;;;-1:-1:-1;;;;;60893:9:0;60826:18;60875:29;;;:9;:29;;;;;:37;60826:18;;60936:38;;25949:15;;23839:2;;25949:15;:::i;:::-;60937:16;:7;60949:3;60937:11;:16::i;60936:38::-;60923:51;;60846:136;60779:203;:::o;52404:500::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;52556:10:::1;:29:::0;;;52600:20;;52596:301:::1;;52659:40;25949:15;23839:2;25949;:15;:::i;:::-;52659:20:::0;;:24:::1;:40::i;:::-;52637:19;:62:::0;52731:15:::1;52714:14;:32:::0;52761:8:::1;:20:::0;;;::::1;::::0;::::1;-1:-1:-1::0;;;52761:20:0::1;-1:-1:-1::0;;52761:20:0;;::::1;::::0;;;::::1;::::0;;;52796:89:::1;;52870:14;::::0;52833:52:::1;::::0;;17818:2:1;17800:21;;;17857:1;17837:18;;;17830:29;-1:-1:-1;;;17890:3:1;17875:19;;17868:34;52853:15:0::1;17969:4:1::0;17954:20;;17947:36;17999:18;;;17992:34;;;;52833:52:0;-1:-1:-1;;;;;;;;;;;52833:52:0;;;;17934:3:1;52833:52:0;;::::1;52796:89;52404:500:::0;;;:::o;64709:373::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;64903:6:::1;:13:::0;;;;64927:12:::1;:28:::0;;;;64966:18:::1;:34:::0;65011:24:::1;:39:::0;65061:3:::1;:13:::0;;-1:-1:-1;;65061:13:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64709:373::o;62409:734::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;62492:11:::1;:40:::0;;-1:-1:-1;;;;;;62492:40:0::1;-1:-1:-1::0;;;;;62492:40:0;;::::1;::::0;;;::::1;::::0;;;62547:17:::1;::::0;::::1;:31:::0;62543:593:::1;;62628:11;::::0;:21:::1;::::0;;-1:-1:-1;;;62628:21:0;;;;62595:16:::1;::::0;-1:-1:-1;;;;;62628:11:0::1;::::0;:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:11;:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62677:17;::::0;62614:153:::1;::::0;-1:-1:-1;;;62614:153:0;;-1:-1:-1;;;;;62677:17:0;;::::1;62614:153;::::0;::::1;18527:34:1::0;62721:4:0::1;18577:18:1::0;;;18570:43;18656:14;;18649:22;18629:18;;;18622:50;62614:44:0;::::1;::::0;::::1;::::0;18462:18:1;;62614:153:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62595:172:::0;-1:-1:-1;;;;;;62786:22:0;::::1;62782:246;;62854:11;;;;;;;;;-1:-1:-1::0;;;;;62854:11:0::1;-1:-1:-1::0;;;;;62854:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62910:17;::::0;62840:172:::1;::::0;-1:-1:-1;;;62840:172:0;;-1:-1:-1;;;;;62910:17:0;;::::1;62840:172;::::0;::::1;18527:34:1::0;62958:4:0::1;18577:18:1::0;;;18570:43;18656:14;;18649:22;18629:18;;;18622:50;62840:47:0;::::1;::::0;::::1;::::0;18462:18:1;;62840:172:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62829:183;;62782:246;63042:9;:32:::0;;-1:-1:-1;;;;;63042:32:0;;::::1;-1:-1:-1::0;;;;;;63042:32:0;;::::1;::::0;::::1;::::0;;:9:::1;63089:28:::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;63089:35:0::1;63042:32:::0;63089:35:::1;::::0;;62409:734;;:::o;63608:305::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;63762:22:0;::::1;63754:31;;;::::0;::::1;;63796:15;:27:::0;;;::::1;;-1:-1:-1::0;;;63796:27:0::1;-1:-1:-1::0;;63796:27:0;;::::1;::::0;;;::::1;::::0;;:15:::1;63834:24:::0;;-1:-1:-1;;;;;63834:24:0;;::::1;-1:-1:-1::0;;;;;;63834:24:0;;::::1;::::0;;;::::1;::::0;;;63869:16:::1;:36:::0;63608:305::o;61447:272::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;61582:10:::1;:21:::0;;-1:-1:-1;;61582:21:0::1;;::::0;::::1;;;;::::0;;61614:15:::1;:27:::0;;;61686:25:::1;25949:15;23839:2;25949;:15;:::i;:::-;61686:5:::0;;:9:::1;:25::i;:::-;61652:31;:59:::0;-1:-1:-1;;;61447:272:0:o;63921:201::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;64043:21:0;::::1;64035:30;;;::::0;::::1;;-1:-1:-1::0;;;;;64076:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;64076:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63921:201::o;61727:516::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;61872:7:::1;61869:367;;;61922:1;61903:20:::0;::::1;61895:46;;;::::0;-1:-1:-1;;;61895:46:0;;18885:2:1;61895:46:0::1;::::0;::::1;18867:21:1::0;18924:2;18904:18;;;18897:30;-1:-1:-1;;;18943:18:1;;;18936:43;18996:18;;61895:46:0::1;18683:337:1::0;61895:46:0::1;61979:8;;61988:1;61979:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;61956:9;:35:::0;;-1:-1:-1;;;;;;61956:35:0::1;-1:-1:-1::0;;;;;61956:35:0;;;::::1;::::0;;;::::1;::::0;;62026:8;;-1:-1:-1;62026:8:0;:11:::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;62006:17;:31:::0;;-1:-1:-1;;;;;;62006:31:0::1;-1:-1:-1::0;;;;;62006:31:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;62052:18:0::1;-1:-1:-1::0;62071:8:0;;-1:-1:-1;62071:8:0;:11:::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;62052:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;62052:31:0;:38;;-1:-1:-1;;62052:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;61869:367:::1;;;62125:6;62121:104;62134:19:::0;;::::1;62121:104;;;62201:8;62178:7;:20;62186:8;;62195:1;62186:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;62178:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;62178:20:0;:31;;-1:-1:-1;;62178:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62155:3;::::1;::::0;::::1;:::i;:::-;;;;62121:104;;61869:367;61727:516:::0;;;;:::o;63151:449::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;63326:22:::1;:38:::0;;;63375:18:::1;:30:::0;;;63445:17:::1;::::0;63496:9:::1;::::0;63438:79:::1;::::0;-1:-1:-1;;;63438:79:0;;-1:-1:-1;;;;;63496:9:0;;::::1;63438:79;::::0;::::1;3031:51:1::0;63445:17:0;::::1;::::0;63438:35:::1;::::0;3004:18:1;;63438:79:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63416:19;:101:::0;63528:15:::1;:33:::0;;;;63572:10:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;63572:20:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;63151:449:0:o;62251:150::-;27920:5;;-1:-1:-1;;;;;27920:5:0;27906:10;:19;27898:50;;;;-1:-1:-1;;;27898:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62332:20:0;::::1;62324:44;;;::::0;-1:-1:-1;;;62324:44:0;;19227:2:1;62324:44:0::1;::::0;::::1;19209:21:1::0;19266:2;19246:18;;;19239:30;-1:-1:-1;;;19285:18:1;;;19278:41;19336:18;;62324:44:0::1;19025:335:1::0;62324:44:0::1;62379:5;:14:::0;;-1:-1:-1;;;;;;62379:14:0::1;-1:-1:-1::0;;;;;62379:14:0;;;::::1;::::0;;;::::1;::::0;;62251:150::o;60990:399::-;61031:28;61073:16;61091;61113:9;;;;;;;;;-1:-1:-1;;;;;61113:9:0;-1:-1:-1;;;;;61113:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61072:64;-1:-1:-1;;;;;61072:64:0;;;-1:-1:-1;;;;;61072:64:0;;;61181:4;-1:-1:-1;;;;;61151:35:0;:9;;;;;;;;;-1:-1:-1;;;;;61151:9:0;-1:-1:-1;;;;;61151:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;61151:35:0;;61147:235;;61226:44;61261:8;61227:28;25949:15;23839:2;25949;:15;:::i;:::-;61227:8;;:12;:28::i;61226:44::-;61203:67;;61061:328;;60990:399;:::o;61147:235::-;61326:44;61361:8;61327:28;25949:15;23839:2;25949;:15;:::i;:::-;61327:8;;:12;:28::i;12043:200::-;12156:12;;;12116;12156;;;;;;;;;-1:-1:-1;;;;;12134:7:0;;;12149:5;;12134:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12115:54;;;12188:7;12180:55;;;;-1:-1:-1;;;12180:55:0;;20507:2:1;12180:55:0;;;20489:21:1;20546:2;20526:18;;;20519:30;20585:34;20565:18;;;20558:62;-1:-1:-1;;;20636:18:1;;;20629:33;20679:19;;12180:55:0;20305:399:1;11059:459:0;11305:45;;;-1:-1:-1;;;;;20901:32:1;;;11305:45:0;;;20883:51:1;20950:18;;;;20943:34;;;11305:45:0;;;;;;;;;;20856:18:1;;;;11305:45:0;;;;;;;-1:-1:-1;;;;;11305:45:0;-1:-1:-1;;;11305:45:0;;;11280:81;;-1:-1:-1;;;;11280:10:0;;;;:81;;11305:45;11280:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:117;;;;11394:7;:57;;;;-1:-1:-1;11406:11:0;;:16;;:44;;;11437:4;11426:24;;;;;;;;;;;;:::i;:::-;11372:138;;;;-1:-1:-1;;;11372:138:0;;21440:2:1;11372:138:0;;;21422:21:1;21479:2;21459:18;;;21452:30;21518:33;21498:18;;;21491:61;21569:18;;11372:138:0;21238:355:1;29980:441:0;-1:-1:-1;;;;;29238:18:0;;;30114:24;29238:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;30181:37:0;;30177:237;;30263:5;30243:16;:25;;30235:54;;;;-1:-1:-1;;;30235:54:0;;21800:2:1;30235:54:0;;;21782:21:1;21839:2;21819:18;;;21812:30;-1:-1:-1;;;21858:18:1;;;21851:46;21914:18;;30235:54:0;21598:340:1;30235:54:0;-1:-1:-1;;;;;30333:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;30363:24;;;30333:54;;30103:318;29980:441;;;:::o;33569:5955::-;33681:4;-1:-1:-1;;;;;33706:18:0;;;;;;:34;;-1:-1:-1;;;;;;33729:11:0;;;;;;:7;:11;;;;;;;;33728:12;33706:34;33698:68;;;;-1:-1:-1;;;33698:68:0;;22145:2:1;33698:68:0;;;22127:21:1;22184:2;22164:18;;;22157:30;-1:-1:-1;;;22203:18:1;;;22196:51;22264:18;;33698:68:0;21943:345:1;33698:68:0;-1:-1:-1;;;;;33799:21:0;;33815:4;33799:21;:49;;33830:9;;;;:18;33799:49;;;33823:4;33799:49;33777:113;;;;-1:-1:-1;;;33777:113:0;;22495:2:1;33777:113:0;;;22477:21:1;22534:2;22514:18;;;22507:30;-1:-1:-1;;;22553:18:1;;;22546:44;22607:18;;33777:113:0;22293:338:1;33777:113:0;33901:9;:16;;-1:-1:-1;;33901:16:0;33913:4;33901:16;;;-1:-1:-1;;;;;34013:15:0;;33901:9;34013:15;;;:9;:15;;;;;:23;34055:21;;;;34047:61;;;;-1:-1:-1;;;34047:61:0;;22838:2:1;34047:61:0;;;22820:21:1;22877:2;22857:18;;;22850:30;22916:29;22896:18;;;22889:57;22963:18;;34047:61:0;22636:351:1;34047:61:0;-1:-1:-1;;;;;34220:15:0;;;;;;;:9;:15;;;;;34246:20;;;34220:46;;34342:9;;;;;34326:26;:67;;;;-1:-1:-1;;;;;;34370:23:0;;;;;;:19;:23;;;;;;;;34369:24;34326:67;:95;;;;-1:-1:-1;34411:10:0;;;;;;;34410:11;34326:95;34308:4806;;;-1:-1:-1;;;;;34461:20:0;;;;;;:16;:20;;;;;;;;34460:21;:103;;34562:1;34460:103;;;34501:41;25949:15;23839:2;25949;:15;:::i;:::-;34502:19;:6;34513:7;34502:10;:19::i;34501:41::-;34448:115;;34578:16;34587:6;34578:8;:16::i;:::-;34609:40;34617:4;34623:2;34627:21;:6;34638:9;34627:10;:21::i;:::-;34609:7;:40::i;:::-;-1:-1:-1;;;;;34690:13:0;;;;;;:9;:13;;;;;34713:15;34690:20;;;;:38;34308:4806;;;34846:9;;-1:-1:-1;;;;;34832:24:0;;;34846:9;;34832:24;:67;;;;-1:-1:-1;;;;;;34874:25:0;;;;;;:19;:25;;;;;;;;34873:26;34832:67;:95;;;;-1:-1:-1;34917:10:0;;;;;;;34916:11;34832:95;34814:4300;;;34954:19;34976:16;:14;:16::i;:::-;-1:-1:-1;;;;;35034:24:0;;;;;;:18;:24;;;;;;34954:38;;-1:-1:-1;35034:24:0;;35033:25;:32;;;;-1:-1:-1;35062:3:0;;;;35033:32;:63;;35092:4;35033:63;;;35078:11;35068:6;:21;;35033:63;35007:146;;;;-1:-1:-1;;;35007:146:0;;23194:2:1;35007:146:0;;;23176:21:1;23233:2;23213:18;;;23206:30;-1:-1:-1;;;23252:18:1;;;23245:51;23313:18;;35007:146:0;22992:345:1;35007:146:0;-1:-1:-1;;;;;35181:22:0;;;;;;:16;:22;;;;;;;;35180:23;:49;;;;-1:-1:-1;35207:22:0;;;;;;;35180:49;:132;;35311:1;35180:132;;;35249:42;25949:15;23839:2;25949;:15;:::i;:::-;35250:20;:6;35261:8;35250:10;:20::i;35249:42::-;35374:3;;35168:144;;-1:-1:-1;35374:3:0;;:30;;;;-1:-1:-1;;;;;;35382:22:0;;;;;;:16;:22;;;;;;;;35381:23;35374:30;35370:546;;;35536:18;;-1:-1:-1;;;;;35491:15:0;;35425:19;35491:15;;;:9;:15;;;;;:22;;;35425:19;;35536:18;35447:85;;35448:15;;35447:21;:85::i;:::-;:107;;:396;;35716:24;;-1:-1:-1;;;;;35664:15:0;;;;;;:9;:15;;;;;:22;;;35642:45;;35643:15;;35642:21;:45::i;:::-;:98;;:201;;35842:1;35447:396;;35642:201;35764:54;25949:15;23839:2;25949;:15;:::i;:::-;35776:12;;35765:32;;35776:20;;35793:2;35776:16;:20::i;:::-;35765:6;;:10;:32::i;35764:54::-;35447:396;;;35578:40;25949:15;23839:2;25949;:15;:::i;:::-;35590:6;;35579:18;;:6;;:10;:18::i;35578:40::-;35425:418;-1:-1:-1;35874:26:0;:9;35425:418;35874:13;:26::i;:::-;35862:38;;35406:510;35370:546;-1:-1:-1;;;;;35954:21:0;;35970:4;35954:21;;;;:71;;-1:-1:-1;36012:12:0;;-1:-1:-1;;;;;35996:29:0;;;36012:12;;35996:29;;35954:71;:115;;;;-1:-1:-1;;;;;;36047:22:0;;;;;;:16;:22;;;;;;;;36046:23;35954:115;:151;;;;-1:-1:-1;36090:15:0;;-1:-1:-1;;;36090:15:0;;;;35954:151;35932:199;;;36121:10;:8;:10::i;:::-;36146:48;36155:4;36161:21;:6;36172:9;36161:10;:21::i;:::-;36184:9;36146:8;:48::i;:::-;34939:1267;34814:4300;;;36336:10;;;;;;;36332:2689;;;36387:9;;-1:-1:-1;;;;;36371:26:0;;;36387:9;;36371:26;:51;;;;-1:-1:-1;;;;;;36402:20:0;;;;;;:16;:20;;;;;;;;36401:21;36371:51;36367:133;;;36457:43;25949:15;23839:2;25949;:15;:::i;:::-;36458:21;:6;36469:9;36458:10;:21::i;36457:43::-;36445:55;;36367:133;36537:9;;-1:-1:-1;;;;;36523:24:0;;;36537:9;;36523:24;:51;;;;-1:-1:-1;;;;;;36552:22:0;;;;;;:16;:22;;;;;;;;36551:23;36523:51;36519:2145;;;36599:14;36648:43;25949:15;23839:2;25949;:15;:::i;:::-;36649:21;:6;36660:9;36649:10;:21::i;36648:43::-;36718:15;;36636:55;;-1:-1:-1;;;;36718:15:0;;;;:40;;;;-1:-1:-1;;;;;;36737:21:0;;36753:4;36737:21;;36718:40;36714:56;;;36760:10;:8;:10::i;:::-;36794:16;36812;36834:9;;;;;;;;;-1:-1:-1;;;;;36834:9:0;-1:-1:-1;;;;;36834:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;36793:90:0;;;;-1:-1:-1;36793:90:0;;-1:-1:-1;36906:24:0;36933:21;:6;36944:9;36933:10;:21::i;:::-;37022:31;;;37051:1;37022:31;;;;;;;;;36906:48;;-1:-1:-1;36977:42:0;;37022:31;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;37022:31:0;;-1:-1:-1;;37022:31:0;;;;;;;;-1:-1:-1;;37093:183:0;;;;;;;;37157:4;37093:183;;37193:17;;-1:-1:-1;;;;;37193:17:0;37093:183;;;;-1:-1:-1;37093:183:0;;;;;;37077:13;;;;-1:-1:-1;37093:183:0;37077:13;;-1:-1:-1;37077:13:0;;;;:::i;:::-;;;;;;;;;;:199;37317:11;;:55;;-1:-1:-1;;;37317:55:0;;37299:15;;-1:-1:-1;;;;;37317:11:0;;:25;;:55;;37343:16;;37361:10;;37317:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37317:55:0;;;;;;;;;;;;:::i;:::-;37373:1;37317:58;;;;;;;;:::i;:::-;;;;;;;37299:76;;37432:4;-1:-1:-1;;;;;37402:35:0;:9;;;;;;;;;-1:-1:-1;;;;;37402:9:0;-1:-1:-1;;;;;37402:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37402:35:0;;37398:557;;37501:114;37584:30;:8;37597:16;37584:12;:30::i;:::-;37502:46;25949:15;23839:2;25949;:15;:::i;:::-;37503:24;:8;37516:10;37503:12;:24::i;:::-;37502:30;;:46::i;37501:114::-;37492:123;-1:-1:-1;37659:24:0;:8;37672:10;37659:12;:24::i;:::-;37642:14;:41;37398:557;;;37749:114;37832:30;:8;37845:16;37832:12;:30::i;:::-;37750:46;25949:15;23839:2;25949;:15;:::i;:::-;37751:24;:8;37764:10;37751:12;:24::i;37749:114::-;37740:123;-1:-1:-1;37907:24:0;:8;37920:10;37907:12;:24::i;:::-;37890:14;:41;37398:557;37991:14;;37981:6;:24;37977:668;;38034:10;:18;;-1:-1:-1;;38034:18:0;;;;;38079:14;:23;;;38159:18;38144:12;:33;;;38129:12;:48;38246:8;;38285:21;;38432:13;;38476:14;;38204:313;;38034:18;;38285:21;;;;;38337:22;;;;;;-1:-1:-1;;;38390:11:0;;;;;38204;:313::i;:::-;38607:14;;38585:19;:36;37977:668;36576:2088;;;;;;36519:2145;36332:2689;;;38724:9;;-1:-1:-1;;;;;38708:26:0;;;38724:9;;38708:26;;;;:54;;-1:-1:-1;38752:9:0;;-1:-1:-1;;;;;38738:24:0;;;38752:9;;38738:24;;38708:54;38704:93;;;38785:12;:10;:12::i;:::-;-1:-1:-1;;;;;38822:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38851:23:0;;;;;;:19;:23;;;;;;;;38822:52;38818:188;;;-1:-1:-1;;;;;38899:25:0;;;38927:5;38899:25;;;:19;:25;;;;;;:33;;-1:-1:-1;;38899:33:0;;;;;;38955:23;;;;;;;:31;;;;;;;38818:188;39035:40;39043:4;39049:2;39053:21;:6;39064:9;39053:10;:21::i;39035:40::-;39130:13;;39126:341;;39164:15;;-1:-1:-1;;;39164:15:0;;;;39160:242;;;39200:22;39225:107;25949:15;23839:2;25949;:15;:::i;:::-;39248:45;39262:30;39279:12;;39262;;:16;;:30;;;;:::i;:::-;39248:9;;:13;:45::i;39225:107::-;39200:132;;39372:14;39351:17;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;39160:242:0;39416:39;39424:4;39438;39445:9;39416:7;:39::i;:::-;-1:-1:-1;;39477:9:0;:17;;-1:-1:-1;;39477:17:0;;;-1:-1:-1;39477:17:0;33569:5955;;;;;:::o;9230:158::-;9288:7;9321:1;9316;:6;;9308:49;;;;-1:-1:-1;;;9308:49:0;;25502:2:1;9308:49:0;;;25484:21:1;25541:2;25521:18;;;25514:30;25580:32;25560:18;;;25553:60;25630:18;;9308:49:0;25300:354:1;9308:49:0;9375:5;9379:1;9375;:5;:::i;:::-;9368:12;9230:158;-1:-1:-1;;;9230:158:0:o;52912:1156::-;52966:8;;52945:4;;-1:-1:-1;;;52966:8:0;;;;52962:1077;;;52991:16;53010:87;53072:10;;53011:37;53033:14;;53012:15;53011:21;;:37;;;;:::i;53010:87::-;52991:106;-1:-1:-1;53166:12:0;;53162:866;;53218:14;;53199:16;53251:230;53275:8;53271:1;:12;53251:230;;;53313:19;53335:81;25949:15;23839:2;25949;:15;:::i;:::-;53349:19;;53336:33;;:8;;:12;:33::i;53335:81::-;53313:103;-1:-1:-1;53285:3:0;;-1:-1:-1;53285:3:0;;;:::i;:::-;;;;53251:230;;;-1:-1:-1;53518:10:0;;:24;;53533:8;53518:14;:24::i;:::-;53499:14;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;53594:14:0;:25;;;53642:21;;;;;;;53638:333;;;53724:8;;53759:21;;53856:11;;53894:13;;53934:14;;53686:285;;53724:8;53759:21;;;;;;;53807:22;;;;;;;-1:-1:-1;;;53856:11:0;;;;;53686;:285::i;:::-;53180:848;53162:866;52976:1063;52962:1077;-1:-1:-1;54056:4:0;;52912:1156::o;9043:179::-;9101:7;;9133:5;9137:1;9133;:5;:::i;:::-;9121:17;;9162:1;9157;:6;;9149:46;;;;-1:-1:-1;;;9149:46:0;;25994:2:1;9149:46:0;;;25976:21:1;26033:2;26013:18;;;26006:30;26072:29;26052:18;;;26045:57;26119:18;;9149:46:0;25792:351:1;9396:220:0;9454:7;9478:1;9483;9478:6;9474:20;;-1:-1:-1;9493:1:0;9486:8;;9474:20;9505:9;9517:5;9521:1;9517;:5;:::i;:::-;9505:17;-1:-1:-1;9550:1:0;9541:5;9545:1;9505:17;9541:5;:::i;:::-;:10;9533:56;;;;-1:-1:-1;;;9533:56:0;;26745:2:1;9533:56:0;;;26727:21:1;26784:2;26764:18;;;26757:30;26823:34;26803:18;;;26796:62;-1:-1:-1;;;26874:18:1;;;26867:31;26915:19;;9533:56:0;26543:397:1;9624:153:0;9682:7;9714:1;9710;:5;9702:44;;;;-1:-1:-1;;;9702:44:0;;27147:2:1;9702:44:0;;;27129:21:1;27186:2;27166:18;;;27159:30;27225:28;27205:18;;;27198:56;27271:18;;9702:44:0;26945:350:1;9702:44:0;9764:5;9768:1;9764;:5;:::i;59133:1317::-;59333:12;59348:50;25949:15;23839:2;25949;:15;:::i;:::-;59349:14;;:28;;59368:8;59349:18;:28::i;59348:50::-;59427:14;;59333:65;;-1:-1:-1;59427:24:0;;59333:65;59427:18;:24::i;:::-;59409:15;:42;59479:14;;:24;;59498:4;59479:18;:24::i;:::-;59462:14;:41;59514:8;:19;;;59560:3;;:10;;;59567:3;59560:10;59544:11;:27;;-1:-1:-1;;59544:27:0;59558:13;;59544:27;;;;;;;;59641:11;59636:672;;59745:3;59741:181;;;59769:21;:27;;-1:-1:-1;;59769:27:0;;;;;;;;;59839:21;:4;59848:11;59839:8;:21::i;:::-;59815;:45;59879:13;:27;;;59741:181;59940:3;59936:186;;;59964:22;:28;;-1:-1:-1;;59964:28:0;;;;;;;;;60036:22;:4;60045:12;60036:8;:22::i;:::-;60011;:47;60077:14;:29;;;59936:186;59636:672;;;60226:21;:27;;-1:-1:-1;;60268:28:0;60226:27;;;;;-1:-1:-1;;60268:28:0;;;;;;;;;;59636:672;60318:11;:25;;-1:-1:-1;;60318:25:0;-1:-1:-1;;;60318:25:0;;;;;;;;;;60359:11;;;;;60354:88;;60427:14;;60390:52;;;27558:2:1;27540:21;;;27597:1;27577:18;;;27570:29;-1:-1:-1;;;27630:3:1;27615:19;;27608:34;60410:15:0;27709:4:1;27694:20;;27687:36;27739:18;;;27732:34;;;;60390:52:0;-1:-1:-1;;;;;;;;;;;60390:52:0;;;;27674:3:1;60390:52:0;;;60354:88;59322:1128;59133:1317;;;;;;:::o;57108:2017::-;57165:20;57196:17;57225:16;57243;57265:9;;;;;;;;;-1:-1:-1;;;;;57265:9:0;-1:-1:-1;;;;;57265:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;57341:9:0;;-1:-1:-1;;;;;57341:9:0;57299:21;57323:29;;;:9;:29;;;;;;;;;:37;57375:18;;-1:-1:-1;;;57375:18:0;;;;-1:-1:-1;;;;;57224:64:0;;;;-1:-1:-1;57224:64:0;;;;;-1:-1:-1;57405:4:0;;57375:16;;:18;;;;;57323:29;57375:18;;;;;;57341:9;57375:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57375:35:0;;57371:217;;57439:46;57474:10;57440:28;57459:8;25949:15;23839:2;25949;:15;:::i;57439:46::-;57427:58;;57371:217;;;57530:46;57565:10;57531:28;57550:8;25949:15;23839:2;25949;:15;:::i;57530:46::-;57518:58;;57371:217;57618:9;57602:13;:25;57598:1408;;;57709:22;57734:28;:13;57752:9;57734:17;:28::i;:::-;57854:9;;-1:-1:-1;;;;;57854:9:0;57836:29;;;;:9;:29;;;;;:37;57709:53;;-1:-1:-1;57817:91:0;;57709:53;57817:75;:91::i;:::-;57795:9;;;-1:-1:-1;;;;;57795:9:0;;;57777:29;;;;:9;:29;;;;;:131;;;;57939:9;57923:58;;57939:9;57959:4;57966:14;57923:7;:58::i;:::-;57629:364;57598:1408;;;58029:28;:9;58043:13;58029;:28::i;:::-;58155:17;;;58117:4;58072:23;58099:24;;;:9;:24;;;;;;:32;58014:43;;-1:-1:-1;58072:23:0;;58098:89;;:38;:89::i;:::-;58072:115;;58225:12;58206:15;:31;58202:793;;58334:4;58316:24;;;;:9;:24;;;;;:32;58293:92;;58372:12;58293:78;:92::i;:::-;58276:4;58258:24;;;;:9;:24;;;;;:127;;;;58435:9;;58404:56;;58276:4;-1:-1:-1;;;;;58435:9:0;58447:12;58404:7;:56::i;:::-;58202:793;;;58505:19;;58501:288;;58629:4;58611:24;;;;:9;:24;;;;;:32;58584:103;;58671:15;58584:86;:103::i;:::-;58567:4;58549:24;;;;:9;:24;;;;;:138;;;;58741:9;;58710:59;;58567:4;-1:-1:-1;;;;;58741:9:0;58753:15;58710:7;:59::i;:::-;58807:18;58828:33;:12;58845:15;58828:16;:33::i;:::-;58807:54;-1:-1:-1;58884:14:0;;58880:100;;58937:9;;58923:37;;-1:-1:-1;;;;;58937:9:0;58949:10;58923:5;:37::i;:::-;58482:513;58202:793;57999:1007;57598:1408;59063:9;;;;;;;;;-1:-1:-1;;;;;59063:9:0;-1:-1:-1;;;;;59063:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59090:14:0;:27;;;;-1:-1:-1;;;;;;57108:2017:0:o;39944:3516::-;40129:9;;-1:-1:-1;;;;;40129:9:0;39997:17;40111:29;;;:9;:29;;;;;;:37;40324:23;;-1:-1:-1;;;40324:23:0;;;;39997:17;;;;;;;;;;40129:9;;40324:21;;:23;;;;;;;;;;;;;;40129:9;40324:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40418:31:0;;;40447:1;40418:31;;;;;;;;;-1:-1:-1;;;;;40283:64:0;;;;-1:-1:-1;40283:64:0;;;;;-1:-1:-1;40360:55:0;;40418:31;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;40418:31:0;;-1:-1:-1;;40418:31:0;;;;;;;;-1:-1:-1;;40476:133:0;;;;;;;;40520:17;;-1:-1:-1;;;;;40520:17:0;40476:133;;40564:4;40476:133;;;;-1:-1:-1;40476:133:0;;;;;;40460:13;;;;-1:-1:-1;40476:133:0;40460:13;;-1:-1:-1;40460:13:0;;;;:::i;:::-;;;;;;;;;;:149;40647:11;;:44;;-1:-1:-1;;;40647:44:0;;40620:24;;-1:-1:-1;;;;;40647:11:0;;:24;;:44;;40672:6;;40680:10;;40647:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40647:44:0;;;;;;;;;;;;:::i;:::-;40620:71;;40736:4;-1:-1:-1;;;;;40706:35:0;:9;;;;;;;;;-1:-1:-1;;;;;40706:9:0;-1:-1:-1;;;;;40706:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40706:35:0;;40702:168;;40774:24;40787:7;40795:1;40787:10;;;;;;;;:::i;:::-;;;;;;;40774:8;:12;;:24;;;;:::i;:::-;40757:14;:41;40702:168;;;40846:24;40859:7;40867:1;40859:10;;;;;;;;:::i;:::-;;;;;;;40846:8;:12;;:24;;;;:::i;:::-;40829:14;:41;40702:168;40915:56;40956:14;;40916:34;40935:14;;23839:2;25949;:15;;;;:::i;40915:56::-;41039:21;;40903:68;;-1:-1:-1;41039:21:0;;;;;41035:728;;;41131:11;;41112:16;;-1:-1:-1;;;41131:11:0;;;;:268;;41377:21;;41358:14;;:41;;:18;:41::i;:::-;41131:268;;;41162:176;41203:116;41283:13;41204:47;41215:35;41235:14;;41215:15;;:19;;:35;;;;:::i;:::-;41204:6;;:10;:47::i;41162:176::-;41112:287;-1:-1:-1;41414:13:0;41430:99;41489:25;:13;41507:6;41489:17;:25::i;:::-;41450:14;;41431:34;;25949:15;23839:2;25949;:15;:::i;41430:99::-;41414:115;;41556:8;41548:5;:16;:32;;;;;41579:1;41568:8;:12;41548:32;:61;;;;;41595:14;;41584:8;:25;41548:61;41544:208;;;41642:50;41683:8;41643:34;41662:14;;23839:2;25949;:15;;;;:::i;41642:50::-;41711:14;:25;;;41630:62;-1:-1:-1;41544:208:0;41062:701;;41035:728;41791:13;41779:9;:25;41775:1613;;;41821:20;41844:28;:9;41858:13;41844;:28::i;:::-;42013:17;;;41975:4;41942:11;41957:24;;;:9;:24;;;;;;:32;41821:51;;-1:-1:-1;41942:11:0;;41956:89;;:38;:89::i;:::-;41942:103;;42133:12;42127:3;:18;42123:817;;;42301:4;42283:24;;;;:9;:24;;;;;:32;42260:92;;42339:12;42260:78;:92::i;:::-;42243:4;42225:24;;;;:9;:24;;;;;:127;;;;42402:9;;42371:56;;42243:4;-1:-1:-1;;;;;42402:9:0;42414:12;42371:7;:56::i;:::-;42123:817;;;42481:21;:12;42498:3;42481:16;:21::i;:::-;42468:34;-1:-1:-1;42559:7:0;;42555:252;;42671:4;42653:24;;;;:9;:24;;;;;:32;42626:91;;42713:3;42626:86;:91::i;:::-;42609:4;42591:24;;;;:9;:24;;;;;:126;;;;42771:9;;42740:47;;42609:4;-1:-1:-1;;;;;42771:9:0;42783:3;42740:7;:47::i;:::-;42829:14;;42825:100;;42882:9;;42868:37;;-1:-1:-1;;;;;42882:9:0;42894:10;42868:5;:37::i;:::-;41806:1145;;41775:1613;;;43071:28;:13;43089:9;43071:17;:28::i;:::-;43249:9;;-1:-1:-1;;;;;43249:9:0;43231:29;;;;:9;:29;;;;;:37;43054:45;;-1:-1:-1;43212:91:0;;43054:45;43212:75;:91::i;:::-;43190:9;;;-1:-1:-1;;;;;43190:9:0;;;43172:29;;;;:9;:29;;;;;:131;;;;43334:9;43318:58;;43334:9;43354:4;43361:14;43318:7;:58::i;:::-;43403:49;;;28008:25:1;;;28064:2;28049:18;;28042:34;;;28092:18;;;28085:34;;;28150:2;28135:18;;28128:34;;;43403:49:0;;27995:3:1;27980:19;43403:49:0;;;;;;;39986:3474;;;;;;;;39944:3516;:::o;39532:404::-;-1:-1:-1;;;;;39652:16:0;;39644:52;;;;-1:-1:-1;;;39644:52:0;;28375:2:1;39644:52:0;;;28357:21:1;28414:2;28394:18;;;28387:30;28453:25;28433:18;;;28426:53;28496:18;;39644:52:0;28173:347:1;39644:52:0;-1:-1:-1;;;;;39846:13:0;;;;;;;:9;:13;;;;;;;:30;;;;;;39903:25;39846:13;;39903:25;;;-1:-1:-1;;;;;;;;;;;39903:25:0;;;39871:5;352:25:1;;340:2;325:18;;206:177;39903:25:0;;;;;;;;39532:404;;;:::o;32697:864::-;32780:4;32736:23;32762:24;;;:9;:24;;;;;;;;:32;32829:16;;32809:17;;32762:32;;-1:-1:-1;32805:75:0;;;32862:7;32697:864::o;32805:75::-;32913:17;;32894:15;:36;32890:664;;32981:17;;33032:3;;32947:31;;33032:3;;:88;;33091:29;33116:3;33092:18;33108:1;33092:11;;:15;;:18;;;;:::i;33091:29::-;33032:88;;;33055:16;:14;:16::i;:::-;33013:107;;33185:8;33165:17;;:28;33161:85;;;33238:8;33212:34;;33161:85;33261:46;33283:23;33261:21;:46::i;:::-;-1:-1:-1;33322:12:0;;33366:11;;33397:17;;33433:13;;33322:139;;-1:-1:-1;;;33322:139:0;;-1:-1:-1;;;;;33366:11:0;;;33322:139;;;28765:34:1;33397:17:0;;;28815:18:1;;;28808:43;33433:13:0;;28867:18:1;;;28860:43;33322:12:0;;;:17;;28700:18:1;;33322:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33496:17:0;;:46;;-1:-1:-1;33496:17:0;-1:-1:-1;33518:23:0;33496:21;:46::i;:::-;33476:17;:66;-1:-1:-1;;32725:836:0;32697:864::o;43468:8928::-;43586:22;43619:17;43647:18;43677:16;43695;43717:9;;;;;;;;;-1:-1:-1;;;;;43717:9:0;-1:-1:-1;;;;;43717:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;43793:9:0;;-1:-1:-1;;;;;43793:9:0;;;43751:21;43775:29;;;:9;:29;;;;;;:37;43856:17;;43849:79;;-1:-1:-1;;;43849:79:0;;;;;3031:51:1;;;;-1:-1:-1;;;;;43676:64:0;;;;-1:-1:-1;43676:64:0;;;;;-1:-1:-1;43775:37:0;;43856:17;;;;43849:35;;3004:18:1;;43849:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43965:11;;43823:105;;-1:-1:-1;;;;;;43965:11:0;43943:10;:34;43939:573;;43994:21;44018:79;44083:13;44019:40;44043:15;44020:17;:7;44032:4;44020:11;:17::i;44018:79::-;44146:11;;43994:103;;-1:-1:-1;;;;;;44146:11:0;44138:28;:44;-1:-1:-1;44138:244:0;;;;-1:-1:-1;44214:17:0;;44310:11;;44207:138;;-1:-1:-1;;;44207:138:0;;-1:-1:-1;;;;;29144:15:1;;;44207:138:0;;;29126:34:1;44310:11:0;;;29176:18:1;;;29169:43;44369:13:0;;44214:17;;;;;44207:35;;29061:18:1;;44207:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:175;44138:244;44112:388;;;;-1:-1:-1;;;44112:388:0;;29425:2:1;44112:388:0;;;29407:21:1;29464:2;29444:18;;;29437:30;29503:34;29483:18;;;29476:62;29574:34;29554:18;;;29547:62;-1:-1:-1;;;29625:19:1;;;29618:49;29684:19;;44112:388:0;29223:486:1;44112:388:0;43979:533;43939:573;44582:31;;;44611:1;44582:31;;;;;;;;;44524:55;;44582:31;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;44582:31:0;;-1:-1:-1;;44582:31:0;;;;;;;;-1:-1:-1;;44640:133:0;;;;;;;;44692:4;44640:133;;44716:17;;-1:-1:-1;;;;;44716:17:0;44640:133;;;;-1:-1:-1;44640:133:0;;;;;;44624:13;;;;-1:-1:-1;44640:133:0;44624:13;;-1:-1:-1;44624:13:0;;;;:::i;:::-;;;;;;:149;;;;44821:4;-1:-1:-1;;;;;44791:35:0;:9;;;;;;;;;-1:-1:-1;;;;;44791:9:0;-1:-1:-1;;;;;44791:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44791:35:0;;44788:254;;44875:11;;:46;;-1:-1:-1;;;44875:46:0;;44862:63;;-1:-1:-1;;;;;44875:11:0;;:25;;:46;;44901:7;;44910:10;;44875:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44875:46:0;;;;;;;;;;;;:::i;:::-;44922:1;44875:49;;;;;;;;:::i;:::-;;;;;;;44862:8;:12;;:63;;;;:::i;:::-;44845:14;:80;44788:254;;;44992:11;;:46;;-1:-1:-1;;;44992:46:0;;44979:63;;-1:-1:-1;;;;;44992:11:0;;:25;;:46;;45018:7;;45027:10;;44992:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44992:46:0;;;;;;;;;;;;:::i;:::-;45039:1;44992:49;;;;;;;;:::i;:::-;;;;;;;44979:8;:12;;:63;;;;:::i;:::-;44962:14;:80;44788:254;-1:-1:-1;;;;;45082:23:0;;45100:4;45082:23;45078:3804;;45222:15;;45203;:34;;:49;;;;-1:-1:-1;45242:10:0;;;;;;;45241:11;45203:49;45199:240;;;45273:10;:17;;-1:-1:-1;;45273:17:0;;;;;45331:14;;45309:19;:36;45408:14;;45369:54;;-1:-1:-1;;;;;;;;;;;45369:54:0;;;45391:15;;45408:14;45369:54;:::i;:::-;;;;;;;;45199:240;45478:10;;;;;;;:266;;;;-1:-1:-1;45551:193:0;25949:15;23839:2;25949;:15;:::i;45551:193::-;45513:14;;:231;45478:266;45477:557;;;-1:-1:-1;45767:10:0;;;;;;;:266;;;;-1:-1:-1;45840:193:0;25949:15;23839:2;25949;:15;:::i;45840:193::-;45802:14;;:231;45767:266;45455:2392;;;46133:193;25949:15;23839:2;25949;:15;:::i;46133:193::-;46095:14;;:231;46069:521;;;46386:184;46431:116;25949:15;23839:2;25949;:15;:::i;46386:184::-;46369:14;:201;46069:521;46672:193;25949:15;23839:2;25949;:15;:::i;46672:193::-;46634:14;;:231;46608:521;;;46925:184;46970:116;25949:15;23839:2;25949;:15;:::i;46925:184::-;46908:14;:201;46608:521;47161:96;47224:14;;47162:34;47181:14;;23839:2;25949;:15;;;;:::i;47161:96::-;47280:21;;47149:108;;-1:-1:-1;47280:21:0;;;;;;:47;;-1:-1:-1;47305:22:0;;;;;;;47280:47;47276:359;;;47388:8;;47423:21;;47520:11;;47558:13;;47598:14;;47350:285;;47388:8;47423:21;;;;;;;47471:22;;;;;;;-1:-1:-1;;;47520:11:0;;;;;47350;:285::i;:::-;47727:14;;47705:19;:36;47804:14;;47765:54;;-1:-1:-1;;;;;;;;;;;47765:54:0;;;47787:15;;47804:14;47765:54;:::i;:::-;;;;;;;;45455:2392;;;47841:6;:4;:6::i;:::-;;45455:2392;47886:22;;;;;;;:66;;;;-1:-1:-1;;;;;;47929:23:0;;47947:4;47929:23;;47886:66;:127;;;;;48010:3;47973:34;47992:14;;47973;;:18;;:34;;;;:::i;:::-;:40;47886:127;47864:1007;;;48067:11;;48048:16;;-1:-1:-1;;;48067:11:0;;;;:293;;48337:22;;48318:14;;:42;;:18;:42::i;:::-;48067:293;;;48102:192;48147:124;48231:13;48148:47;48160:34;48179:14;;48160;;:18;;:34;;;;:::i;:::-;48148:7;;:11;:47::i;48102:192::-;48048:312;;48391:50;48432:8;48392:34;48411:14;;23839:2;25949;:15;;;;:::i;48391:50::-;48379:62;;48460:14;48477:95;48540:13;48478:34;48497:14;;23839:2;25949;:15;;;;:::i;48477:95::-;48460:112;;48604:14;;48595:6;:23;:52;;;;;48633:14;;48622:8;:25;48595:52;48591:265;;;48684:104;48751:14;;48685:34;48704:14;;23839:2;25949;:15;;;;:::i;48684:104::-;48811:14;:25;;;48672:116;-1:-1:-1;48591:265:0;48029:842;;47864:1007;48906:56;48947:14;;48907:34;48926:14;;23839:2;25949;:15;;;;:::i;48906:56::-;48894:68;;48991:13;48979:9;:25;48975:3285;;;49021:20;49044:28;:9;49058:13;49044;:28::i;:::-;49021:51;;49157:12;49147:7;:22;49143:2180;;;49318:9;;-1:-1:-1;;;;;49318:9:0;49300:29;;;;:9;:29;;;;;:37;49277:97;;49361:12;49277:83;:97::i;:::-;49255:9;;-1:-1:-1;;;;;49255:9:0;49237:29;;;;:9;:29;;;;;:137;49410:25;:7;49422:12;49410:11;:25::i;:::-;49530:4;49512:24;;;;:9;:24;;;;;:32;49393:42;;-1:-1:-1;49489:94:0;;49393:42;49489:78;:94::i;:::-;49472:4;49454:24;;;;:9;:24;;;;;:129;49143:2180;;;49705:9;;-1:-1:-1;;;;;49705:9:0;49687:29;;;;:9;:29;;;;;:37;49664:92;;49748:7;49664:83;:92::i;:::-;49642:9;;-1:-1:-1;;;;;49642:9:0;49624:29;;;;:9;:29;;;;;:132;;;;49799:25;:12;49816:7;49799:16;:25::i;:::-;49918:17;;;49876:4;49843:11;49858:24;;;:9;:24;;;;;;:32;49775:49;;-1:-1:-1;49843:11:0;;49857:97;;:38;:97::i;:::-;49843:111;;49983:13;49977:3;:19;49973:1335;;;50166:4;50148:24;;;;:9;:24;;;;;:32;50121:101;;50208:13;50121:86;:101::i;:::-;50104:4;50086:24;;;;:9;:24;;;;;;:136;;;;50330:9;;-1:-1:-1;;;;;50330:9:0;50312:29;;;:37;50285:106;;50377:13;50285:91;:106::i;:::-;50263:9;;;-1:-1:-1;;;;;50263:9:0;;;50245:29;;;;:9;:29;;;;;;;;;:146;;;;50502:9;;50419:156;;352:25:1;;;50502:9:0;;;50462:4;;-1:-1:-1;;;;;;;;;;;50419:156:0;325:18:1;50419:156:0;;;;;;;49973:1335;;;50637:22;:13;50655:3;50637:17;:22::i;:::-;50624:35;-1:-1:-1;50714:7:0;;50710:449;;50834:4;50816:24;;;;:9;:24;;;;;:32;50785:99;;50880:3;50785:94;:99::i;:::-;50768:4;50750:24;;;;:9;:24;;;;;;:134;;;;51000:9;;-1:-1:-1;;;;;51000:9:0;50982:29;;;:37;50951:104;;51051:3;50951:99;:104::i;:::-;50929:9;;;-1:-1:-1;;;;;50929:9:0;;;50911:29;;;;:9;:29;;;;;;;;;:144;;;;51119:9;;51087:48;;352:25:1;;;51119:9:0;;;51104:4;;-1:-1:-1;;;;;;;;;;;51087:48:0;325:18:1;51087:48:0;;;;;;;50710:449;51185:14;;51181:108;;51242:9;;51228:37;;-1:-1:-1;;;;;51242:9:0;51254:10;51228:5;:37::i;:::-;49605:1718;;49143:2180;49006:2328;48975:3285;;;51437:20;51460:28;:13;51478:9;51460:17;:28::i;:::-;51437:51;-1:-1:-1;51503:26:0;51532:31;:13;51437:51;51532:17;:31::i;:::-;51503:60;-1:-1:-1;51618:73:0;51659:17;:7;51671:4;51659:11;:17::i;:::-;51618:18;;:22;:73::i;:::-;51596:9;;-1:-1:-1;;;;;51596:9:0;51578:29;;;;:9;:29;;;;;:113;51723:25;:7;51735:12;51723:11;:25::i;:::-;51706:42;;51763:9;;;;;;;;;-1:-1:-1;;;;;51763:9:0;-1:-1:-1;;;;;51763:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51894:9:0;;-1:-1:-1;;;;;51894:9:0;51876:29;;;;:9;:29;;;;;;:58;;;52120:4;52102:24;;;;:32;52083:86;;-1:-1:-1;52102:32:0;-1:-1:-1;52154:14:0;52083:70;:86::i;:::-;52066:4;52048:24;;;;:9;:24;;;;;;;:121;;;;52206:9;;52189:59;;52066:4;;-1:-1:-1;;;;;52206:9:0;;-1:-1:-1;;;;;;;;;;;52189:59:0;;;52233:14;352:25:1;;340:2;325:18;;206:177;52189:59:0;;;;;;;;51340:920;;48975:3285;52302:9;;52277:45;;352:25:1;;;-1:-1:-1;;;;;52302:9:0;;;;52277:45;;;-1:-1:-1;;;;;;;;;;;52277:45:0;340:2:1;325:18;52277:45:0;;;;;;;52338:50;;;28008:25:1;;;28064:2;28049:18;;28042:34;;;28092:18;;;28085:34;;;28150:2;28135:18;;28128:34;;;52338:50:0;;27995:3:1;27980:19;52338:50:0;;;;;;;43575:8821;;;;;;;;43468:8928;;;:::o;30429:1218::-;-1:-1:-1;;;;;30503:21:0;;30495:56;;;;-1:-1:-1;;;30495:56:0;;29916:2:1;30495:56:0;;;29898:21:1;29955:2;29935:18;;;29928:30;-1:-1:-1;;;29974:18:1;;;29967:52;30036:18;;30495:56:0;29714:346:1;30495:56:0;23978:13;23839:2;23978;:13;:::i;:::-;23963:29;;:11;:29;:::i;:::-;30566:11;;:23;30562:547;;;23978:13;23839:2;23978;:13;:::i;:::-;23963:29;;:11;:29;:::i;:::-;30610:11;;:22;;30626:5;30610:15;:22::i;:::-;:34;30606:492;;;30665:10;30678:26;30692:11;;23839:2;23978;:13;;;;:::i;:::-;23963:29;;:11;:29;:::i;30678:26::-;30665:39;;30768:2;30753:11;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30819:18:0;;;;;;:9;:18;;;;;:26;30818:76;;30873:2;30818:32;:76::i;:::-;-1:-1:-1;;;;;30789:18:0;;;;;;:9;:18;;;;;:105;-1:-1:-1;30606:492:0;;;-1:-1:-1;;;;;30965:18:0;;;;;;:9;:18;;;;;:26;30964:79;;31019:5;30964:32;:79::i;:::-;-1:-1:-1;;;;;30935:18:0;;;;;;:9;:18;;;;;:108;;;;31062:11;:20;;31077:5;;30935:18;31062:20;;31077:5;;31062:20;:::i;:::-;;;;-1:-1:-1;;30606:492:0;31138:15;;31123:11;;:30;;:62;;;;-1:-1:-1;23978:13:0;23839:2;23978;:13;:::i;:::-;23963:29;;:11;:29;:::i;:::-;31157:15;;:28;;31123:62;31119:469;;;31202:10;:17;;-1:-1:-1;;31202:17:0;;;;;23978:13;23839:2;23978;:13;:::i;:::-;23963:29;;:11;:29;:::i;:::-;31252:11;;:24;:187;;31325:114;25949:15;23839:2;25949;:15;:::i;:::-;31346:31;;31326:15;;:52;;:19;:52::i;31325:114::-;31252:187;;;23978:13;23839:2;23978;:13;:::i;:::-;23963:29;;:11;:29;:::i;:::-;31234:15;:205;31484:18;31469:12;:33;;;31454:12;:48;;;;31561:14;;31522:54;;;30323:2:1;30305:21;;;30342:18;;30335:29;;;;-1:-1:-1;;;30395:3:1;30380:19;;30373:36;31544:15:0;30476:4:1;30461:20;;30454:36;30506:18;;30499:34;-1:-1:-1;;;;;;;;;;;31522:54:0;30441:3:1;30426:19;31522:54:0;;;;;;;31119:469;31603:36;;352:25:1;;;-1:-1:-1;;;;;31603:36:0;;;31620:1;;-1:-1:-1;;;;;;;;;;;31603:36:0;340:2:1;325:18;31603:36:0;;;;;;;30429:1218;;:::o;31655:1034::-;31890:31;;;31919:1;31890:31;;;;;;;;;31742:14;;;;31890:31;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;31890:31:0;;-1:-1:-1;;31890:31:0;;;;;;;;-1:-1:-1;;31948:133:0;;;;;;;;32000:4;31948:133;;32024:17;;-1:-1:-1;;;;;32024:17:0;31948:133;;;;-1:-1:-1;31948:133:0;;;;;;31932:13;;;;-1:-1:-1;31948:133:0;31932:13;;-1:-1:-1;31932:13:0;;;;:::i;:::-;;;;;;;;;;;:149;;;;32114:4;32094:26;;;;:11;:26;;;;;;32129:11;;-1:-1:-1;;;;;32129:11:0;32094:48;;;;;;;;:63;;32146:11;;32094:26;:63;;32146:11;;32094:63;:::i;:::-;;;;-1:-1:-1;;32193:17:0;;32244:12;;32186:82;;-1:-1:-1;;;32186:82:0;;-1:-1:-1;;;;;32244:12:0;;;32186:82;;;3031:51:1;32168:15:0;;32193:17;;;;;32186:35;;3004:18:1;;32186:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32308:11;;32491:12;;32308:237;;-1:-1:-1;;;32308:237:0;;32168:100;;-1:-1:-1;;;;;;32308:11:0;;;;:65;;:237;;32388:11;;32308;;32458:10;;32491:12;;32519:15;;32308:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32584:17:0;;32621:12;;32577:58;;-1:-1:-1;;;32577:58:0;;-1:-1:-1;;;;;32621:12:0;;;32577:58;;;3031:51:1;32576:105:0;;-1:-1:-1;32659:7:0;;-1:-1:-1;32584:17:0;;;32577:35;;3004:18:1;;32577:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32576:105::-;32556:125;31655:1034;-1:-1:-1;;;;31655:1034:0:o;388:250:1:-;473:1;483:113;497:6;494:1;491:13;483:113;;;573:11;;;567:18;554:11;;;547:39;519:2;512:10;483:113;;;-1:-1:-1;;630:1:1;612:16;;605:27;388:250::o;643:396::-;792:2;781:9;774:21;755:4;824:6;818:13;867:6;862:2;851:9;847:18;840:34;883:79;955:6;950:2;939:9;935:18;930:2;922:6;918:15;883:79;:::i;:::-;1023:2;1002:15;-1:-1:-1;;998:29:1;983:45;;;;1030:2;979:54;;643:396;-1:-1:-1;;643:396:1:o;1044:131::-;-1:-1:-1;;;;;1119:31:1;;1109:42;;1099:70;;1165:1;1162;1155:12;1180:315;1248:6;1256;1309:2;1297:9;1288:7;1284:23;1280:32;1277:52;;;1325:1;1322;1315:12;1277:52;1364:9;1351:23;1383:31;1408:5;1383:31;:::i;:::-;1433:5;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1180:315:1:o;1500:118::-;1586:5;1579:13;1572:21;1565:5;1562:32;1552:60;;1608:1;1605;1598:12;1623:592;1706:6;1714;1722;1730;1783:3;1771:9;1762:7;1758:23;1754:33;1751:53;;;1800:1;1797;1790:12;1751:53;1839:9;1826:23;1858:31;1883:5;1858:31;:::i;:::-;1908:5;-1:-1:-1;1965:2:1;1950:18;;1937:32;1978:33;1937:32;1978:33;:::i;:::-;2030:7;-1:-1:-1;2084:2:1;2069:18;;2056:32;;-1:-1:-1;2140:2:1;2125:18;;2112:32;2153:30;2112:32;2153:30;:::i;:::-;1623:592;;;;-1:-1:-1;1623:592:1;;-1:-1:-1;;1623:592:1:o;2220:456::-;2297:6;2305;2313;2366:2;2354:9;2345:7;2341:23;2337:32;2334:52;;;2382:1;2379;2372:12;2334:52;2421:9;2408:23;2440:31;2465:5;2440:31;:::i;:::-;2490:5;-1:-1:-1;2547:2:1;2532:18;;2519:32;2560:33;2519:32;2560:33;:::i;:::-;2220:456;;2612:7;;-1:-1:-1;;;2666:2:1;2651:18;;;;2638:32;;2220:456::o;3323:247::-;3382:6;3435:2;3423:9;3414:7;3410:23;3406:32;3403:52;;;3451:1;3448;3441:12;3403:52;3490:9;3477:23;3509:31;3534:5;3509:31;:::i;3575:127::-;3636:10;3631:3;3627:20;3624:1;3617:31;3667:4;3664:1;3657:15;3691:4;3688:1;3681:15;3707:275;3778:2;3772:9;3843:2;3824:13;;-1:-1:-1;;3820:27:1;3808:40;;3878:18;3863:34;;3899:22;;;3860:62;3857:88;;;3925:18;;:::i;:::-;3961:2;3954:22;3707:275;;-1:-1:-1;3707:275:1:o;3987:183::-;4047:4;4080:18;4072:6;4069:30;4066:56;;;4102:18;;:::i;:::-;-1:-1:-1;4147:1:1;4143:14;4159:4;4139:25;;3987:183::o;4175:662::-;4229:5;4282:3;4275:4;4267:6;4263:17;4259:27;4249:55;;4300:1;4297;4290:12;4249:55;4336:6;4323:20;4362:4;4386:60;4402:43;4442:2;4402:43;:::i;:::-;4386:60;:::i;:::-;4480:15;;;4566:1;4562:10;;;;4550:23;;4546:32;;;4511:12;;;;4590:15;;;4587:35;;;4618:1;4615;4608:12;4587:35;4654:2;4646:6;4642:15;4666:142;4682:6;4677:3;4674:15;4666:142;;;4748:17;;4736:30;;4786:12;;;;4699;;4666:142;;;-1:-1:-1;4826:5:1;4175:662;-1:-1:-1;;;;;;4175:662:1:o;4842:1215::-;4960:6;4968;5021:2;5009:9;5000:7;4996:23;4992:32;4989:52;;;5037:1;5034;5027:12;4989:52;5077:9;5064:23;5106:18;5147:2;5139:6;5136:14;5133:34;;;5163:1;5160;5153:12;5133:34;5201:6;5190:9;5186:22;5176:32;;5246:7;5239:4;5235:2;5231:13;5227:27;5217:55;;5268:1;5265;5258:12;5217:55;5304:2;5291:16;5326:4;5350:60;5366:43;5406:2;5366:43;:::i;5350:60::-;5444:15;;;5526:1;5522:10;;;;5514:19;;5510:28;;;5475:12;;;;5550:19;;;5547:39;;;5582:1;5579;5572:12;5547:39;5606:11;;;;5626:217;5642:6;5637:3;5634:15;5626:217;;;5722:3;5709:17;5739:31;5764:5;5739:31;:::i;:::-;5783:18;;5659:12;;;;5821;;;;5626:217;;;5862:5;-1:-1:-1;;5905:18:1;;5892:32;;-1:-1:-1;;5936:16:1;;;5933:36;;;5965:1;5962;5955:12;5933:36;;5988:63;6043:7;6032:8;6021:9;6017:24;5988:63;:::i;:::-;5978:73;;;4842:1215;;;;;:::o;6062:367::-;6125:8;6135:6;6189:3;6182:4;6174:6;6170:17;6166:27;6156:55;;6207:1;6204;6197:12;6156:55;-1:-1:-1;6230:20:1;;6273:18;6262:30;;6259:50;;;6305:1;6302;6295:12;6259:50;6342:4;6334:6;6330:17;6318:29;;6402:3;6395:4;6385:6;6382:1;6378:14;6370:6;6366:27;6362:38;6359:47;6356:67;;;6419:1;6416;6409:12;6356:67;6062:367;;;;;:::o;6434:634::-;6535:6;6543;6551;6559;6612:2;6600:9;6591:7;6587:23;6583:32;6580:52;;;6628:1;6625;6618:12;6580:52;6668:9;6655:23;6701:18;6693:6;6690:30;6687:50;;;6733:1;6730;6723:12;6687:50;6772:70;6834:7;6825:6;6814:9;6810:22;6772:70;:::i;:::-;6861:8;;-1:-1:-1;6746:96:1;-1:-1:-1;;6946:2:1;6931:18;;6918:32;6959:28;6918:32;6959:28;:::i;:::-;6434:634;;;;-1:-1:-1;7006:5:1;;7058:2;7043:18;7030:32;;-1:-1:-1;;6434:634:1:o;7073:718::-;7168:6;7176;7184;7192;7200;7208;7261:3;7249:9;7240:7;7236:23;7232:33;7229:53;;;7278:1;7275;7268:12;7229:53;7314:9;7301:23;7291:33;;7374:2;7363:9;7359:18;7346:32;7387:28;7409:5;7387:28;:::i;:::-;7434:5;-1:-1:-1;7491:2:1;7476:18;;7463:32;7504:30;7463:32;7504:30;:::i;:::-;7553:7;-1:-1:-1;7612:2:1;7597:18;;7584:32;7625:30;7584:32;7625:30;:::i;:::-;7073:718;;;;-1:-1:-1;7073:718:1;;7728:3;7713:19;;7700:33;;7780:3;7765:19;;;7752:33;;-1:-1:-1;7073:718:1;-1:-1:-1;;7073:718:1:o;8004:309::-;8069:6;8077;8130:2;8118:9;8109:7;8105:23;8101:32;8098:52;;;8146:1;8143;8136:12;8098:52;8182:9;8169:23;8159:33;;8242:2;8231:9;8227:18;8214:32;8255:28;8277:5;8255:28;:::i;:::-;8302:5;8292:15;;;8004:309;;;;;:::o;8318:377::-;8392:6;8400;8408;8461:2;8449:9;8440:7;8436:23;8432:32;8429:52;;;8477:1;8474;8467:12;8429:52;8513:9;8500:23;8490:33;;8570:2;8559:9;8555:18;8542:32;8532:42;;8624:2;8613:9;8609:18;8596:32;8637:28;8659:5;8637:28;:::i;:::-;8684:5;8674:15;;;8318:377;;;;;:::o;8700:515::-;8792:6;8800;8808;8816;8824;8877:3;8865:9;8856:7;8852:23;8848:33;8845:53;;;8894:1;8891;8884:12;8845:53;8930:9;8917:23;8907:33;;8987:2;8976:9;8972:18;8959:32;8949:42;;9038:2;9027:9;9023:18;9010:32;9000:42;;9089:2;9078:9;9074:18;9061:32;9051:42;;9143:3;9132:9;9128:19;9115:33;9157:28;9179:5;9157:28;:::i;:::-;9204:5;9194:15;;;8700:515;;;;;;;;:::o;9220:382::-;9285:6;9293;9346:2;9334:9;9325:7;9321:23;9317:32;9314:52;;;9362:1;9359;9352:12;9314:52;9401:9;9388:23;9420:31;9445:5;9420:31;:::i;:::-;9470:5;-1:-1:-1;9527:2:1;9512:18;;9499:32;9540:30;9499:32;9540:30;:::i;9833:450::-;9907:6;9915;9923;9976:2;9964:9;9955:7;9951:23;9947:32;9944:52;;;9992:1;9989;9982:12;9944:52;10031:9;10018:23;10050:31;10075:5;10050:31;:::i;:::-;10100:5;-1:-1:-1;10152:2:1;10137:18;;10124:32;;-1:-1:-1;10208:2:1;10193:18;;10180:32;10221:30;10180:32;10221:30;:::i;10288:388::-;10356:6;10364;10417:2;10405:9;10396:7;10392:23;10388:32;10385:52;;;10433:1;10430;10423:12;10385:52;10472:9;10459:23;10491:31;10516:5;10491:31;:::i;:::-;10541:5;-1:-1:-1;10598:2:1;10583:18;;10570:32;10611:33;10570:32;10611:33;:::i;10681:701::-;10779:6;10787;10795;10803;10856:2;10844:9;10835:7;10831:23;10827:32;10824:52;;;10872:1;10869;10862:12;10824:52;10912:9;10899:23;10945:18;10937:6;10934:30;10931:50;;;10977:1;10974;10967:12;10931:50;11016:70;11078:7;11069:6;11058:9;11054:22;11016:70;:::i;:::-;11105:8;;-1:-1:-1;10990:96:1;-1:-1:-1;;11190:2:1;11175:18;;11162:32;11203:28;11162:32;11203:28;:::i;:::-;11250:5;-1:-1:-1;11307:2:1;11292:18;;11279:32;11320:30;11279:32;11320:30;:::i;11387:446::-;11470:6;11478;11486;11494;11547:3;11535:9;11526:7;11522:23;11518:33;11515:53;;;11564:1;11561;11554:12;11515:53;11600:9;11587:23;11577:33;;11657:2;11646:9;11642:18;11629:32;11619:42;;11708:2;11697:9;11693:18;11680:32;11670:42;;11762:2;11751:9;11747:18;11734:32;11775:28;11797:5;11775:28;:::i;12183:127::-;12244:10;12239:3;12235:20;12232:1;12225:31;12275:4;12272:1;12265:15;12299:4;12296:1;12289:15;12315:125;12380:9;;;12401:10;;;12398:36;;;12414:18;;:::i;12445:342::-;12647:2;12629:21;;;12686:2;12666:18;;;12659:30;-1:-1:-1;;;12720:2:1;12705:18;;12698:48;12778:2;12763:18;;12445:342::o;12792:399::-;12994:2;12976:21;;;13033:2;13013:18;;;13006:30;13072:34;13067:2;13052:18;;13045:62;-1:-1:-1;;;13138:2:1;13123:18;;13116:33;13181:3;13166:19;;12792:399::o;13196:184::-;13266:6;13319:2;13307:9;13298:7;13294:23;13290:32;13287:52;;;13335:1;13332;13325:12;13287:52;-1:-1:-1;13358:16:1;;13196:184;-1:-1:-1;13196:184:1:o;14157:127::-;14218:10;14213:3;14209:20;14206:1;14199:31;14249:4;14246:1;14239:15;14273:4;14270:1;14263:15;15077:135;15116:3;15137:17;;;15134:43;;15157:18;;:::i;:::-;-1:-1:-1;15204:1:1;15193:13;;15077:135::o;15217:422::-;15306:1;15349:5;15306:1;15363:270;15384:7;15374:8;15371:21;15363:270;;;15443:4;15439:1;15435:6;15431:17;15425:4;15422:27;15419:53;;;15452:18;;:::i;:::-;15502:7;15492:8;15488:22;15485:55;;;15522:16;;;;15485:55;15601:22;;;;15561:15;;;;15363:270;;;15367:3;15217:422;;;;;:::o;15644:806::-;15693:5;15723:8;15713:80;;-1:-1:-1;15764:1:1;15778:5;;15713:80;15812:4;15802:76;;-1:-1:-1;15849:1:1;15863:5;;15802:76;15894:4;15912:1;15907:59;;;;15980:1;15975:130;;;;15887:218;;15907:59;15937:1;15928:10;;15951:5;;;15975:130;16012:3;16002:8;15999:17;15996:43;;;16019:18;;:::i;:::-;-1:-1:-1;;16075:1:1;16061:16;;16090:5;;15887:218;;16189:2;16179:8;16176:16;16170:3;16164:4;16161:13;16157:36;16151:2;16141:8;16138:16;16133:2;16127:4;16124:12;16120:35;16117:77;16114:159;;;-1:-1:-1;16226:19:1;;;16258:5;;16114:159;16305:34;16330:8;16324:4;16305:34;:::i;:::-;16375:6;16371:1;16367:6;16363:19;16354:7;16351:32;16348:58;;;16386:18;;:::i;:::-;16424:20;;15644:806;-1:-1:-1;;;15644:806:1:o;16455:140::-;16513:5;16542:47;16583:4;16573:8;16569:19;16563:4;16542:47;:::i;16600:474::-;16858:2;16840:21;;;16897:1;16877:18;;;16870:29;-1:-1:-1;;;16930:3:1;16915:19;;16908:36;17011:4;16996:20;;16989:36;;;;-1:-1:-1;17041:18:1;;17034:34;16976:3;16961:19;;16600:474::o;18037:251::-;18107:6;18160:2;18148:9;18139:7;18135:23;18131:32;18128:52;;;18176:1;18173;18166:12;18128:52;18208:9;18202:16;18227:31;18252:5;18227:31;:::i;19365:188::-;19444:13;;-1:-1:-1;;;;;19486:42:1;;19476:53;;19466:81;;19543:1;19540;19533:12;19466:81;19365:188;;;:::o;19558:450::-;19645:6;19653;19661;19714:2;19702:9;19693:7;19689:23;19685:32;19682:52;;;19730:1;19727;19720:12;19682:52;19753:40;19783:9;19753:40;:::i;:::-;19743:50;;19812:49;19857:2;19846:9;19842:18;19812:49;:::i;:::-;19802:59;;19904:2;19893:9;19889:18;19883:25;19948:10;19941:5;19937:22;19930:5;19927:33;19917:61;;19974:1;19971;19964:12;20013:287;20142:3;20180:6;20174:13;20196:66;20255:6;20250:3;20243:4;20235:6;20231:17;20196:66;:::i;:::-;20278:16;;;;;20013:287;-1:-1:-1;;20013:287:1:o;20988:245::-;21055:6;21108:2;21096:9;21087:7;21083:23;21079:32;21076:52;;;21124:1;21121;21114:12;21076:52;21156:9;21150:16;21175:28;21197:5;21175:28;:::i;23342:683::-;23400:3;23438:5;23432:12;23465:6;23460:3;23453:19;23491:4;23520:2;23515:3;23511:12;23504:19;;23557:2;23550:5;23546:14;23578:1;23588:412;23602:6;23599:1;23596:13;23588:412;;;23661:13;;23745:9;;-1:-1:-1;;;;;23741:18:1;;;23729:31;;23804:11;;;23798:18;23794:27;23780:12;;;23773:49;23845:4;23903:11;;;23897:18;23890:26;23883:34;23869:12;;;23862:56;23947:4;23938:14;;;;23975:15;;;;23714:1;23617:9;23588:412;;;-1:-1:-1;24016:3:1;;23342:683;-1:-1:-1;;;;;23342:683:1:o;24030:379::-;24279:6;24268:9;24261:25;24322:2;24317;24306:9;24302:18;24295:30;24242:4;24342:61;24399:2;24388:9;24384:18;24376:6;24342:61;:::i;24414:881::-;24509:6;24540:2;24583;24571:9;24562:7;24558:23;24554:32;24551:52;;;24599:1;24596;24589:12;24551:52;24632:9;24626:16;24665:18;24657:6;24654:30;24651:50;;;24697:1;24694;24687:12;24651:50;24720:22;;24773:4;24765:13;;24761:27;-1:-1:-1;24751:55:1;;24802:1;24799;24792:12;24751:55;24831:2;24825:9;24854:60;24870:43;24910:2;24870:43;:::i;24854:60::-;24948:15;;;25030:1;25026:10;;;;25018:19;;25014:28;;;24979:12;;;;25054:19;;;25051:39;;;25086:1;25083;25076:12;25051:39;25110:11;;;;25130:135;25146:6;25141:3;25138:15;25130:135;;;25212:10;;25200:23;;25163:12;;;;25243;;;;25130:135;;;25284:5;24414:881;-1:-1:-1;;;;;;;24414:881:1:o;25659:128::-;25726:9;;;25747:11;;;25744:37;;;25761:18;;:::i;26148:168::-;26221:9;;;26252;;26269:15;;;26263:22;;26249:37;26239:71;;26290:18;;:::i;26321:217::-;26361:1;26387;26377:132;;26431:10;26426:3;26422:20;26419:1;26412:31;26466:4;26463:1;26456:15;26494:4;26491:1;26484:15;26377:132;-1:-1:-1;26523:9:1;;26321:217::o;30544:629::-;30885:6;30874:9;30867:25;30928:6;30923:2;30912:9;30908:18;30901:34;30971:3;30966:2;30955:9;30951:18;30944:31;30848:4;30992:62;31049:3;31038:9;31034:19;31026:6;30992:62;:::i;:::-;-1:-1:-1;;;;;31090:32:1;;;;31085:2;31070:18;;31063:60;-1:-1:-1;31154:3:1;31139:19;31132:35;30984:70;30544:629;-1:-1:-1;;;30544:629:1:o
Swarm Source
ipfs://7b4e79475354e5eaa368db98f39b596fb4d71513c7c556b9a4c6937d0bb83ea1
[ 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.