Token Sphere Finance
Overview ERC-20
Total Supply:
5,005,917,672.780493 SPHERE
Holders:
7 addresses
Profile Summary
Contract:
Decimals:
18
Balance
390.070497634699283051 SPHERE
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SphereToken
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-16 */ // SPDX-License-Identifier: MIT pragma solidity ^0.7.4; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != - 1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } interface InterfaceLP { function sync() external; } library Roles { struct Role { mapping(address => bool) bearer; } function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory _tokenName, string memory _tokenSymbol, uint8 _tokenDecimals ) { _name = _tokenName; _symbol = _tokenSymbol; _decimals = _tokenDecimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract Ownable { address private _owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(msg.sender == _owner, "Not owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(_owner); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract SphereToken is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; bool public initialDistributionFinished = false; bool public swapEnabled = true; bool public autoRebase = false; bool public feesOnNormalTransfers = false; bool public isLiquidityInMatic = true; uint256 public rewardYield = 3943560072416; uint256 public rewardYieldDenominator = 10000000000000000; uint256 public maxSellTransactionAmount = 2500000 * 10 ** 18; uint256 public rebaseFrequency = 1800; uint256 public nextRebase = block.timestamp + 31536000; uint256 public rebaseEpoch = 0; mapping(address => bool) _isFeeExempt; address[] public _markerPairs; mapping(address => bool) public automatedMarketMakerPairs; uint256 public constant MAX_FEE_RATE = 25; uint256 private constant MAX_REBASE_FREQUENCY = 1800; uint256 private constant DECIMALS = 18; uint256 private constant MAX_UINT256 = ~uint256(0); uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 5 * 10 ** 9 * 10 ** DECIMALS; uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant MAX_SUPPLY = ~uint128(0); address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address public liquidityReceiver = 0x2f1DdC20851E5662305eF87dcE360349465F3c98; address public treasuryReceiver = 0xd8070f711fF60b158BdA0489b0b6390DBF6Bb86c; address public riskFreeValueReceiver = 0x936a57b1e6CBf91D923815a3cDBEFDcC76588fcd; address public maiToken = 0x3d736DC9bA02df9b89fC03efce97d20C13479D74; address public burnReceiver = 0x0000000000000000000000000000000000000000; IDEXRouter public router; address public pair; uint256 public liquidityFee = 5; uint256 public treasuryFee = 3; uint256 public buyFeeRFV = 5; uint256 public sellFeeTreasuryAdded = 2; uint256 public sellFeeRFVAdded = 5; uint256 public burnFeeAdded = 30; uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(burnFeeAdded); uint256 public totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded); uint256 public feeDenominator = 100; uint256 targetLiquidity = 50; uint256 targetLiquidityDenominator = 100; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } modifier validRecipient(address to) { require(to != address(0x0)); _; } uint256 private _totalSupply; uint256 private _gonsPerFragment; uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowedFragments; constructor() ERC20Detailed("Sphere Finance", "SPHERE", uint8(DECIMALS)) { router = IDEXRouter(0x8954AfA98594b838bda56FE4C12a09D7739D179b); pair = IDEXFactory(router.factory()).createPair( address(this), router.WETH() ); address pairmiMATIC = IDEXFactory(router.factory()).createPair( address(this), maiToken ); _allowedFragments[address(this)][address(router)] = uint256(- 1); _allowedFragments[address(this)][pair] = uint256(- 1); _allowedFragments[address(this)][address(this)] = uint256(- 1); _allowedFragments[address(this)][pairmiMATIC] = uint256(- 1); setAutomatedMarketMakerPair(pair, true); setAutomatedMarketMakerPair(pairmiMATIC, true); _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonBalances[msg.sender] = TOTAL_GONS; _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _isFeeExempt[treasuryReceiver] = true; _isFeeExempt[riskFreeValueReceiver] = true; _isFeeExempt[address(this)] = true; _isFeeExempt[msg.sender] = true; IERC20(maiToken).approve(address(router), uint256(- 1)); IERC20(maiToken).approve(address(pairmiMATIC), uint256(- 1)); IERC20(maiToken).approve(address(this), uint256(- 1)); emit Transfer(address(0x0), msg.sender, _totalSupply); } receive() external payable {} function totalSupply() external view override returns (uint256) { return _totalSupply; } function allowance(address owner_, address spender) external view override returns (uint256) { return _allowedFragments[owner_][spender]; } function balanceOf(address who) public view override returns (uint256) { return _gonBalances[who].div(_gonsPerFragment); } function checkFeeExempt(address _addr) external view returns (bool) { return _isFeeExempt[_addr]; } function checkSwapThreshold() external view returns (uint256) { return gonSwapThreshold.div(_gonsPerFragment); } function shouldRebase() internal view returns (bool) { return nextRebase <= block.timestamp; } function shouldTakeFee(address from, address to) internal view returns (bool) { if (_isFeeExempt[from] || _isFeeExempt[to]) { return false; } else if (feesOnNormalTransfers) { return true; } else { return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]); } } function shouldSwapBack() internal view returns (bool) { return !automatedMarketMakerPairs[msg.sender] && !inSwap && swapEnabled && totalBuyFee.add(totalSellFee) > 0 && _gonBalances[address(this)] >= gonSwapThreshold; } function getCirculatingSupply() public view returns (uint256) { return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div( _gonsPerFragment ); } function getCurrentTimestamp() public view returns (uint256) { return block.timestamp; } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { uint256 liquidityBalance = 0; for (uint256 i = 0; i < _markerPairs.length; i++) { liquidityBalance.add(balanceOf(_markerPairs[i]).div(10 ** 9)); } return accuracy.mul(liquidityBalance.mul(2)).div( getCirculatingSupply().div(10 ** 9) ); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } function manualSync() public { for (uint256 i = 0; i < _markerPairs.length; i++) { InterfaceLP(_markerPairs[i]).sync(); } } function transfer(address to, uint256 value) external override validRecipient(to) returns (bool) { _transferFrom(msg.sender, to, value); return true; } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[from] = _gonBalances[from].sub(gonAmount); _gonBalances[to] = _gonBalances[to].add(gonAmount); emit Transfer(from, to, amount); return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient]; require( initialDistributionFinished || excludedAccount, "Trading not started" ); if (automatedMarketMakerPairs[recipient] && !excludedAccount) { require(amount <= maxSellTransactionAmount, "Error amount"); } if (inSwap) { return _basicTransfer(sender, recipient, amount); } uint256 gonAmount = amount.mul(_gonsPerFragment); if (shouldSwapBack()) { swapBack(); } _gonBalances[sender] = _gonBalances[sender].sub(gonAmount); uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount; _gonBalances[recipient] = _gonBalances[recipient].add( gonAmountReceived ); emit Transfer( sender, recipient, gonAmountReceived.div(_gonsPerFragment) ); if (shouldRebase() && autoRebase) { _rebase(); if ( !automatedMarketMakerPairs[sender] && !automatedMarketMakerPairs[recipient] ) { manualSync(); } } return true; } function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != uint256(- 1)) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } function _swapAndLiquify(uint256 contractTokenBalance) private { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); if (isLiquidityInMatic) { uint256 initialBalance = address(this).balance; _swapTokensForMATIC(half, address(this)); uint256 newBalance = address(this).balance.sub(initialBalance); _addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } else { uint256 initialBalance = IERC20(maiToken).balanceOf(address(this)); _swapTokensFormiMATIC(half, address(this)); uint256 newBalance = IERC20(maiToken).balanceOf(address(this)).sub( initialBalance ); _addLiquiditymiMATIC(otherHalf, newBalance); emit SwapAndLiquifymiMATIC(half, newBalance, otherHalf); } } function _addLiquidity(uint256 tokenAmount, uint256 MATICAmount) private { router.addLiquidityETH{value : MATICAmount}( address(this), tokenAmount, 0, 0, liquidityReceiver, block.timestamp ); } function _addLiquiditymiMATIC(uint256 tokenAmount, uint256 miMATICAmount) private { router.addLiquidity( address(this), maiToken, tokenAmount, miMATICAmount, 0, 0, liquidityReceiver, block.timestamp ); } function _swapTokensForMATIC(uint256 tokenAmount, address receiver) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, receiver, block.timestamp ); } function _swapTokensFormiMATIC(uint256 tokenAmount, address receiver) private { address[] memory path = new address[](3); path[0] = address(this); path[1] = router.WETH(); path[2] = maiToken; router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, receiver, block.timestamp ); } function swapBack() internal swapping { uint256 realTotalFee = totalBuyFee.add(totalSellFee); uint256 dynamicLiquidityFee = isOverLiquified( targetLiquidity, targetLiquidityDenominator ) ? 0 : liquidityFee; uint256 contractTokenBalance = _gonBalances[address(this)].div( _gonsPerFragment ); uint256 amountToLiquify = contractTokenBalance .mul(dynamicLiquidityFee.mul(2)) .div(realTotalFee); uint256 amountToRFV = contractTokenBalance .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded)) .div(realTotalFee); uint256 amountToTreasury = contractTokenBalance .sub(amountToLiquify) .sub(amountToRFV); uint256 amountToBurn = contractTokenBalance.mul(burnFeeAdded).div(feeDenominator); if (amountToLiquify > 0) { _swapAndLiquify(amountToLiquify); } if (amountToRFV > 0) { _swapTokensFormiMATIC(amountToRFV, riskFreeValueReceiver); } if (amountToTreasury > 0) { _swapTokensForMATIC(amountToTreasury, treasuryReceiver); } if (amountToBurn > 0) { _gonBalances[address(0)] = _gonBalances[address(0)].add( amountToBurn ); } emit SwapBack( contractTokenBalance, amountToLiquify, amountToRFV, amountToTreasury, amountToBurn ); } function takeFee( address sender, address recipient, uint256 gonAmount ) internal returns (uint256) { uint256 _realFee = totalBuyFee; if (automatedMarketMakerPairs[recipient]) _realFee = totalSellFee; uint256 feeAmount = gonAmount.mul(_realFee).div(feeDenominator); _gonBalances[address(this)] = _gonBalances[address(this)].add( feeAmount ); emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment)); return gonAmount.sub(feeAmount); } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function approve(address spender, uint256 value) external override returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function _rebase() private { if (!inSwap) { uint256 circulatingSupply = getCirculatingSupply(); int256 supplyDelta = int256( circulatingSupply.mul(rewardYield).div(rewardYieldDenominator) ); coreRebase(supplyDelta); } } function coreRebase(int256 supplyDelta) private returns (uint256) { uint256 epoch = block.timestamp; if (supplyDelta == 0) { emit LogRebase(epoch, _totalSupply); return _totalSupply; } if (supplyDelta < 0) { _totalSupply = _totalSupply.sub(uint256(- supplyDelta)); } else { _totalSupply = _totalSupply.add(uint256(supplyDelta)); } if (_totalSupply > MAX_SUPPLY) { _totalSupply = MAX_SUPPLY; } _gonsPerFragment = TOTAL_GONS.div(_totalSupply); nextRebase = epoch + rebaseFrequency; rebaseEpoch += 1; emit LogRebase(epoch, _totalSupply); return _totalSupply; } function manualRebase() external onlyOwner { require(!inSwap, "Try again"); require(nextRebase <= block.timestamp, "Not in time"); uint256 circulatingSupply = getCirculatingSupply(); int256 supplyDelta = int256( circulatingSupply.mul(rewardYield).div(rewardYieldDenominator) ); coreRebase(supplyDelta); manualSync(); } function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner { require( automatedMarketMakerPairs[_pair] != _value, "Value already set" ); automatedMarketMakerPairs[_pair] = _value; if (_value) { _markerPairs.push(_pair); } else { require(_markerPairs.length > 1, "Required 1 pair"); for (uint256 i = 0; i < _markerPairs.length; i++) { if (_markerPairs[i] == _pair) { _markerPairs[i] = _markerPairs[_markerPairs.length - 1]; _markerPairs.pop(); break; } } } emit SetAutomatedMarketMakerPair(_pair, _value); } function setInitialDistributionFinished(bool _value) external onlyOwner { require(initialDistributionFinished != _value, "Not changed"); initialDistributionFinished = _value; } function setFeeExempt(address _addr, bool _value) external onlyOwner { require(_isFeeExempt[_addr] != _value, "Not changed"); _isFeeExempt[_addr] = _value; } function setTargetLiquidity(uint256 target, uint256 accuracy) external onlyOwner { targetLiquidity = target; targetLiquidityDenominator = accuracy; } function setSwapBackSettings( bool _enabled, uint256 _num, uint256 _denom ) external onlyOwner { swapEnabled = _enabled; gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num); } function setFeeReceivers( address _liquidityReceiver, address _treasuryReceiver, address _riskFreeValueReceiver, address _burnValueReceiver ) external onlyOwner { liquidityReceiver = _liquidityReceiver; treasuryReceiver = _treasuryReceiver; riskFreeValueReceiver = _riskFreeValueReceiver; burnReceiver = _burnValueReceiver; } function setFees( uint256 _liquidityFee, uint256 _riskFreeValue, uint256 _treasuryFee, uint256 _sellFeeTreasuryAdded, uint256 _sellFeeRFVAdded, uint256 _burnFee, uint256 _feeDenominator ) external onlyOwner { //check if total value does not exceed 20% //PoC that Libero's contract is exploitable: //https://mumbai.polygonscan.com/address/0x6fc034596feb97a522346d7a42e705b075632d0c#readContract //Libero Contract: https://bscscan.com/address/0x0dfcb45eae071b3b846e220560bbcdd958414d78#readContract uint256 maxTotalBuyFee = _liquidityFee.add(_treasuryFee).add(_riskFreeValue).add(_burnFee); uint256 maxTotalSellFee = maxTotalBuyFee.add(_sellFeeTreasuryAdded).add( _sellFeeRFVAdded ); require( _liquidityFee <= MAX_FEE_RATE && _riskFreeValue <= MAX_FEE_RATE && _treasuryFee <= MAX_FEE_RATE && _sellFeeTreasuryAdded <= MAX_FEE_RATE && _sellFeeRFVAdded <= MAX_FEE_RATE && _burnFee <= MAX_FEE_RATE, "wrong" ); require(maxTotalBuyFee < MAX_FEE_RATE, "exceeded max buy fees"); require(maxTotalSellFee < MAX_FEE_RATE, "exceeded max sell fees"); liquidityFee = _liquidityFee; buyFeeRFV = _riskFreeValue; treasuryFee = _treasuryFee; sellFeeTreasuryAdded = _sellFeeTreasuryAdded; sellFeeRFVAdded = _sellFeeRFVAdded; burnFeeAdded = _burnFee; totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(burnFeeAdded); totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded); feeDenominator = _feeDenominator; require(totalBuyFee < feeDenominator / 4); } function clearStuckBalance(address _receiver) external onlyOwner { uint256 balance = address(this).balance; payable(_receiver).transfer(balance); } function rescueToken(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) { return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens); } function setAutoRebase(bool _autoRebase) external onlyOwner { require(autoRebase != _autoRebase, "Not changed"); autoRebase = _autoRebase; } function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner { require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, "Too high"); rebaseFrequency = _rebaseFrequency; } function setRewardYield( uint256 _rewardYield, uint256 _rewardYieldDenominator ) external onlyOwner { rewardYield = _rewardYield; rewardYieldDenominator = _rewardYieldDenominator; } function setFeesOnNormalTransfers(bool _enabled) external onlyOwner { require(feesOnNormalTransfers != _enabled, "Not changed"); feesOnNormalTransfers = _enabled; } function setIsLiquidityInMATIC(bool _value) external onlyOwner { require(isLiquidityInMatic != _value, "Not changed"); isLiquidityInMatic = _value; } function setNextRebase(uint256 _nextRebase) external onlyOwner { nextRebase = _nextRebase; } function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner { maxSellTransactionAmount = _maxTxn; } event SwapBack( uint256 contractTokenBalance, uint256 amountToLiquify, uint256 amountToRFV, uint256 amountToTreasury, uint256 amountToBurn ); event SwapAndLiquify( uint256 tokensSwapped, uint256 MATICReceived, uint256 tokensIntoLiqudity ); event SwapAndLiquifymiMATIC( uint256 tokensSwapped, uint256 miMATICReceived, uint256 tokensIntoLiqudity ); event LogRebase(uint256 indexed epoch, uint256 totalSupply); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); }
[{"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":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"miMATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifymiMATIC","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToBurn","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInMatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maiToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"internalType":"address","name":"_burnValueReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInMATIC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526002805462ffffff60b81b1961ffff60a81b19909116600160b01b1716600160c81b1781556503962e7f4ce06003908155662386f26fc100006004556a021165458500521280000060059081556107086006556301e1338042016007556000600855600c80546001600160a01b031990811661dead17909155600d805482169055600e80548216732f1ddc20851e5662305ef87dce360349465f3c98179055600f8054821673d8070f711ff60b158bda0489b0b6390dbf6bb86c17905560108054821673936a57b1e6cbf91d923815a3cdbefdcc76588fcd179055601180548216733d736dc9ba02df9b89fc03efce97d20c13479d741790556012805490911690556015819055601682905560178190556018929092556019829055601e601a819055620001619290916200014d9190829082906200248a620007ed602090811b91909117901c565b620007ed60201b6200248a1790919060201c565b601b55620001896019546200014d601854601b54620007ed60201b6200248a1790919060201c565b601c556064601d8190556032601e55601f557e068db8bac710cb295e9e1b089a027525460aa64c2f0c0aa63ae238dca2339c602355348015620001cb57600080fd5b50604080518082018252600e81526d5370686572652046696e616e636560901b60208083019182528351808501909452600684526553504845524560d01b90840152815191929160129162000224916000919062000be8565b5081516200023a90600190602085019062000be8565b506002805460ff191660ff9290921691909117610100600160a81b0319166101003302179055505060138054738954afa98594b838bda56fe4c12a09d7739d179b6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620002cf57600080fd5b505afa158015620002e4573d6000803e3d6000fd5b505050506040513d6020811015620002fb57600080fd5b5051601354604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200034e57600080fd5b505afa15801562000363573d6000803e3d6000fd5b505050506040513d60208110156200037a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003cd57600080fd5b505af1158015620003e2573d6000803e3d6000fd5b505050506040513d6020811015620003f957600080fd5b5051601480546001600160a01b0319166001600160a01b039283161790556013546040805163c45a015560e01b81529051600093929092169163c45a015591600480820192602092909190829003018186803b1580156200045957600080fd5b505afa1580156200046e573d6000803e3d6000fd5b505050506040513d60208110156200048557600080fd5b5051601154604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b158015620004dd57600080fd5b505af1158015620004f2573d6000803e3d6000fd5b505050506040513d60208110156200050957600080fd5b50513060008181526025602090815260408083206013546001600160a01b0390811685529252808320600019908190556014805484168552828520829055948452818420819055828616845292209190915590549192506200056e911660016200084f565b6200057b8160016200084f565b6b1027e72f1f1281308800000060219081553360009081526024602090815260409091206b01d290004395eb7bbfffffff19908190559154620005c89291620024e462000af7821b17901c565b602255600f546001600160a01b0390811660009081526009602090815260408083208054600160ff199182168117909255601054861685528285208054821683179055308552828520805482168317905533855282852080549091169091179055601154601354825163095ea7b360e01b815290861660048201526000196024820152915194169363095ea7b393604480840194938390030190829087803b1580156200067457600080fd5b505af115801562000689573d6000803e3d6000fd5b505050506040513d6020811015620006a057600080fd5b50506011546040805163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b158015620006fa57600080fd5b505af11580156200070f573d6000803e3d6000fd5b505050506040513d60208110156200072657600080fd5b50506011546040805163095ea7b360e01b8152306004820152600019602482015290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b1580156200077e57600080fd5b505af115801562000793573d6000803e3d6000fd5b505050506040513d6020811015620007aa57600080fd5b5050602154604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000c94565b60008282018381101562000848576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60025461010090046001600160a01b03163314620008a0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff161515811515141562000909576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556200098857600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03841617905562000abb565b600a54600110620009d2576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600a5481101562000ab957826001600160a01b0316600a8281548110620009f857fe5b6000918252602090912001546001600160a01b0316141562000ab057600a8054600019810190811062000a2757fe5b600091825260209091200154600a80546001600160a01b03909216918390811062000a4e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a80548062000a8857fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000ab9565b600101620009d5565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200084883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b4160201b60201c565b6000818362000bd15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b9557818101518382015260200162000b7b565b50505050905090810190601f16801562000bc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000bde57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c20576000855562000c6b565b82601f1062000c3b57805160ff191683800117855562000c6b565b8280016001018555821562000c6b579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5062000c7992915062000c7d565b5090565b5b8082111562000c79576000815560010162000c7e565b6136e78062000ca46000396000f3fe6080604052600436106103f35760003560e01c80637ac8292711610208578063a9059cbb11610118578063d7832b11116100ab578063e15beb801161007a578063e15beb8014610d2a578063e1d5584c14610d56578063f2fde38b14610d80578063f3a54f2c14610db3578063f887ea4014610ddf576103fa565b8063d7832b1114610c77578063da1a7be914610c8c578063da2e3bad14610ca1578063dd62ed3e14610cef576103fa565b8063d0889358116100e7578063d088935814610bcd578063d1fce26414610c05578063d439979014610c1a578063d51ed1c814610c4d576103fa565b8063a9059cbb14610b37578063b62496f514610b70578063bc7e68a314610ba3578063cc32d17614610bb8576103fa565b806392f6576e1161019b5780639a7a23d61161016a5780639a7a23d614610a6f5780639ae7372d14610aaa5780639d9241ec14610ad4578063a457c2d714610ae9578063a8aa1b3114610b22576103fa565b806392f6576e14610a1b57806395d89b4114610a305780639763eec414610a4557806398118cb414610a5a576103fa565b80638da5cb5b116101d75780638da5cb5b1461098a5780638dbb08ba1461099f5780638ebfc796146109cb5780639079f93214610a06576103fa565b80637ac82927146109365780637d4b50171461094b5780638102c5701461096057806389375abf14610975576103fa565b8063395093511161030357806361a9d1b1116102965780636f8f3104116102655780636f8f31041461089157806370a08231146108a6578063715018a6146108d9578063753d02a1146108ee578063764d72bf14610903576103fa565b806361a9d1b11461083d5780636c9230db146108525780636d351d1a146108675780636ddd17131461087c576103fa565b806357b535c0116102d257806357b535c0146107d457806359b107b9146107e95780635abe6711146107fe5780635c38ffe214610813576103fa565b806339509351146107115780633c8e556d1461074a5780634cd9ddf21461079557806352b9835a146107bf576103fa565b8063180b0d7e11610386578063240cd44811610355578063240cd4481461066e578063264d26dd146106835780632b112e4914610698578063313ce567146106ad57806333f3d628146106d8576103fa565b8063180b0d7e146105d157806318160ddd146105e6578063201e7991146105fb57806323b872dd1461062b576103fa565b8063095ea7b3116103c2578063095ea7b3146105135780630af08314146105605780631161ae39146105755780631276089b146105a5576103fa565b806301b16827146103ff57806302259e9e1461043157806306fdde031461045857806308b1fd8f146104e2576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061042f6004803603604081101561042257600080fd5b5080359060200135610df4565b005b34801561043d57600080fd5b50610446610e4f565b60408051918252519081900360200190f35b34801561046457600080fd5b5061046d610e55565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104a757818101518382015260200161048f565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ee57600080fd5b506104f7610eeb565b604080516001600160a01b039092168252519081900360200190f35b34801561051f57600080fd5b5061054c6004803603604081101561053657600080fd5b506001600160a01b038135169060200135610efa565b604080519115158252519081900360200190f35b34801561056c57600080fd5b50610446610f61565b34801561058157600080fd5b5061054c6004803603604081101561059857600080fd5b5080359060200135610f67565b3480156105b157600080fd5b5061042f600480360360208110156105c857600080fd5b50351515610f7b565b3480156105dd57600080fd5b5061044661103d565b3480156105f257600080fd5b50610446611043565b34801561060757600080fd5b5061042f6004803603604081101561061e57600080fd5b5080359060200135611049565b34801561063757600080fd5b5061054c6004803603606081101561064e57600080fd5b506001600160a01b038135811691602081013590911690604001356110a4565b34801561067a57600080fd5b5061054c61117e565b34801561068f57600080fd5b506104f761118e565b3480156106a457600080fd5b5061044661119d565b3480156106b957600080fd5b506106c26111ff565b6040805160ff9092168252519081900360200190f35b3480156106e457600080fd5b5061054c600480360360408110156106fb57600080fd5b506001600160a01b038135169060200135611208565b34801561071d57600080fd5b5061054c6004803603604081101561073457600080fd5b506001600160a01b0381351690602001356112dd565b34801561075657600080fd5b5061042f6004803603608081101561076d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611370565b3480156107a157600080fd5b5061042f600480360360208110156107b857600080fd5b5035611410565b3480156107cb57600080fd5b506104466114a7565b3480156107e057600080fd5b506104466114ad565b3480156107f557600080fd5b506104466114b3565b34801561080a57600080fd5b5061054c6114b9565b34801561081f57600080fd5b5061042f6004803603602081101561083657600080fd5b50356114c9565b34801561084957600080fd5b5061042f61151e565b34801561085e57600080fd5b50610446611638565b34801561087357600080fd5b5061044661163c565b34801561088857600080fd5b5061054c611655565b34801561089d57600080fd5b506104f7611665565b3480156108b257600080fd5b50610446600480360360208110156108c957600080fd5b50356001600160a01b0316611674565b3480156108e557600080fd5b5061042f6116a4565b3480156108fa57600080fd5b5061042f611743565b34801561090f57600080fd5b5061042f6004803603602081101561092657600080fd5b50356001600160a01b03166117cf565b34801561094257600080fd5b5061044661185c565b34801561095757600080fd5b506104f7611862565b34801561096c57600080fd5b50610446611871565b34801561098157600080fd5b50610446611877565b34801561099657600080fd5b506104f761187d565b3480156109ab57600080fd5b5061042f600480360360208110156109c257600080fd5b50351515611891565b3480156109d757600080fd5b5061042f600480360360408110156109ee57600080fd5b506001600160a01b0381351690602001351515611953565b348015610a1257600080fd5b5061054c611a30565b348015610a2757600080fd5b50610446611a40565b348015610a3c57600080fd5b5061046d611a45565b348015610a5157600080fd5b50610446611aa5565b348015610a6657600080fd5b50610446611aab565b348015610a7b57600080fd5b5061042f60048036036040811015610a9257600080fd5b506001600160a01b0381351690602001351515611ab1565b348015610ab657600080fd5b5061042f60048036036020811015610acd57600080fd5b5035611d4c565b348015610ae057600080fd5b50610446611da1565b348015610af557600080fd5b5061054c60048036036040811015610b0c57600080fd5b506001600160a01b038135169060200135611da7565b348015610b2e57600080fd5b506104f7611e90565b348015610b4357600080fd5b5061054c60048036036040811015610b5a57600080fd5b506001600160a01b038135169060200135611e9f565b348015610b7c57600080fd5b5061054c60048036036020811015610b9357600080fd5b50356001600160a01b0316611ecb565b348015610baf57600080fd5b50610446611ee0565b348015610bc457600080fd5b50610446611ee6565b348015610bd957600080fd5b5061042f60048036036060811015610bf057600080fd5b50803515159060208101359060400135611eec565b348015610c1157600080fd5b5061054c611f82565b348015610c2657600080fd5b5061054c60048036036020811015610c3d57600080fd5b50356001600160a01b0316611f92565b348015610c5957600080fd5b5061044660048036036020811015610c7057600080fd5b5035611fb0565b348015610c8357600080fd5b50610446612034565b348015610c9857600080fd5b506104f761203a565b348015610cad57600080fd5b5061042f600480360360e0811015610cc457600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135612049565b348015610cfb57600080fd5b5061044660048036036040811015610d1257600080fd5b506001600160a01b0381358116916020013516612249565b348015610d3657600080fd5b5061042f60048036036020811015610d4d57600080fd5b50351515612274565b348015610d6257600080fd5b506104f760048036036020811015610d7957600080fd5b5035612336565b348015610d8c57600080fd5b5061042f60048036036020811015610da357600080fd5b50356001600160a01b0316612360565b348015610dbf57600080fd5b5061042f60048036036020811015610dd657600080fd5b503515156123b9565b348015610deb57600080fd5b506104f761247b565b60025461010090046001600160a01b03163314610e44576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600391909155600455565b60055481565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b600f546001600160a01b031681565b3360008181526025602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b600082610f7383611fb0565b119392505050565b60025461010090046001600160a01b03163314610fcb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160a81b909104161515811515141561101f576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160a81b0260ff60a81b19909216919091179055565b601d5481565b60215490565b60025461010090046001600160a01b03163314611099576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b601e91909155601f55565b6000826001600160a01b0381166110ba57600080fd5b6001600160a01b038516600090815260256020908152604080832033845290915290205460001914611167576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152602582528381203382529091529190912054611142918590612526565b6001600160a01b03861660009081526025602090815260408083203384529091529020555b6111728585856125bd565b50600195945050505050565b600254600160c81b900460ff1681565b600e546001600160a01b031681565b602254600d546001600160a01b0390811660009081526024602052604080822054600c54909316825281205490926111fa9290916111f491906111ee906b01d290004395eb7bbfffffff1990612886565b90612886565b906124e4565b905090565b60025460ff1690565b60025460009061010090046001600160a01b0316331461125b576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b505050506040513d60208110156112d457600080fd5b50519392505050565b3360009081526025602090815260408083206001600160a01b038616845290915281205461130b908361248a565b3360008181526025602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60025461010090046001600160a01b031633146113c0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600e80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355601080549285169284169290921790915560128054919093169116179055565b60025461010090046001600160a01b03163314611460576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6107088111156114a2576040805162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b604482015290519081900360640190fd5b600655565b601a5481565b60085481565b601b5481565b600254600160c01b900460ff1681565b60025461010090046001600160a01b03163314611519576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600555565b60025461010090046001600160a01b0316331461156e576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60205460ff16156115b2576040805162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015290519081900360640190fd5b4260075411156115f7576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015290519081900360640190fd5b600061160161119d565b905060006116206004546111f4600354856128c890919063ffffffff16565b905061162b81612921565b50611634611743565b5050565b4290565b60006111fa6022546023546124e490919063ffffffff16565b600254600160b01b900460ff1681565b6011546001600160a01b031681565b6022546001600160a01b038216600090815260246020526040812054909161169c91906124e4565b90505b919050565b60025461010090046001600160a01b031633146116f4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60005b600a548110156117cc57600a818154811061175d57fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156117a857600080fd5b505af11580156117bc573d6000803e3d6000fd5b5050600190920191506117469050565b50565b60025461010090046001600160a01b0316331461181f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611857573d6000803e3d6000fd5b505050565b60195481565b6010546001600160a01b031681565b60185481565b60065481565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b031633146118e1576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c81b9091041615158115151415611935576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160c81b0260ff60c81b19909216919091179055565b60025461010090046001600160a01b031633146119a3576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615158115151415611a05576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600254600160b81b900460ff1681565b601981565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ee15780601f10610eb657610100808354040283529160200191610ee1565b60175481565b60155481565b60025461010090046001600160a01b03163314611b01576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff1615158115151415611b69576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155611be657600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416179055611d10565b600a54600110611c2f576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600a54811015611d0e57826001600160a01b0316600a8281548110611c5357fe5b6000918252602090912001546001600160a01b03161415611d0657600a80546000198101908110611c8057fe5b600091825260209091200154600a80546001600160a01b039092169183908110611ca657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611cdf57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611d0e565b600101611c32565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b03163314611d9c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600755565b601c5481565b3360009081526025602090815260408083206001600160a01b0386168452909152812054808310611dfb573360009081526025602090815260408083206001600160a01b0388168452909152812055611e2a565b611e058184612886565b3360009081526025602090815260408083206001600160a01b03891684529091529020555b3360008181526025602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6014546001600160a01b031681565b6000826001600160a01b038116611eb557600080fd5b611ec03385856125bd565b506001949350505050565b600b6020526000908152604090205460ff1681565b60075481565b60165481565b60025461010090046001600160a01b03163314611f3c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60b01b1916600160b01b85151502179055611f7a82611f74836b1027e72f1f128130880000006000195b0619906124e4565b906128c8565b602355505050565b600254600160a81b900460ff1681565b6001600160a01b031660009081526009602052604090205460ff1690565b600080805b600a5481101561200457611ffb611ff4633b9aca006111f4600a8581548110611fda57fe5b6000918252602090912001546001600160a01b0316611674565b839061248a565b50600101611fb5565b5061202d612018633b9aca006111f461119d565b6111f46120268460026128c8565b86906128c8565b9392505050565b60045481565b6012546001600160a01b031681565b60025461010090046001600160a01b03163314612099576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60006120b1836120ab89818c8b61248a565b9061248a565b905060006120c3856120ab848961248a565b9050601989111580156120d7575060198811155b80156120e4575060198711155b80156120f1575060198611155b80156120fe575060198511155b801561210b575060198411155b612144576040805162461bcd60e51b815260206004820152600560248201526477726f6e6760d81b604482015290519081900360640190fd5b60198210612191576040805162461bcd60e51b81526020600482015260156024820152746578636565646564206d617820627579206665657360581b604482015290519081900360640190fd5b601981106121df576040805162461bcd60e51b81526020600482015260166024820152756578636565646564206d61782073656c6c206665657360501b604482015290519081900360640190fd5b60158990556017889055601687905560188690556019859055601a84905561220d846120ab8a818d8c61248a565b601b819055601954601854612225926120ab9161248a565b601c55601d83905560048304601b541061223e57600080fd5b505050505050505050565b6001600160a01b03918216600090815260256020908152604080832093909416825291909152205490565b60025461010090046001600160a01b031633146122c4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160b81b9091041615158115151415612318576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160b81b0260ff60b81b19909216919091179055565b600a818154811061234657600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146123b0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6117cc81612a2d565b60025461010090046001600160a01b03163314612409576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c01b909104161515811515141561245d576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160c01b0260ff60c01b19909216919091179055565b6013546001600160a01b031681565b60008282018381101561202d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061202d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612aa7565b600081848411156125b55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561257a578181015183820152602001612562565b50505050905090810190601f1680156125a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316600090815260096020526040812054819060ff16806125fe57506001600160a01b03841660009081526009602052604090205460ff165b600254909150600160a81b900460ff16806126165750805b61265d576040805162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600b602052604090205460ff168015612683575080155b156126ce576005548311156126ce576040805162461bcd60e51b815260206004820152600c60248201526b115c9c9bdc88185b5bdd5b9d60a21b604482015290519081900360640190fd5b60205460ff16156126ec576126e4858585612b0c565b91505061202d565b6000612703602254856128c890919063ffffffff16565b905061270d612bdb565b1561271a5761271a612c55565b6001600160a01b03861660009081526024602052604090205461273d9082612886565b6001600160a01b0387166000908152602460205260408120919091556127638787612e3e565b61276d5781612778565b612778878784612eea565b6001600160a01b03871660009081526024602052604090205490915061279e908261248a565b6001600160a01b03808816600081815260246020526040902092909255602254908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127ef9085906124e4565b60408051918252519081900360200190a3612808612fba565b801561281d5750600254600160b81b900460ff165b156128795761282a612fc3565b6001600160a01b0387166000908152600b602052604090205460ff1615801561286c57506001600160a01b0386166000908152600b602052604090205460ff16155b1561287957612879611743565b5060019695505050505050565b600061202d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612526565b6000826128d757506000610f5b565b828202828482816128e457fe5b041461202d5760405162461bcd60e51b81526004018080602001828103825260218152602001806136916021913960400191505060405180910390fd5b6000428261296b57602154604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a2505060215461169f565b600083121561298d57602154612985906000859003612886565b60215561299e565b60215461299a908461248a565b6021555b6021546001600160801b0310156129bb576001600160801b036021555b6021546129d7906b1027e72f1f12813088000000600019611f6c565b6022556006548101600755600880546001019055602154604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050602154919050565b6001600160a01b038116612a4057600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008183612af65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561257a578181015183820152602001612562565b506000838581612b0257fe5b0495945050505050565b600080612b24602254846128c890919063ffffffff16565b6001600160a01b038616600090815260246020526040902054909150612b4a9082612886565b6001600160a01b038087166000908152602460205260408082209390935590861681522054612b79908261248a565b6001600160a01b0380861660008181526024602090815260409182902094909455805187815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001949350505050565b336000908152600b602052604081205460ff16158015612bfe575060205460ff16155b8015612c135750600254600160b01b900460ff165b8015612c3557506000612c33601c54601b5461248a90919063ffffffff16565b115b80156111fa57505060235430600090815260246020526040902054101590565b6020805460ff19166001179055601c54601b54600091612c75919061248a565b90506000612c87601e54601f54610f67565b612c9357601554612c96565b60005b6022543060009081526024602052604081205492935091612cb6916124e4565b90506000612cd3846111f4612ccc8660026128c8565b85906128c8565b90506000612cfa856111f46120266019546120ab60026017546128c890919063ffffffff16565b90506000612d0c826111ee8686612886565b90506000612d2b601d546111f4601a54886128c890919063ffffffff16565b90508315612d3c57612d3c84613003565b8215612d5957601054612d599084906001600160a01b03166131f9565b8115612d7657600f54612d769083906001600160a01b03166133e4565b8015612ddd576000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad54612db1908261248a565b6000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad555b6040805186815260208101869052808201859052606081018490526080810183905290517fc20fef046873ad0c4038f9a82bc41b1ae19370c40e6a6c9584298f0aeca304389181900360a00190a150506020805460ff191690555050505050565b6001600160a01b03821660009081526009602052604081205460ff1680612e7d57506001600160a01b03821660009081526009602052604090205460ff165b15612e8a57506000610f5b565b600254600160c01b900460ff1615612ea457506001610f5b565b6001600160a01b0383166000908152600b602052604090205460ff1680612ee357506001600160a01b0382166000908152600b602052604090205460ff165b9050610f5b565b601b546001600160a01b0383166000908152600b602052604081205490919060ff1615612f165750601c545b601d54600090612f2a906111f486856128c8565b30600090815260246020526040902054909150612f47908261248a565b306000818152602460205260409020919091556022546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612f959085906124e4565b60408051918252519081900360200190a3612fb08482612886565b9695505050505050565b60075442101590565b60205460ff16613001576000612fd761119d565b90506000612ff66004546111f4600354856128c890919063ffffffff16565b905061185781612921565b565b60006130108260026124e4565b9050600061301e8383612886565b600254909150600160c81b900460ff161561309d574761303e83306133e4565b600061304a4783612886565b90506130568382613539565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050611857565b601154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156130e857600080fd5b505afa1580156130fc573d6000803e3d6000fd5b505050506040513d602081101561311257600080fd5b5051905061312083306131f9565b601154604080516370a0823160e01b815230600482015290516000926131a69285926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561317457600080fd5b505afa158015613188573d6000803e3d6000fd5b505050506040513d602081101561319e57600080fd5b505190612886565b90506131b283826135df565b604080518581526020810183905280820185905290517fd173df6a45b29a212d79c719838ca5eeb9dfcf6d8af0a981b80803a007a6bf329181900360600190a15050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061322a57fe5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561327e57600080fd5b505afa158015613292573d6000803e3d6000fd5b505050506040513d60208110156132a857600080fd5b50518151829060019081106132b957fe5b6001600160a01b0392831660209182029290920101526011548251911690829060029081106132e457fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601360009054906101000a90046001600160a01b03166001600160a01b0316635c11d7958460008486426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561339e578181015183820152602001613386565b505050509050019650505050505050600060405180830381600087803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061341357fe5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561346757600080fd5b505afa15801561347b573d6000803e3d6000fd5b505050506040513d602081101561349157600080fd5b50518151829060019081106134a257fe5b6001600160a01b0392831660209182029290920181019190915260135460405163791ac94760e01b8152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a48601528851959097169663791ac947968b9693958a958c9590939260c49092019187810191028083838b831561339e578181015183820152602001613386565b601354600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156135ae57600080fd5b505af11580156135c2573d6000803e3d6000fd5b50505050506040513d60608110156135d957600080fd5b50505050565b601354601154600e546040805162e8e33760e81b81523060048201526001600160a01b039384166024820152604481018790526064810186905260006084820181905260a4820181905292841660c48201524260e48201529051929093169263e8e33700926101048083019360609383900390910190829087803b15801561366657600080fd5b505af115801561367a573d6000803e3d6000fd5b505050506040513d60608110156135d957600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122078731393944627dbfaa4cf8b4a3e68805c9f01eaf3276475cb1ca04ba63d5b0164736f6c63430007060033
Deployed ByteCode Sourcemap
7210:23091:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28822:227;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28822:227:0;;;;;;;:::i;:::-;;7669:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4355:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8710:81;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;8710:81:0;;;;;;;;;;;;;;22423:241;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22423:241:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7556:42;;;;;;;;;;;;;:::i;13882:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13882:170:0;;;;;;;:::i;24969:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24969:199:0;;;;:::i;9540:35::-;;;;;;;;;;;;;:::i;11638:102::-;;;;;;;;;;;;;:::i;25364:187::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25364:187:0;;;;;;;:::i;16327:454::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16327:454:0;;;;;;;;;;;;;;;;;:::i;7510:37::-;;;;;;;;;;;;;:::i;8621:82::-;;;;;;;;;;;;;:::i;13132:203::-;;;;;;;;;;;;;:::i;4541:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28234:203;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28234:203:0;;;;;;;;:::i;22021:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22021:394:0;;;;;;;;:::i;25797:407::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25797:407:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;28616:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28616:198:0;;:::i;9303:32::-;;;;;;;;;;;;;:::i;7843:30::-;;;;;;;;;;;;;:::i;9342:91::-;;;;;;;;;;;;;:::i;7462:41::-;;;;;;;;;;;;;:::i;29546:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29546:120:0;;:::i;23757:403::-;;;;;;;;;;;;;:::i;13343:102::-;;;;;;;;;;;;;:::i;12199:126::-;;;;;;;;;;;;;:::i;7388:30::-;;;;;;;;;;;;;:::i;8891:68::-;;;;;;;;;;;;;:::i;11934:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11934:136:0;-1:-1:-1;;;;;11934:136:0;;:::i;6765:126::-;;;;;;;;;;;;;:::i;14060:159::-;;;;;;;;;;;;;:::i;28056:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28056:170:0;-1:-1:-1;;;;;28056:170:0;;:::i;9262:34::-;;;;;;;;;;;;;:::i;8798:86::-;;;;;;;;;;;;;:::i;9216:39::-;;;;;;;;;;;;;:::i;7738:37::-;;;;;;;;;;;;;:::i;6576:79::-;;;;;;;;;;;;;:::i;29252:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29252:172:0;;;;:::i;25176:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25176:180:0;;;;;;;;;;:::i;7425:30::-;;;;;;;;;;;;;:::i;8028:41::-;;;;;;;;;;;;;:::i;4446:87::-;;;;;;;;;;;;;:::i;9181:28::-;;;;;;;;;;;;;:::i;9106:31::-;;;;;;;;;;;;;:::i;24168:793::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24168:793:0;;;;;;;;;;:::i;29432:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29432:106:0;;:::i;9440:93::-;;;;;;;;;;;;;:::i;21425:588::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21425:588:0;;;;;;;;:::i;9078:19::-;;;;;;;;;;;;;:::i;14227:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14227:199:0;;;;;;;;:::i;7962:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7962:57:0;-1:-1:-1;;;;;7962:57:0;;:::i;7782:54::-;;;;;;;;;;;;;:::i;9144:30::-;;;;;;;;;;;;;:::i;25559:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25559:230:0;;;;;;;;;;;;;;:::i;7334:47::-;;;;;;;;;;;;;:::i;12078:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12078:113:0;-1:-1:-1;;;;;12078:113:0;;:::i;13453:421::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13453:421:0;;:::i;7605:57::-;;;;;;;;;;;;;:::i;8966:72::-;;;;;;;;;;;;;:::i;26212:1836::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26212:1836:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11748:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11748:178:0;;;;;;;;;;:::i;28445:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28445:163:0;;;;:::i;7926:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7926:29:0;;:::i;6899:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6899:109:0;-1:-1:-1;;;;;6899:109:0;;:::i;29057:187::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29057:187:0;;;;:::i;9047:24::-;;;;;;;;;;;;;:::i;28822:227::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;28956:11:::1;:26:::0;;;;28993:22:::1;:48:::0;28822:227::o;7669:60::-;;;;:::o;4355:83::-;4425:5;4418:12;;;;;;;;-1:-1:-1;;4418:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4392:13;;4418:12;;4425:5;;4418:12;;4425:5;4418:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4355:83;:::o;8710:81::-;;;-1:-1:-1;;;;;8710:81:0;;:::o;22423:241::-;22554:10;22514:4;22536:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22536:38:0;;;;;;;;;;;:46;;;22598:36;;;;;;;22514:4;;22536:38;;22554:10;;22598:36;;;;;;;;-1:-1:-1;22652:4:0;22423:241;;;;;:::o;7556:42::-;;;;:::o;13882:170::-;13977:4;14038:6;14006:29;14026:8;14006:19;:29::i;:::-;:38;;13882:170;-1:-1:-1;;;13882:170:0:o;24969:199::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;25060:27:::1;::::0;::::1;-1:-1:-1::0;;;25060:27:0;;::::1;;:37;;::::0;::::1;;;;25052:61;;;::::0;;-1:-1:-1;;;25052:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25052:61:0;;;;;;;;;;;;;::::1;;25124:27;:36:::0;;;::::1;;-1:-1:-1::0;;;25124:36:0::1;-1:-1:-1::0;;;;25124:36:0;;::::1;::::0;;;::::1;::::0;;24969:199::o;9540:35::-;;;;:::o;11638:102::-;11720:12;;11638:102;:::o;25364:187::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;25471:15:::1;:24:::0;;;;25506:26:::1;:37:::0;25364:187::o;16327:454::-;16470:4;16457:2;-1:-1:-1;;;;;9840:18:0;;9832:27;;;;;;-1:-1:-1;;;;;16491:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16515:10:::1;16491:35:::0;;;;;;;;-1:-1:-1;;16491:51:0::1;16487:222;;16597:100;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;16597:100:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;16597:23:0;::::1;-1:-1:-1::0;16597:23:0;;;:17:::1;:23:::0;;;;;16635:10:::1;16597:63:::0;;;;;;;;;;:100:::1;::::0;16665:5;;16597:67:::1;:100::i;:::-;-1:-1:-1::0;;;;;16559:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16583:10:::1;16559:35:::0;;;;;;;:138;16487:222:::1;16721:30;16735:4;16741:2;16745:5;16721:13;:30::i;:::-;-1:-1:-1::0;16769:4:0::1;::::0;16327:454;-1:-1:-1;;;;;16327:454:0:o;7510:37::-;;;-1:-1:-1;;;7510:37:0;;;;;:::o;8621:82::-;;;-1:-1:-1;;;;;8621:82:0;;:::o;13132:203::-;13300:16;;13274:4;;-1:-1:-1;;;;;13274:4:0;;;13185:7;13261:18;;;:12;:18;;;;;;;13250:4;;;;;13237:18;;;;;13185:7;;13221:106;;13300:16;;13222:58;;13261:18;13222:34;;-1:-1:-1;;8372:54:0;13222:14;:34::i;:::-;:38;;:58::i;:::-;13221:64;;:106::i;:::-;13205:122;;13132:203;:::o;4541:83::-;4607:9;;;;4541:83;:::o;28234:203::-;6717:6;;28336:12;;6717:6;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;28373:56:::1;::::0;;-1:-1:-1;;;28373:56:0;;28410:10:::1;28373:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;28373:36:0;::::1;::::0;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;-1:-1:-1;28373:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28373:56:0;;28234:203;-1:-1:-1;;;28234:203:0:o;22021:394::-;22194:10;22113:4;22176:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22176:58:0;;;;;;;;;;:74;;22239:10;22176:62;:74::i;:::-;22153:10;22135:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22135:38:0;;;;;;;;;;;;:115;;;22266:119;;;;;;22135:38;;22266:119;;;;;;;;;;;-1:-1:-1;22403:4:0;22021:394;;;;:::o;25797:407::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;26010:17:::1;:38:::0;;-1:-1:-1;;;;;26010:38:0;;::::1;-1:-1:-1::0;;;;;;26010:38:0;;::::1;;::::0;;;26059:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26106:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26163:12:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;25797:407::o;28616:198::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;8124:4:::1;28708:16;:40;;28700:61;;;::::0;;-1:-1:-1;;;28700:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28700:61:0;;;;;;;;;;;;;::::1;;28772:15;:34:::0;28616:198::o;9303:32::-;;;;:::o;7843:30::-;;;;:::o;9342:91::-;;;;:::o;7462:41::-;;;-1:-1:-1;;;7462:41:0;;;;;:::o;29546:120::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;29624:24:::1;:34:::0;29546:120::o;23757:403::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;23820:6:::1;::::0;::::1;;23819:7;23811:29;;;::::0;;-1:-1:-1;;;23811:29:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23811:29:0;;;;;;;;;;;;;::::1;;23873:15;23859:10;;:29;;23851:53;;;::::0;;-1:-1:-1;;;23851:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23851:53:0;;;;;;;;;;;;;::::1;;23917:25;23945:22;:20;:22::i;:::-;23917:50;;23978:18;24020:62;24059:22;;24020:34;24042:11;;24020:17;:21;;:34;;;;:::i;:62::-;23978:115;;24106:23;24117:11;24106:10;:23::i;:::-;;24140:12;:10;:12::i;:::-;6748:1;;23757:403::o:0;13343:102::-;13422:15;13343:102;:::o;12199:126::-;12252:7;12279:38;12300:16;;12279;;:20;;:38;;;;:::i;7388:30::-;;;-1:-1:-1;;;7388:30:0;;;;;:::o;8891:68::-;;;-1:-1:-1;;;;;8891:68:0;;:::o;11934:136::-;12045:16;;-1:-1:-1;;;;;12023:17:0;;11996:7;12023:17;;;:12;:17;;;;;;11996:7;;12023:39;;:17;:21;:39::i;:::-;12016:46;;11934:136;;;;:::o;6765:126::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;6846:6:::1;::::0;6827:26:::1;::::0;6846:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;6846:6:0::1;::::0;6827:26:::1;::::0;;;::::1;6864:6;:19:::0;;-1:-1:-1;;;;;;6864:19:0::1;::::0;;6765:126::o;14060:159::-;14105:9;14100:112;14124:12;:19;14120:23;;14100:112;;;14177:12;14190:1;14177:15;;;;;;;;;;;;;;;;;14165:35;;;-1:-1:-1;;;;;;14165:35:0;;;;-1:-1:-1;;;;;14177:15:0;;;;14165:33;;:35;;;;;;;;;;14177:15;;14165:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14145:3:0;;;;;-1:-1:-1;14100:112:0;;-1:-1:-1;14100:112:0;;;14060:159::o;28056:170::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;28182:36:::1;::::0;28150:21:::1;::::0;-1:-1:-1;;;;;28182:27:0;::::1;::::0;:36;::::1;;;::::0;28150:21;;28132:15:::1;28182:36:::0;28132:15;28182:36;28150:21;28182:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6748:1;28056:170:::0;:::o;9262:34::-;;;;:::o;8798:86::-;;;-1:-1:-1;;;;;8798:86:0;;:::o;9216:39::-;;;;:::o;7738:37::-;;;;:::o;6576:79::-;6641:6;;;;;-1:-1:-1;;;;;6641:6:0;;6576:79::o;29252:172::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;29334:18:::1;::::0;::::1;-1:-1:-1::0;;;29334:18:0;;::::1;;:28;;::::0;::::1;;;;29326:52;;;::::0;;-1:-1:-1;;;29326:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29326:52:0;;;;;;;;;;;;;::::1;;29389:18;:27:::0;;;::::1;;-1:-1:-1::0;;;29389:27:0::1;-1:-1:-1::0;;;;29389:27:0;;::::1;::::0;;;::::1;::::0;;29252:172::o;25176:180::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25264:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;25256:53;;;::::0;;-1:-1:-1;;;25256:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25256:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25320:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;25320:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25176:180::o;7425:30::-;;;-1:-1:-1;;;7425:30:0;;;;;:::o;8028:41::-;8067:2;8028:41;:::o;4446:87::-;4518:7;4511:14;;;;;;;;-1:-1:-1;;4511:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4485:13;;4511:14;;4518:7;;4511:14;;4518:7;4511:14;;;;;;;;;;;;;;;;;;;;;;;;9181:28;;;;:::o;9106:31::-;;;;:::o;24168:793::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24298:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;24276:109;;;::::0;;-1:-1:-1;;;24276:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24276:109:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24398:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;24398:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24452:442:::1;;24479:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24479:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24479:24:0::1;-1:-1:-1::0;;;;;24479:24:0;::::1;;::::0;;24452:442:::1;;;24544:12;:19:::0;24566:1:::1;-1:-1:-1::0;24536:51:0::1;;;::::0;;-1:-1:-1;;;24536:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24536:51:0;;;;;;;;;;;;;::::1;;24607:9;24602:281;24626:12;:19:::0;24622:23;::::1;24602:281;;;24694:5;-1:-1:-1::0;;;;;24675:24:0::1;:12;24688:1;24675:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24675:15:0::1;:24;24671:197;;;24742:12;24755:19:::0;;-1:-1:-1;;24755:23:0;;;24742:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24724:12:::1;:15:::0;;-1:-1:-1;;;;;24742:37:0;;::::1;::::0;24737:1;;24724:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;24724:55:0::1;;;;;-1:-1:-1::0;;;;;24724:55:0::1;;;;;;24802:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24802:18:0;;;;;-1:-1:-1;;;;;;24802:18:0::1;::::0;;;;;24843:5:::1;;24671:197;24647:3;;24602:281;;;;24452:442;24911:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;24911:42:0;::::1;::::0;::::1;::::0;;;::::1;24168:793:::0;;:::o;29432:106::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;29506:10:::1;:24:::0;29432:106::o;9440:93::-;;;;:::o;21425:588::-;21581:10;21522:4;21563:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21563:38:0;;;;;;;;;;21616:27;;;21612:237;;21678:10;21701:1;21660:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21660:38:0;;;;;;;;;:42;21612:237;;;21776:61;:8;21807:15;21776:12;:61::i;:::-;21753:10;21735:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21735:38:0;;;;;;;;;:102;21612:237;21887:10;21934:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21864:119:0;;21934:38;;;;;;;;;;;21864:119;;;;;;;;;21887:10;21864:119;;;;;;;;;;;-1:-1:-1;22001:4:0;;21425:588;-1:-1:-1;;;21425:588:0:o;9078:19::-;;;-1:-1:-1;;;;;9078:19:0;;:::o;14227:199::-;14338:4;14320:2;-1:-1:-1;;;;;9840:18:0;;9832:27;;;;;;14360:36:::1;14374:10;14386:2;14390:5;14360:13;:36::i;:::-;-1:-1:-1::0;14414:4:0::1;::::0;14227:199;-1:-1:-1;;;;14227:199:0:o;7962:57::-;;;;;;;;;;;;;;;:::o;7782:54::-;;;;:::o;9144:30::-;;;;:::o;25559:230::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;25697:11:::1;:22:::0;;-1:-1:-1;;;;25697:22:0::1;-1:-1:-1::0;;;25697:22:0;::::1;;;;::::0;;25749:32:::1;25776:4:::0;25749:22:::1;25764:6:::0;8294:28;-1:-1:-1;;8387:38:0::1;;8372:54:::0;;25749:14:::1;:22::i;:::-;:26:::0;::::1;:32::i;:::-;25730:16;:51:::0;-1:-1:-1;;;25559:230:0:o;7334:47::-;;;-1:-1:-1;;;7334:47:0;;;;;:::o;12078:113::-;-1:-1:-1;;;;;12164:19:0;12140:4;12164:19;;;:12;:19;;;;;;;;;12078:113::o;13453:421::-;13536:7;;;13600:138;13624:12;:19;13620:23;;13600:138;;;13665:61;13686:39;13717:7;13686:26;13696:12;13709:1;13696:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13696:15:0;13686:9;:26::i;:39::-;13665:16;;:20;:61::i;:::-;-1:-1:-1;13645:3:0;;13600:138;;;;13764:102;13820:35;13847:7;13820:22;:20;:22::i;:35::-;13764:37;13777:23;:16;13798:1;13777:20;:23::i;:::-;13764:8;;:12;:37::i;:102::-;13748:118;13453:421;-1:-1:-1;;;13453:421:0:o;7605:57::-;;;;:::o;8966:72::-;;;-1:-1:-1;;;;;8966:72:0;;:::o;26212:1836::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;26822:22:::1;26847:65;26903:8:::0;26847:51:::1;26883:14:::0;26847:51;:13;26865:12;26847:17:::1;:31::i;:::-;:35:::0;::::1;:51::i;:65::-;26822:90:::0;-1:-1:-1;26923:23:0::1;26949:87;27009:16:::0;26949:41:::1;26822:90:::0;26968:21;26949:18:::1;:41::i;:87::-;26923:113;;8067:2;27071:13;:29;;:76;;;;;8067:2;27117:14;:30;;27071:76;:121;;;;;8067:2;27164:12;:28;;27071:121;:175;;;;;8067:2;27209:21;:37;;27071:175;:224;;;;;8067:2;27263:16;:32;;27071:224;:265;;;;;8067:2;27312:8;:24;;27071:265;27049:320;;;::::0;;-1:-1:-1;;;27049:320:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27049:320:0;;;;;;;;;;;;;::::1;;8067:2;27390:14;:29;27382:63;;;::::0;;-1:-1:-1;;;27382:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27382:63:0;;;;;;;;;;;;;::::1;;8067:2;27466:15;:30;27458:65;;;::::0;;-1:-1:-1;;;27458:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27458:65:0;;;;;;;;;;;;;::::1;;27536:12;:28:::0;;;27575:9:::1;:26:::0;;;27612:11:::1;:26:::0;;;27649:20:::1;:44:::0;;;27704:15:::1;:34:::0;;;27749:12:::1;:23:::0;;;27797:62:::1;27764:8:::0;27797:44:::1;27587:14:::0;27797:44;27551:13;27626:12;27797:16:::1;:29::i;:62::-;27783:11;:76:::0;;;27927:15:::1;::::0;27901:20:::1;::::0;27885:58:::1;::::0;:37:::1;::::0;:15:::1;:37::i;:58::-;27870:12;:73:::0;27956:14:::1;:32:::0;;;28038:1:::1;27973:15:::0;28021:18:::1;28007:11;;:32;27999:41;;;::::0;::::1;;6748:1;;26212:1836:::0;;;;;;;:::o;11748:178::-;-1:-1:-1;;;;;11884:25:0;;;11852:7;11884:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;11748:178::o;28445:163::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;28524:10:::1;::::0;::::1;-1:-1:-1::0;;;28524:10:0;;::::1;;:25;;::::0;::::1;;;;28516:49;;;::::0;;-1:-1:-1;;;28516:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28516:49:0;;;;;;;;;;;;;::::1;;28576:10;:24:::0;;;::::1;;-1:-1:-1::0;;;28576:24:0::1;-1:-1:-1::0;;;;28576:24:0;;::::1;::::0;;;::::1;::::0;;28445:163::o;7926:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7926:29:0;;-1:-1:-1;7926:29:0;:::o;6899:109::-;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;6972:28:::1;6991:8;6972:18;:28::i;29057:187::-:0;6717:6;;;;;-1:-1:-1;;;;;6717:6:0;6703:10;:20;6695:42;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;-1:-1:-1;;;6695:42:0;;;;;;;;;;;;;;;29144:21:::1;::::0;::::1;-1:-1:-1::0;;;29144:21:0;;::::1;;:33;;::::0;::::1;;;;29136:57;;;::::0;;-1:-1:-1;;;29136:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29136:57:0;;;;;;;;;;;;;::::1;;29204:21;:32:::0;;;::::1;;-1:-1:-1::0;;;29204:32:0::1;-1:-1:-1::0;;;;29204:32:0;;::::1;::::0;;;::::1;::::0;;29057:187::o;9047:24::-;;;-1:-1:-1;;;;;9047:24:0;;:::o;1893:181::-;1951:7;1983:5;;;2007:6;;;;1999:46;;;;;-1:-1:-1;;;1999:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:132;2776:7;2803:39;2807:1;2810;2803:39;;;;;;;;;;;;;;;;;:3;:39::i;2226:226::-;2346:7;2382:12;2374:6;;;;2366:29;;;;-1:-1:-1;;;2366:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2418:5:0;;;2226:226::o;14827:1492::-;-1:-1:-1;;;;;14993:20:0;;14953:4;14993:20;;;:12;:20;;;;;;14953:4;;14993:20;;;:47;;-1:-1:-1;;;;;;15017:23:0;;;;;;:12;:23;;;;;;;;14993:47;15075:27;;14970:70;;-1:-1:-1;;;;15075:27:0;;;;;:46;;;15106:15;15075:46;15053:115;;;;;-1:-1:-1;;;15053:115:0;;;;;;;;;;;;-1:-1:-1;;;15053:115:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15185:36:0;;;;;;:25;:36;;;;;;;;:56;;;;;15226:15;15225:16;15185:56;15181:148;;;15276:24;;15266:6;:34;;15258:59;;;;;-1:-1:-1;;;15258:59:0;;;;;;;;;;;;-1:-1:-1;;;15258:59:0;;;;;;;;;;;;;;;15345:6;;;;15341:87;;;15375:41;15390:6;15398:9;15409:6;15375:14;:41::i;:::-;15368:48;;;;;15341:87;15440:17;15460:28;15471:16;;15460:6;:10;;:28;;;;:::i;:::-;15440:48;;15505:16;:14;:16::i;:::-;15501:59;;;15538:10;:8;:10::i;:::-;-1:-1:-1;;;;;15595:20:0;;;;;;:12;:20;;;;;;:35;;15620:9;15595:24;:35::i;:::-;-1:-1:-1;;;;;15572:20:0;;;;;;:12;:20;;;;;:58;;;;15671:32;15585:6;15693:9;15671:13;:32::i;:::-;:102;;15764:9;15671:102;;;15715:37;15723:6;15731:9;15742;15715:7;:37::i;:::-;-1:-1:-1;;;;;15810:23:0;;;;;;:12;:23;;;;;;15643:130;;-1:-1:-1;15810:70:0;;15643:130;15810:27;:70::i;:::-;-1:-1:-1;;;;;15784:23:0;;;;;;;:12;:23;;;;;:96;;;;15988:16;;15898:118;;;;;;15966:39;;:17;;:21;:39::i;:::-;15898:118;;;;;;;;;;;;;;;16033:14;:12;:14::i;:::-;:28;;;;-1:-1:-1;16051:10:0;;-1:-1:-1;;;16051:10:0;;;;16033:28;16029:259;;;16078:9;:7;:9::i;:::-;-1:-1:-1;;;;;16127:33:0;;;;;;:25;:33;;;;;;;;16126:34;:88;;;;-1:-1:-1;;;;;;16178:36:0;;;;;;:25;:36;;;;;;;;16177:37;16126:88;16104:173;;;16249:12;:10;:12::i;:::-;-1:-1:-1;16307:4:0;;14827:1492;-1:-1:-1;;;;;;14827:1492:0:o;2082:136::-;2140:7;2167:43;2171:1;2174;2167:43;;;;;;;;;;;;;;;;;:3;:43::i;2460:250::-;2518:7;2542:6;2538:47;;-1:-1:-1;2572:1:0;2565:8;;2538:47;2609:5;;;2613:1;2609;:5;:1;2633:5;;;;;:10;2625:56;;;;-1:-1:-1;;;2625:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22993:756;23050:7;23086:15;23118:16;23114:118;;23173:12;;23156:30;;;;;;;23166:5;;23156:30;;;;;;;;;;-1:-1:-1;;23208:12:0;;23201:19;;23114:118;23262:1;23248:11;:15;23244:189;;;23295:12;;:40;;23320:13;;;;23295:16;:40::i;:::-;23280:12;:55;23244:189;;;23383:12;;:38;;23408:11;23383:16;:38::i;:::-;23368:12;:53;23244:189;23449:12;;-1:-1:-1;;;;;;23445:83:0;;;-1:-1:-1;;;;;23491:12:0;:25;23445:83;23574:12;;23559:28;;8294;-1:-1:-1;;8387:38:0;;23559:28;23540:16;:47;23621:15;;23613:23;;23600:10;:36;23647:11;:16;;23662:1;23647:16;;;23698:12;;23681:30;;;;;;;23613:5;;23681:30;;;;;;;;;;-1:-1:-1;;23729:12:0;;22993:756;;;:::o;7016:187::-;-1:-1:-1;;;;;7090:22:0;;7082:31;;;;;;7150:6;;7129:38;;-1:-1:-1;;;;;7129:38:0;;;;7150:6;;;;;7129:38;;;;;7178:6;:17;;-1:-1:-1;;;;;7178:17:0;;;;;-1:-1:-1;;;;;;7178:17:0;;;;;;;;;7016:187::o;2858:225::-;2978:7;3013:12;3006:5;2998:28;;;;-1:-1:-1;;;2998:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:9;3053:1;3049;:5;;;;;;;2858:225;-1:-1:-1;;;;;2858:225:0:o;14434:385::-;14552:4;14569:17;14589:28;14600:16;;14589:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;14649:18:0;;;;;;:12;:18;;;;;;14569:48;;-1:-1:-1;14649:33:0;;14569:48;14649:22;:33::i;:::-;-1:-1:-1;;;;;14628:18:0;;;;;;;:12;:18;;;;;;:54;;;;14712:16;;;;;;;:31;;14733:9;14712:20;:31::i;:::-;-1:-1:-1;;;;;14693:16:0;;;;;;;:12;:16;;;;;;;;;:50;;;;14761:26;;;;;;;14693:16;;14761:26;;;;;;;;;;;;;-1:-1:-1;14807:4:0;;14434:385;-1:-1:-1;;;;14434:385:0:o;12846:278::-;12955:10;12895:4;12929:37;;;:25;:37;;;;;;;;12928:38;:58;;;;-1:-1:-1;12980:6:0;;;;12979:7;12928:58;:82;;;;-1:-1:-1;12999:11:0;;-1:-1:-1;;;12999:11:0;;;;12928:82;:128;;;;;13055:1;13023:29;13039:12;;13023:11;;:15;;:29;;;;:::i;:::-;:33;12928:128;:188;;;;-1:-1:-1;;13100:16:0;;13090:4;13069:27;;;;:12;:27;;;;;;:47;;;12846:278::o;19282:1561::-;9719:6;:13;;-1:-1:-1;;9719:13:0;9728:4;9719:13;;;19370:12:::1;::::0;19354:11:::1;::::0;9719:6;;19354:29:::1;::::0;:11;:15:::1;:29::i;:::-;19331:52;;19396:27;19426:97;19456:15;;19486:26;;19426:15;:97::i;:::-;:134;;19548:12;;19426:134;;;19535:1;19426:134;19648:16;::::0;19623:4:::1;19571:28;19602:27:::0;;;:12:::1;:27;::::0;;;;;19396:164;;-1:-1:-1;19571:28:0;19602:73:::1;::::0;:31:::1;:73::i;:::-;19571:104:::0;-1:-1:-1;19688:23:0::1;19714:90;19791:12:::0;19714:62:::1;19749:26;:19:::0;19773:1:::1;19749:23;:26::i;:::-;19714:20:::0;;:34:::1;:62::i;:90::-;19688:116;;19817:19;19839:101;19927:12;19839:73;19874:37;19895:15;;19874:16;19888:1;19874:9;;:13;;:16;;;;:::i;19839:101::-;19817:123:::0;-1:-1:-1;19953:24:0::1;19980:78;19817:123:::0;19980:51:::1;:20:::0;20015:15;19980:34:::1;:51::i;:78::-;19953:105;;20071:20;20094:58;20137:14;;20094:38;20119:12;;20094:20;:24;;:38;;;;:::i;:58::-;20071:81:::0;-1:-1:-1;20169:19:0;;20165:84:::1;;20205:32;20221:15;20205;:32::i;:::-;20265:15:::0;;20261:105:::1;;20332:21;::::0;20297:57:::1;::::0;20319:11;;-1:-1:-1;;;;;20332:21:0::1;20297;:57::i;:::-;20382:20:::0;;20378:108:::1;;20457:16;::::0;20419:55:::1;::::0;20439:16;;-1:-1:-1;;;;;20457:16:0::1;20419:19;:55::i;:::-;20502:16:::0;;20498:152:::1;;20564:24;::::0;;:12:::1;:24;::::0;;;:74:::1;::::0;20611:12;20564:28:::1;:74::i;:::-;20537:24;::::0;;:12:::1;:24;::::0;;:101;20498:152:::1;20667:168;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;9755:6:0;:14;;-1:-1:-1;;9755:14:0;;;-1:-1:-1;;;;;19282:1561:0:o;12449:389::-;-1:-1:-1;;;;;12562:18:0;;12536:4;12562:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;12584:16:0;;;;;;:12;:16;;;;;;;;12562:38;12558:273;;;-1:-1:-1;12624:5:0;12617:12;;12558:273;12651:21;;-1:-1:-1;;;12651:21:0;;;;12647:184;;;-1:-1:-1;12696:4:0;12689:11;;12647:184;-1:-1:-1;;;;;12741:31:0;;;;;;:25;:31;;;;;;;;;:77;;-1:-1:-1;;;;;;12789:29:0;;;;;;:25;:29;;;;;;;;12741:77;12733:86;;;;20851:566;21013:11;;-1:-1:-1;;;;;21039:36:0;;20974:7;21039:36;;;:25;:36;;;;;;20974:7;;21013:11;21039:36;;21035:65;;;-1:-1:-1;21088:12:0;;21035:65;21161:14;;21113:17;;21133:43;;:23;:9;21147:8;21133:13;:23::i;:43::-;21240:4;21219:27;;;;:12;:27;;;;;;21113:63;;-1:-1:-1;21219:66:0;;21113:63;21219:31;:66::i;:::-;21210:4;21189:27;;;;:12;:27;;;;;:96;;;;21347:16;;-1:-1:-1;;;;;21301:64:0;;;;;21333:31;;:9;;:13;:31::i;:::-;21301:64;;;;;;;;;;;;;;;21385:24;:9;21399;21385:13;:24::i;:::-;21378:31;20851:566;-1:-1:-1;;;;;;20851:566:0:o;12333:108::-;12404:10;;12418:15;-1:-1:-1;12404:29:0;12333:108;:::o;22672:313::-;22715:6;;;;22710:268;;22738:25;22766:22;:20;:22::i;:::-;22738:50;;22803:18;22849:62;22888:22;;22849:34;22871:11;;22849:17;:21;;:34;;;;:::i;:62::-;22803:123;;22943:23;22954:11;22943:10;:23::i;22710:268::-;22672:313::o;16789:969::-;16863:12;16878:27;:20;16903:1;16878:24;:27::i;:::-;16863:42;-1:-1:-1;16916:17:0;16936:30;:20;16863:42;16936:24;:30::i;:::-;16983:18;;16916:50;;-1:-1:-1;;;;16983:18:0;;;;16979:772;;;17043:21;17081:40;17101:4;17115;17081:19;:40::i;:::-;17138:18;17159:41;:21;17185:14;17159:25;:41::i;:::-;17138:62;;17217:36;17231:9;17242:10;17217:13;:36::i;:::-;17275:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:772;;;;;17383:8;;17376:41;;;-1:-1:-1;;;17376:41:0;;17411:4;17376:41;;;;;;17351:22;;-1:-1:-1;;;;;17383:8:0;;17376:26;;:41;;;;;;;;;;;;;;17383:8;17376:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17376:41:0;;-1:-1:-1;17434:42:0;17456:4;17470;17434:21;:42::i;:::-;17521:8;;17514:41;;;-1:-1:-1;;;17514:41:0;;17549:4;17514:41;;;;;;17493:18;;17514:93;;17578:14;;-1:-1:-1;;;;;17521:8:0;;;;17514:26;;:41;;;;;;;;;;;;;;;17521:8;17514:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17514:41:0;;:45;:93::i;:::-;17493:114;;17624:43;17645:9;17656:10;17624:20;:43::i;:::-;17689:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:772;;16789:969;;;:::o;18832:442::-;18955:16;;;18969:1;18955:16;;;;;;;;;18931:21;;18955:16;;;;;;;;;;-1:-1:-1;18955:16:0;18931:40;;19000:4;18982;18987:1;18982:7;;;;;;;;-1:-1:-1;;;;;18982:23:0;;;:7;;;;;;;;;;:23;;;;19026:6;;:13;;;-1:-1:-1;;;19026:13:0;;;;:6;;;;;:11;;:13;;;;;18982:7;;19026:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19026:13:0;19016:7;;:4;;19021:1;;19016:7;;;;;;-1:-1:-1;;;;;19016:23:0;;;:7;;;;;;;;;:23;19060:8;;19050:7;;19060:8;;;19050:4;;19055:1;;19050:7;;;;;;;;;;;:18;-1:-1:-1;;;;;19050:18:0;;;-1:-1:-1;;;;;19050:18:0;;;;;19081:6;;;;;;;;;-1:-1:-1;;;;;19081:6:0;-1:-1:-1;;;;;19081:60:0;;19156:11;19182:1;19198:4;19217:8;19240:15;19081:185;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19081:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18832:442;;;:::o;18416:408::-;18537:16;;;18551:1;18537:16;;;;;;;;18513:21;;18537:16;;;;;;;;;;-1:-1:-1;18537:16:0;18513:40;;18582:4;18564;18569:1;18564:7;;;;;;;;-1:-1:-1;;;;;18564:23:0;;;:7;;;;;;;;;;:23;;;;18608:6;;:13;;;-1:-1:-1;;;18608:13:0;;;;:6;;;;;:11;;:13;;;;;18564:7;;18608:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18608:13:0;18598:7;;:4;;18603:1;;18598:7;;;;;;-1:-1:-1;;;;;18598:23:0;;;:7;;;;;;;;;;:23;;;;18634:6;;:182;;-1:-1:-1;;;18634:182:0;;;;;;;;:6;:182;;;;;;;;;;;;;18790:15;18634:182;;;;;;;;;;;;;;;;;;;;;:6;;;;;:57;;18706:11;;18634:6;;18748:4;;18767:8;;18634:182;;;;;;;;;;;;;;;;:6;:182;;;;;;;;;;;;;;;;17766:294;17850:6;;17994:17;;17850:202;;;-1:-1:-1;;;17850:202:0;;17916:4;17850:202;;;;;;;;;;:6;:202;;;;;;;;;;-1:-1:-1;;;;;17994:17:0;;;17850:202;;;;18026:15;17850:202;;;;;;:6;;;;;:22;;17881:11;;17850:202;;;;;;;;;;;;;;;17881:11;17850:6;:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;17766:294:0:o;18068:340::-;18171:6;;18233:8;;18342:17;;18171:229;;;-1:-1:-1;;;18171:229:0;;18213:4;18171:229;;;;-1:-1:-1;;;;;18233:8:0;;;18171:229;;;;;;;;;;;;;;;;:6;:229;;;;;;;;;;;;18342:17;;;18171:229;;;;18374:15;18171:229;;;;;;:6;;;;;:19;;:229;;;;;;;;;;;;;;;;:6;:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://78731393944627dbfaa4cf8b4a3e68805c9f01eaf3276475cb1ca04ba63d5b01