Contract
0x8e002437783e28C7baB9EC67e0DC013221F08bd0
1
Contract Overview
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Lychee
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan on 2023-01-18 */ pragma solidity 0.8.3; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: Context.sol pragma solidity 0.8.3; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: Ownable.sol pragma solidity 0.8.3; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: IUniswapV2Factory.sol pragma solidity 0.8.3; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: IUniswapV2Router01.sol pragma solidity 0.8.3; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: IUniswapV2Router02.sol pragma solidity 0.8.3; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: IERC20.sol pragma solidity 0.8.3; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: IERC20MetaData.sol pragma solidity 0.8.3; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: LycheeMetaData.sol pragma solidity 0.8.3; abstract contract LycheeMetaData is IERC20Metadata { /** *@dev The name of the token managed by the this smart contract. */ string private _name = "Lychee Finance"; /** *@dev The symbol of the token managed by the this smart contract. */ string private _symbol = "LYCHEE"; /** *@dev The decimals of the token managed by the this smart contract. */ uint8 private _decimals = 18; /** *@dev It returns the name of the token. */ function name() public view override returns (string memory) { return _name; } /** *@dev It returns the symbol of the token. */ function symbol() public view override returns (string memory) { return _symbol; } /** *@dev It returns the decimal of the token. */ function decimals() public view override returns (uint8) { return _decimals; } } // File: Lychee.sol pragma solidity 0.8.3; contract Lychee is Ownable, LycheeMetaData { event SwapAndLiquefy( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapAndLiquefyStateUpdate(bool state); /** *@dev Adds the Address library utility methods to the type {address}. */ using Address for address; /** *@dev the maximum uint256 value in solidity, which is used to convert the total supply of tokens to reflections for the reward mechanism. */ uint256 private constant MAX_INT_VALUE = type(uint256).max; uint256 private _tokenSupply = 100000000 * 10**6 * 10**9; /** *@dev Convert the total supply to reflections with perfect rouding using the maximum uint256 as the numerator. */ uint256 private _reflectionSupply = (MAX_INT_VALUE - (MAX_INT_VALUE % _tokenSupply)); /** *@dev The total amount of fees paid by the users. */ uint256 private _totalTokenFees; /** *@dev The transaction fee users will incur upon selling the token. 5 percent of the principal. */ uint8 public taxFee = 5; /** *@dev This is used to save the previous fee. */ uint8 private _previousTaxFee = taxFee; /** *@dev The liquidity fee users will incur upon selling tokens. 5 percent of the principal. */ uint8 public liquidityFee = 5; /** *@dev This is used to save the previous fee. */ uint8 private _previousLiquidityFee = liquidityFee; /** *@dev The wallet which holds the account balance in reflections. */ mapping(address => uint256) private _reflectionBalance; /** *@dev The wallet which holds the balance for excluded accounts (accounts that do not receive rewards). */ mapping(address => uint256) private _tokenBalance; /** *@dev Accounts which are excluded from rewards */ mapping(address => bool) private _isExcludedFromRewards; /** *@dev Accounts which are excluded from paying txs fees. */ mapping(address => bool) private _isExcludedFromFees; /** *@dev Accounts which are excluded from rewards */ address[] private _excluded; /** *@dev Contains the allowances a parent account has provided to children accounts in reflections; */ mapping(address => mapping(address => uint256)) private _allowances; /** *@dev A maximum amount that can be transfered at once. Which is equivalent to 0.5% of the total supply. */ uint256 public maxTxAmount = 500000 * 10**6 * 10**9; /** *@dev Number of tokens needed to provide liquidity to the pool */ uint256 private _numberTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9; /** *@dev State indicating that we are in a liquefaction process to prevent stacking liquefaction events. */ bool swapAndLiquifyingInProgress; /** *@dev Variable to allow the owner to enable or disable liquefaction events */ bool public isSwapAndLiquifyingEnabled = false; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2WETHPair; constructor(address routerAddress) { /** *@dev Gives all the reflection to the deplyer (the first owner) of the contract upon creation. */ _reflectionBalance[_msgSender()] = _reflectionSupply; // Tells solidity this address follows the IUniswapV2Router interface IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress); // Creates a pair between our token and WETH and saves the address in a state variable uniswapV2WETHPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // Saves the UniswapV2Router in a state variable uniswapV2Router = _uniswapV2Router; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; emit Transfer(address(0), _msgSender(), _reflectionSupply); } /** *@dev Tell the contract we are swapping */ modifier lockTheSwap { swapAndLiquifyingInProgress = true; _; swapAndLiquifyingInProgress = false; } /** *@dev returns the total supply of tokens. */ function totalSupply() external view override returns (uint256) { return _tokenSupply; } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 totalReflection = _reflectionSupply; uint256 totalTokens = _tokenSupply; // Iterates to all excluded accounts for (uint256 i = 0; i < _excluded.length; i++) { if ( // Makes sure that no single account has more tokens than the total possible amount of tokens. And does the same for reflections. _reflectionBalance[_excluded[i]] > totalReflection || _tokenBalance[_excluded[i]] > totalTokens ) return (_reflectionSupply, _tokenSupply); // Remove the excluded accounts reflections when calculating the current supply. totalReflection = totalReflection - _reflectionBalance[_excluded[i]]; // Remove the excluded accounts tokens when calculating the current supply. totalTokens = totalTokens - _tokenBalance[_excluded[i]]; } // Makes sure the least amount of tokens possible is 1 token. return (_reflectionSupply / _tokenSupply) > totalReflection ? (_reflectionSupply, _tokenSupply) : (totalReflection, totalTokens); } /** *@dev Confirms if an account is excluded from rewards */ function isExcludedFromRewards(address account) public view returns (bool) { return _isExcludedFromRewards[account]; } function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } /** *@dev Returns the rate betweenthe total reflections and the total tokens. */ function _getRate() private view returns (uint256) { (uint256 currentReflections, uint256 currentTokens) = _getCurrentSupply(); return currentReflections / currentTokens; } /** *@dev Converts an amount of tokens to reflections using the current rate. */ function _reflectionFromToken(uint256 amount) private view returns (uint256) { require( _tokenSupply >= amount, "You cannot own more tokens than the total token supply" ); return amount * _getRate(); } /** *@dev Converts an amount of reflections to tokens using the current rate. */ function _tokenFromReflection(uint256 reflectionAmount) private view returns (uint256) { require( _reflectionSupply >= reflectionAmount, "Cannot have a personal reflection amount larger than total reflection" ); return reflectionAmount / _getRate(); } /** *@dev returns the total tokens a user holds. It first finds the reflections and converts to tokens to reflect the rewards the user has accrued over time. * if the account does not receive rewards. It returns the balance from the token balance. */ function balanceOf(address account) public view override returns (uint256) { return _isExcludedFromRewards[account] ? _tokenBalance[account] : _tokenFromReflection(_reflectionBalance[account]); } function totalFees() external view returns (uint256) { return _totalTokenFees; } /** *@dev Excluded an account from getting rewards. */ function excludeFromReward(address account) external onlyOwner() { require( !_isExcludedFromRewards[account], "This account is already excluded from receiving rewards." ); // If the account has reflections (means it has rewards), convert it to tokens. if (_reflectionBalance[account] > 0) { _tokenBalance[account] = _tokenFromReflection( _reflectionBalance[account] ); } _isExcludedFromRewards[account] = true; _excluded.push(account); } function includeInRewards(address account) external onlyOwner() { require( _isExcludedFromRewards[account], "This account is already receiving rewards." ); // Iterate to all accounts until we found the desired account. for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { // Remove the account from the excluded array by replacing it with the latest account in the array _excluded[i] = _excluded[_excluded.length - 1]; // Remove it's token balance. Because now he will receive reflections. _tokenBalance[account] = 0; _isExcludedFromRewards[account] = false; // Remove the duplicate last account to keep this a unique set. _excluded.pop(); // Stop the loop. break; } } } function excludeFromFees(address account) external onlyOwner() { _isExcludedFromFees[account] = true; } function includeInFees(address account) external onlyOwner() { _isExcludedFromFees[account] = false; } /** *@dev It allows a non excluded account to airdrop to other users. */ function deliver(uint256 amount) public { address sender = _msgSender(); require( !_isExcludedFromRewards[sender], "Accounts without rewards cannot do an air drop" ); uint256 reflectionAmount = _reflectionFromToken(amount); _reflectionBalance[sender] = _reflectionBalance[sender] - reflectionAmount; _reflectionSupply -= reflectionAmount; _totalTokenFees += amount; } /** *@dev Updates the tax fee. Only the owner can use it. */ function setTaxFeePercent(uint8 fee) external onlyOwner() { taxFee = fee; } /** *@dev Updates the liquidity fee. Only the owner can use it. */ function setLiquidityFeePercent(uint8 fee) external onlyOwner() { liquidityFee = fee; } /** *@dev Removes all fees and saves them to be reinstated at a later date. */ function removeAllFees() private { if (taxFee == 0 && liquidityFee == 0) return; _previousTaxFee = taxFee; _previousLiquidityFee = liquidityFee; taxFee = 0; liquidityFee = 0; } /** *@dev Restores the fees to their previous values. */ function restoreAllFees() private { taxFee = _previousTaxFee; liquidityFee = _previousLiquidityFee; } /** *@dev Update the maximum transfer amount. Calculate sit from a percentage amount. Only the owner of the contract can call it. */ function setMaxTransferAmount(uint256 percent) external onlyOwner() { maxTxAmount = (_tokenSupply * percent) / 100; } /** *@dev Gives the owner of the contract control if the logic to add liquidity to the pool is enabled or not. */ function setSwapAndLiquifyingState(bool state) external onlyOwner() { isSwapAndLiquifyingEnabled = state; emit SwapAndLiquefyStateUpdate(state); } /** *@dev Calculates a fee final amount based on a ratio. *important This funciton only works with values based on token supply and NOT reflection supply. */ function _calculateFee(uint256 amount, uint8 fee) private pure returns (uint256) { return (amount * fee) / 100; } /** *@dev Returns the final amount for the tax. *important This function only works with values based on token supply and NOT reflection supply. */ function _calculateTaxFee(uint256 amount) private view returns (uint256) { return _calculateFee(amount, taxFee); } /** *@dev Returns the final amount for the liquidity tax. *important This function only works with values based on token supply and NOT reflection supply. */ function _calculateLiquidityFee(uint256 amount) private view returns (uint256) { return _calculateFee(amount, liquidityFee); } /** *@dev Updates the value of the total fees paid and reduces the reflection supply to reward all holders. */ function _reflectFee(uint256 tokenFee) private { _reflectionSupply -= _reflectionFromToken(tokenFee); _totalTokenFees += tokenFee; } /** *@dev Stores the liquidity fee in the contract's address */ function _takeLiquidity(uint256 amount) private { _reflectionBalance[address(this)] = _reflectionBalance[address(this)] + _reflectionFromToken(amount); if (_isExcludedFromRewards[address(this)]) _tokenBalance[address(this)] = _tokenBalance[address(this)] + amount; } /** *@dev This is used to recieve ETH from uniswapv2router when swaping. */ receive() external payable {} // Transfer between Excluded -> Not Excluded function _transferFromExcluded( address sender, address recipient, uint256 amount ) private { // Because this account comes from a excluded account. We need to reduce its balance in tokens and reflections. _tokenBalance[sender] = _tokenBalance[sender] - amount; _reflectionBalance[sender] = _reflectionBalance[sender] - _reflectionFromToken(amount); // Calculates transaction fee uint256 tTax = _calculateTaxFee(amount); // Calculates the liquidity fee uint256 lFee = _calculateLiquidityFee(amount); uint256 tokenFinalAmount = amount - tTax - lFee; uint256 reflectionFinalAmount = _reflectionFromToken(amount) - _reflectionFromToken(tTax) - _reflectionFromToken(lFee); // Since the recipient is not excluded. We only need to update its reflection balance. _reflectionBalance[recipient] = _reflectionBalance[recipient] + reflectionFinalAmount; _takeLiquidity(lFee); _reflectFee(tTax); emit Transfer(sender, recipient, tokenFinalAmount); } // Transfer between Not Exluded -> Excluded function _transferToExcluded( address sender, address recipient, uint256 amount ) private { // Because this account comes from a non excluded account. We only need to reduce it's reflections. _reflectionBalance[sender] = _reflectionBalance[sender] - _reflectionFromToken(amount); // Calculates transaction fee uint256 tTax = _calculateTaxFee(amount); // Calculates the liquidity fee uint256 lFee = _calculateLiquidityFee(amount); uint256 tokenFinalAmount = amount - tTax - lFee; uint256 reflectionFinalAmount = _reflectionFromToken(amount) - _reflectionFromToken(tTax) - _reflectionFromToken(lFee); // Since the recipient is excluded. We need to update both his/her reflections and tokens. _tokenBalance[recipient] = _tokenBalance[recipient] + tokenFinalAmount; _reflectionBalance[recipient] = _reflectionBalance[recipient] + reflectionFinalAmount; _takeLiquidity(lFee); _reflectFee(tTax); emit Transfer(sender, recipient, tokenFinalAmount); } // Transfer between Not Exluded -> Not Excluded function _transferStandard( address sender, address recipient, uint256 amount ) private { // Because this account comes from a non excluded account. We only need to reduce it's reflections. _reflectionBalance[sender] = _reflectionBalance[sender] - _reflectionFromToken(amount); // Calculates transaction fee uint256 tTax = _calculateTaxFee(amount); // Calculates the liquidity fee uint256 lFee = _calculateLiquidityFee(amount); uint256 tokenFinalAmount = amount - tTax - lFee; uint256 reflectionFinalAmount = _reflectionFromToken(amount) - _reflectionFromToken(tTax) - _reflectionFromToken(lFee); // Since the recipient is also not excluded. We only need to update his reflections. _reflectionBalance[recipient] = _reflectionBalance[recipient] + reflectionFinalAmount; _takeLiquidity(lFee); _reflectFee(tTax); emit Transfer(sender, recipient, tokenFinalAmount); } // Transfer between Exluded -> Excluded function _transferBothExcluded( address sender, address recipient, uint256 amount ) private { // Because this account comes from a excluded account to an excluded. We only to reduce it's reflections and tokens. _tokenBalance[sender] = _tokenBalance[sender] - amount; _reflectionBalance[sender] = _reflectionBalance[sender] - _reflectionFromToken(amount); // Calculates transaction fee uint256 tTax = _calculateTaxFee(amount); // Calculates the liquidity fee uint256 lFee = _calculateLiquidityFee(amount); uint256 tokenFinalAmount = amount - tTax - lFee; uint256 reflectionFinalAmount = _reflectionFromToken(amount) - _reflectionFromToken(tTax) - _reflectionFromToken(lFee); // Since the recipient is also excluded. We need to update his reflections and tokens. _tokenBalance[recipient] = _tokenBalance[recipient] + tokenFinalAmount; _reflectionBalance[recipient] = _reflectionBalance[recipient] + reflectionFinalAmount; _takeLiquidity(lFee); _reflectFee(tTax); emit Transfer(sender, recipient, tokenFinalAmount); } /** *@dev Allows a user to transfer his reflections to another user. It taxes the sender by the tax fee while inflating the all tokens value. */ function _transferToken( address sender, address recipient, uint256 amount, bool removeFees ) private { // If this is a feeless transaction. Remove all fees and store them. if (removeFees) removeAllFees(); if ( _isExcludedFromRewards[sender] && !_isExcludedFromRewards[recipient] ) { _transferFromExcluded(sender, recipient, amount); } else if ( !_isExcludedFromRewards[sender] && _isExcludedFromRewards[recipient] ) { _transferToExcluded(sender, recipient, amount); } else if ( !_isExcludedFromRewards[sender] && !_isExcludedFromRewards[recipient] ) { _transferStandard(sender, recipient, amount); } else if ( _isExcludedFromRewards[sender] && _isExcludedFromRewards[recipient] ) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } // Restores all fees if they were disabled. if (removeFees) restoreAllFees(); } /** *@dev buys ETH with tokens stored in this contract */ function _swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } /** *@dev Adds equal amount of eth and tokens to the ETH liquidity pool */ function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{ value: ethAmount }( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _swapAndLiquefy() private lockTheSwap { // split the contract token balance into halves uint256 half = _numberTokensSellToAddToLiquidity / 2; uint256 otherHalf = _numberTokensSellToAddToLiquidity - half; uint256 initialETHContractBalance = address(this).balance; // Buys ETH at current token price _swapTokensForEth(half); // This is to make sure we are only using ETH derived from the liquidity fee uint256 ethBought = address(this).balance - initialETHContractBalance; // Add liquidity to the pool _addLiquidity(otherHalf, ethBought); emit SwapAndLiquefy(half, ethBought, otherHalf); } /** *@dev This function first adds liquidity to the pool, then transfers tokens between accounts */ function _transfer( address sender, address recipient, uint256 amount ) private { require( sender != address(0), "ERC20: Sender cannot be the zero address" ); require( recipient != address(0), "ERC20: Recipient cannot be the zero address" ); require(amount > 0, "Transfer amount must be greater than zero"); if (sender != owner() && recipient != owner()) require( amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // Condition 1: Make sure the contract has the enough tokens to liquefy // Condition 2: We are not in a liquefication event // Condition 3: Liquification is enabled // Condition 4: It is not the uniswapPair that is sending tokens if ( balanceOf(address(this)) >= _numberTokensSellToAddToLiquidity && !swapAndLiquifyingInProgress && isSwapAndLiquifyingEnabled && sender != uniswapV2WETHPair ) _swapAndLiquefy(); _transferToken( sender, recipient, amount, _isExcludedFromFees[sender] || _isExcludedFromFees[recipient] ); } /** *@dev Gives allowance to an account */ function _approve( address owner, address beneficiary, uint256 amount ) private { require( beneficiary != address(0), "The burn address is not allowed to receive approval for allowances." ); require( owner != address(0), "The burn address is not allowed to approve allowances." ); _allowances[owner][beneficiary] = amount; emit Approval(owner, beneficiary, amount); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address beneficiary, uint256 amount) public override returns (bool) { _approve(_msgSender(), beneficiary, amount); return true; } /** *@dev It allows an account to transfer it's allowance to any other account; */ function transferFrom( address provider, address beneficiary, uint256 amount ) public override returns (bool) { _transfer(provider, beneficiary, amount); _approve( provider, _msgSender(), _allowances[provider][_msgSender()] - amount ); return true; } /** *@dev Shows the allowance of a beneficiary in tokens. */ function allowance(address owner, address beneficiary) public view override returns (uint256) { return _allowances[owner][beneficiary]; } /** *@dev Increases the allowance of a beneficiary */ function increaseAllowance(address beneficiary, uint256 amount) external returns (bool) { _approve( _msgSender(), beneficiary, _allowances[_msgSender()][beneficiary] + amount ); return true; } /** *@dev Decreases the allowance of a beneficiary */ function decreaseAllowance(address beneficiary, uint256 amount) external returns (bool) { _approve( _msgSender(), beneficiary, _allowances[_msgSender()][beneficiary] - amount ); return true; } }
[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquefy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SwapAndLiquefyStateUpdate","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapAndLiquifyingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxTransferAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapAndLiquifyingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2WETHPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526040518060400160405280600e81526020017f4c79636865652046696e616e636500000000000000000000000000000000000081525060019080519060200190620000519291906200069b565b506040518060400160405280600681526020017f4c59434845450000000000000000000000000000000000000000000000000000815250600290805190602001906200009f9291906200069b565b506012600360006101000a81548160ff021916908360ff16021790555069152d02c7e14af68000006004556004547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620000fa9190620008a9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001279190620007fa565b6005556005600760006101000a81548160ff021916908360ff160217905550600760009054906101000a900460ff16600760016101000a81548160ff021916908360ff1602179055506005600760026101000a81548160ff021916908360ff160217905550600760029054906101000a900460ff16600760036101000a81548160ff021916908360ff160217905550681b1ae4d6e2ef500000600e55681b1ae4d6e2ef500000600f556000601060016101000a81548160ff021916908315150217905550348015620001f857600080fd5b50604051620055e3380380620055e383398181016040528101906200021e919062000762565b6000620002306200066a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060055460086000620002e56200066a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036f57600080fd5b505afa15801562000384573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003aa919062000762565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040d57600080fd5b505afa15801562000422573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000448919062000762565b6040518363ffffffff1660e01b815260040162000467929190620007b0565b602060405180830381600087803b1580156200048257600080fd5b505af115801562000497573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bd919062000762565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600b6000620005406200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005f96200066a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040516200065a9190620007dd565b60405180910390a3505062000988565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006a99062000873565b90600052602060002090601f016020900481019282620006cd576000855562000719565b82601f10620006e857805160ff191683800117855562000719565b8280016001018555821562000719579182015b8281111562000718578251825591602001919060010190620006fb565b5b5090506200072891906200072c565b5090565b5b80821115620007475760008160009055506001016200072d565b5090565b6000815190506200075c816200096e565b92915050565b6000602082840312156200077557600080fd5b600062000785848285016200074b565b91505092915050565b620007998162000835565b82525050565b620007aa8162000869565b82525050565b6000604082019050620007c760008301856200078e565b620007d660208301846200078e565b9392505050565b6000602082019050620007f460008301846200079f565b92915050565b6000620008078262000869565b9150620008148362000869565b9250828210156200082a5762000829620008e1565b5b828203905092915050565b6000620008428262000849565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200088c57607f821691505b60208210811415620008a357620008a26200093f565b5b50919050565b6000620008b68262000869565b9150620008c38362000869565b925082620008d657620008d562000910565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620009798162000835565b81146200098557600080fd5b50565b60805160601c60a05160601c614c05620009de60003960008181610ab3015261213a0152600081816108df015281816127f0015281816129060152818161292d015281816129c901526129f00152614c056000f3fe6080604052600436106101e75760003560e01c806370a0823111610102578063a071dcf411610095578063cb3b098611610064578063cb3b098614610715578063dd62ed3e1461073e578063e57f14e11461077b578063f2fde38b146107a4576101ee565b8063a071dcf414610647578063a457c2d714610672578063a9059cbb146106af578063b609995e146106ec576101ee565b80638da5cb5b116100d15780638da5cb5b1461059d5780639381f6fd146105c857806395d89b41146105f157806398118cb41461061c576101ee565b806370a08231146104f5578063715018a6146105325780638bf55409146105495780638c0b5e2214610572576101ee565b8063313ce5671161017a5780633cd44b8b116101495780633cd44b8b1461043b5780634b9123ae146104665780634fbee1931461048f57806352390c02146104cc576101ee565b8063313ce5671461037f57806331ff412e146103aa57806339509351146103d55780633bd5d17314610412576101ee565b80631694505e116101b65780631694505e146102c357806316a2f82a146102ee57806318160ddd1461031757806323b872dd14610342576101ee565b806306fdde03146101f3578063095ea7b31461021e5780630e8322731461025b57806313114a9d14610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b506102086107cd565b6040516102159190614180565b60405180910390f35b34801561022a57600080fd5b5061024560048036038101906102409190613ce9565b61085f565b604051610252919061414a565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613c0c565b61087d565b60405161028f919061414a565b60405180910390f35b3480156102a457600080fd5b506102ad6108d3565b6040516102ba9190614342565b60405180910390f35b3480156102cf57600080fd5b506102d86108dd565b6040516102e59190614165565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190613c0c565b610901565b005b34801561032357600080fd5b5061032c6109d8565b6040516103399190614342565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190613c9a565b6109e2565b604051610376919061414a565b60405180910390f35b34801561038b57600080fd5b50610394610a9a565b6040516103a191906143ee565b60405180910390f35b3480156103b657600080fd5b506103bf610ab1565b6040516103cc91906140ce565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190613ce9565b610ad5565b604051610409919061414a565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613d4e565b610b81565b005b34801561044757600080fd5b50610450610cec565b60405161045d919061414a565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613dc6565b610cff565b005b34801561049b57600080fd5b506104b660048036038101906104b19190613c0c565b610d99565b6040516104c3919061414a565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613c0c565b610def565b005b34801561050157600080fd5b5061051c60048036038101906105179190613c0c565b61108a565b6040516105299190614342565b60405180910390f35b34801561053e57600080fd5b50610547611172565b005b34801561055557600080fd5b50610570600480360381019061056b9190613d4e565b6112ac565b005b34801561057e57600080fd5b5061058761134b565b6040516105949190614342565b60405180910390f35b3480156105a957600080fd5b506105b2611351565b6040516105bf91906140ce565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613dc6565b61137a565b005b3480156105fd57600080fd5b50610606611414565b6040516106139190614180565b60405180910390f35b34801561062857600080fd5b506106316114a6565b60405161063e91906143ee565b60405180910390f35b34801561065357600080fd5b5061065c6114b9565b60405161066991906143ee565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190613ce9565b6114cc565b6040516106a6919061414a565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613ce9565b611578565b6040516106e3919061414a565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613c0c565b611596565b005b34801561072157600080fd5b5061073c60048036038101906107379190613d25565b611964565b005b34801561074a57600080fd5b5061076560048036038101906107609190613c5e565b611a34565b6040516107729190614342565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d9190613c0c565b611abb565b005b3480156107b057600080fd5b506107cb60048036038101906107c69190613c0c565b611b92565b005b6060600180546107dc90614631565b80601f016020809104026020016040519081016040528092919081815260200182805461080890614631565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061087361086c611d3b565b8484611d43565b6001905092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600654905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610909611d3b565b73ffffffffffffffffffffffffffffffffffffffff16610927611351565b73ffffffffffffffffffffffffffffffffffffffff161461097d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610974906142a2565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454905090565b60006109ef848484611f0e565b610a8f846109fb611d3b565b84600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a45611d3b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a8a919061453f565b611d43565b600190509392505050565b6000600360009054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610b77610ae2611d3b565b8484600d6000610af0611d3b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b72919061445e565b611d43565b6001905092915050565b6000610b8b611d3b565b9050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190614302565b60405180910390fd5b6000610c2583612248565b905080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c72919061453f565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060056000828254610cc7919061453f565b925050819055508260066000828254610ce0919061445e565b92505081905550505050565b601060019054906101000a900460ff1681565b610d07611d3b565b73ffffffffffffffffffffffffffffffffffffffff16610d25611351565b73ffffffffffffffffffffffffffffffffffffffff1614610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d72906142a2565b60405180910390fd5b80600760026101000a81548160ff021916908360ff16021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610df7611d3b565b73ffffffffffffffffffffffffffffffffffffffff16610e15611351565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906142a2565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90614322565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610fcc57610f88600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a9565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661112a57611125600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a9565b61116b565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b9050919050565b61117a611d3b565b73ffffffffffffffffffffffffffffffffffffffff16611198611351565b73ffffffffffffffffffffffffffffffffffffffff16146111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e5906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112b4611d3b565b73ffffffffffffffffffffffffffffffffffffffff166112d2611351565b73ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f906142a2565b60405180910390fd5b60648160045461133891906144e5565b61134291906144b4565b600e8190555050565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611382611d3b565b73ffffffffffffffffffffffffffffffffffffffff166113a0611351565b73ffffffffffffffffffffffffffffffffffffffff16146113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906142a2565b60405180910390fd5b80600760006101000a81548160ff021916908360ff16021790555050565b60606002805461142390614631565b80601f016020809104026020016040519081016040528092919081815260200182805461144f90614631565b801561149c5780601f106114715761010080835404028352916020019161149c565b820191906000526020600020905b81548152906001019060200180831161147f57829003601f168201915b5050505050905090565b600760029054906101000a900460ff1681565b600760009054906101000a900460ff1681565b600061156e6114d9611d3b565b8484600d60006114e7611d3b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611569919061453f565b611d43565b6001905092915050565b600061158c611585611d3b565b8484611f0e565b6001905092915050565b61159e611d3b565b73ffffffffffffffffffffffffffffffffffffffff166115bc611351565b73ffffffffffffffffffffffffffffffffffffffff1614611612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611609906142a2565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590614262565b60405180910390fd5b60005b600c80549050811015611960578173ffffffffffffffffffffffffffffffffffffffff16600c82815481106116ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561194d57600c6001600c8054905061175a919061453f565b81548110611791577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106117f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c805480611913577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611960565b808061195890614663565b9150506116a1565b5050565b61196c611d3b565b73ffffffffffffffffffffffffffffffffffffffff1661198a611351565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906142a2565b60405180910390fd5b80601060016101000a81548160ff0219169083151502179055507f238b16f74c3173bd38bd6343be6d06dabfce5528ac681527198f7f95de0e2a4b81604051611a29919061414a565b60405180910390a150565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac3611d3b565b73ffffffffffffffffffffffffffffffffffffffff16611ae1611351565b73ffffffffffffffffffffffffffffffffffffffff1614611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906142a2565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b9a611d3b565b73ffffffffffffffffffffffffffffffffffffffff16611bb8611351565b73ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c05906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c75906141c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa906141e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90614222565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f019190614342565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f75906141a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614202565b60405180910390fd5b60008111612031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612028906142c2565b60405180910390fd5b612039611351565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120a75750612077611351565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120f257600e548111156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614282565b60405180910390fd5b5b600f546120fe3061108a565b101580156121195750601060009054906101000a900460ff16155b80156121315750601060019054906101000a900460ff165b801561218957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156121975761219661230a565b5b612243838383600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223e5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123ce565b505050565b600081600454101561228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614242565b60405180910390fd5b6122976126e1565b826122a291906144e5565b9050919050565b60008160055410156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e7906142e2565b60405180910390fd5b6122f86126e1565b8261230391906144b4565b9050919050565b6001601060006101000a81548160ff02191690831515021790555060006002600f5461233691906144b4565b9050600081600f54612348919061453f565b9050600047905061235883612705565b60008147612366919061453f565b905061237283826129c3565b7f60c9abc656b9a7cbdf19826c676e3da29898a45d47cb31f97e9192a9e28bc5bc8482856040516123a5939291906143b7565b60405180910390a1505050506000601060006101000a81548160ff021916908315150217905550565b80156123dd576123dc612ab3565b5b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124805750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561249557612490848484612b80565b6126cc565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125385750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561254d57612548848484612e1a565b6126cb565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125f15750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612606576126018484846130b4565b6126ca565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a85750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126bd576126b88484846132c0565b6126c9565b6126c88484846130b4565b5b5b5b5b80156126db576126da6135e8565b5b50505050565b60008060006126ee61363e565b9150915080826126fe91906144b4565b9250505090565b6000600267ffffffffffffffff811115612748577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127765781602001602082028036833780820191505090505b50905030816000815181106127b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561285457600080fd5b505afa158015612868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288c9190613c35565b816001815181106128c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061292b307f000000000000000000000000000000000000000000000000000000000000000084611d43565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161298d95949392919061435d565b600060405180830381600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b505050505050565b6129ee307f000000000000000000000000000000000000000000000000000000000000000084611d43565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612a38611351565b426040518863ffffffff1660e01b8152600401612a5a969594939291906140e9565b6060604051808303818588803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aac9190613d77565b5050505050565b6000600760009054906101000a900460ff1660ff16148015612ae757506000600760029054906101000a900460ff1660ff16145b15612af157612b7e565b600760009054906101000a900460ff16600760016101000a81548160ff021916908360ff160217905550600760029054906101000a900460ff16600760036101000a81548160ff021916908360ff1602179055506000600760006101000a81548160ff021916908360ff1602179055506000600760026101000a81548160ff021916908360ff1602179055505b565b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bcb919061453f565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c1781612248565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c61919061453f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612caf8261396e565b90506000612cbc83613990565b90506000818385612ccd919061453f565b612cd7919061453f565b90506000612ce483612248565b612ced85612248565b612cf687612248565b612d00919061453f565b612d0a919061453f565b905080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d57919061445e565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612da3836139b2565b612dac84613b2c565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e099190614342565b60405180910390a350505050505050565b612e2381612248565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d919061453f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612ebb8261396e565b90506000612ec883613990565b90506000818385612ed9919061453f565b612ee3919061453f565b90506000612ef083612248565b612ef985612248565b612f0287612248565b612f0c919061453f565b612f16919061453f565b905081600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f63919061445e565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff1919061445e565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303d836139b2565b61304684613b2c565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130a39190614342565b60405180910390a350505050505050565b6130bd81612248565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613107919061453f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006131558261396e565b9050600061316283613990565b90506000818385613173919061453f565b61317d919061453f565b9050600061318a83612248565b61319385612248565b61319c87612248565b6131a6919061453f565b6131b0919061453f565b905080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131fd919061445e565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613249836139b2565b61325284613b2c565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132af9190614342565b60405180910390a350505050505050565b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461330b919061453f565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335781612248565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133a1919061453f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006133ef8261396e565b905060006133fc83613990565b9050600081838561340d919061453f565b613417919061453f565b9050600061342483612248565b61342d85612248565b61343687612248565b613440919061453f565b61344a919061453f565b905081600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613497919061445e565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613525919061445e565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613571836139b2565b61357a84613b2c565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135d79190614342565b60405180910390a350505050505050565b600760019054906101000a900460ff16600760006101000a81548160ff021916908360ff160217905550600760039054906101000a900460ff16600760026101000a81548160ff021916908360ff160217905550565b600080600060055490506000600454905060005b600c8054905081101561393e578260086000600c848154811061369e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137b257508160096000600c848154811061374a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137c9576005546004549450945050505061396a565b60086000600c8381548110613807577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613878919061453f565b925060096000600c83815481106138b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613929919061453f565b9150808061393690614663565b915050613652565b508160045460055461395091906144b4565b1161395c578181613963565b6005546004545b9350935050505b9091565b600061398982600760009054906101000a900460ff16613b69565b9050919050565b60006139ab82600760029054906101000a900460ff16613b69565b9050919050565b6139bb81612248565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a05919061445e565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b295780600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ae5919061445e565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b613b3581612248565b60056000828254613b46919061453f565b925050819055508060066000828254613b5f919061445e565b9250508190555050565b600060648260ff1684613b7c91906144e5565b613b8691906144b4565b905092915050565b600081359050613b9d81614b73565b92915050565b600081519050613bb281614b73565b92915050565b600081359050613bc781614b8a565b92915050565b600081359050613bdc81614ba1565b92915050565b600081519050613bf181614ba1565b92915050565b600081359050613c0681614bb8565b92915050565b600060208284031215613c1e57600080fd5b6000613c2c84828501613b8e565b91505092915050565b600060208284031215613c4757600080fd5b6000613c5584828501613ba3565b91505092915050565b60008060408385031215613c7157600080fd5b6000613c7f85828601613b8e565b9250506020613c9085828601613b8e565b9150509250929050565b600080600060608486031215613caf57600080fd5b6000613cbd86828701613b8e565b9350506020613cce86828701613b8e565b9250506040613cdf86828701613bcd565b9150509250925092565b60008060408385031215613cfc57600080fd5b6000613d0a85828601613b8e565b9250506020613d1b85828601613bcd565b9150509250929050565b600060208284031215613d3757600080fd5b6000613d4584828501613bb8565b91505092915050565b600060208284031215613d6057600080fd5b6000613d6e84828501613bcd565b91505092915050565b600080600060608486031215613d8c57600080fd5b6000613d9a86828701613be2565b9350506020613dab86828701613be2565b9250506040613dbc86828701613be2565b9150509250925092565b600060208284031215613dd857600080fd5b6000613de684828501613bf7565b91505092915050565b6000613dfb8383613e07565b60208301905092915050565b613e1081614573565b82525050565b613e1f81614573565b82525050565b6000613e3082614419565b613e3a818561443c565b9350613e4583614409565b8060005b83811015613e76578151613e5d8882613def565b9750613e688361442f565b925050600181019050613e49565b5085935050505092915050565b613e8c81614585565b82525050565b613e9b816145c8565b82525050565b613eaa816145ec565b82525050565b6000613ebb82614424565b613ec5818561444d565b9350613ed58185602086016145fe565b613ede81614739565b840191505092915050565b6000613ef660288361444d565b9150613f018261474a565b604082019050919050565b6000613f1960268361444d565b9150613f2482614799565b604082019050919050565b6000613f3c60438361444d565b9150613f47826147e8565b606082019050919050565b6000613f5f602b8361444d565b9150613f6a8261485d565b604082019050919050565b6000613f8260368361444d565b9150613f8d826148ac565b604082019050919050565b6000613fa560368361444d565b9150613fb0826148fb565b604082019050919050565b6000613fc8602a8361444d565b9150613fd38261494a565b604082019050919050565b6000613feb60288361444d565b9150613ff682614999565b604082019050919050565b600061400e60208361444d565b9150614019826149e8565b602082019050919050565b600061403160298361444d565b915061403c82614a11565b604082019050919050565b600061405460458361444d565b915061405f82614a60565b606082019050919050565b6000614077602e8361444d565b915061408282614ad5565b604082019050919050565b600061409a60388361444d565b91506140a582614b24565b604082019050919050565b6140b9816145b1565b82525050565b6140c8816145bb565b82525050565b60006020820190506140e36000830184613e16565b92915050565b600060c0820190506140fe6000830189613e16565b61410b60208301886140b0565b6141186040830187613ea1565b6141256060830186613ea1565b6141326080830185613e16565b61413f60a08301846140b0565b979650505050505050565b600060208201905061415f6000830184613e83565b92915050565b600060208201905061417a6000830184613e92565b92915050565b6000602082019050818103600083015261419a8184613eb0565b905092915050565b600060208201905081810360008301526141bb81613ee9565b9050919050565b600060208201905081810360008301526141db81613f0c565b9050919050565b600060208201905081810360008301526141fb81613f2f565b9050919050565b6000602082019050818103600083015261421b81613f52565b9050919050565b6000602082019050818103600083015261423b81613f75565b9050919050565b6000602082019050818103600083015261425b81613f98565b9050919050565b6000602082019050818103600083015261427b81613fbb565b9050919050565b6000602082019050818103600083015261429b81613fde565b9050919050565b600060208201905081810360008301526142bb81614001565b9050919050565b600060208201905081810360008301526142db81614024565b9050919050565b600060208201905081810360008301526142fb81614047565b9050919050565b6000602082019050818103600083015261431b8161406a565b9050919050565b6000602082019050818103600083015261433b8161408d565b9050919050565b600060208201905061435760008301846140b0565b92915050565b600060a08201905061437260008301886140b0565b61437f6020830187613ea1565b81810360408301526143918186613e25565b90506143a06060830185613e16565b6143ad60808301846140b0565b9695505050505050565b60006060820190506143cc60008301866140b0565b6143d960208301856140b0565b6143e660408301846140b0565b949350505050565b600060208201905061440360008301846140bf565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614469826145b1565b9150614474836145b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a9576144a86146ac565b5b828201905092915050565b60006144bf826145b1565b91506144ca836145b1565b9250826144da576144d96146db565b5b828204905092915050565b60006144f0826145b1565b91506144fb836145b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614534576145336146ac565b5b828202905092915050565b600061454a826145b1565b9150614555836145b1565b925082821015614568576145676146ac565b5b828203905092915050565b600061457e82614591565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006145d3826145da565b9050919050565b60006145e582614591565b9050919050565b60006145f7826145b1565b9050919050565b60005b8381101561461c578082015181840152602081019050614601565b8381111561462b576000848401525b50505050565b6000600282049050600182168061464957607f821691505b6020821081141561465d5761465c61470a565b5b50919050565b600061466e826145b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146a1576146a06146ac565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a2053656e6465722063616e6e6f7420626520746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865206275726e2061646472657373206973206e6f7420616c6c6f7765642060008201527f746f207265636569766520617070726f76616c20666f7220616c6c6f77616e6360208201527f65732e0000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a20526563697069656e742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546865206275726e2061646472657373206973206e6f7420616c6c6f7765642060008201527f746f20617070726f766520616c6c6f77616e6365732e00000000000000000000602082015250565b7f596f752063616e6e6f74206f776e206d6f726520746f6b656e73207468616e2060008201527f74686520746f74616c20746f6b656e20737570706c7900000000000000000000602082015250565b7f54686973206163636f756e7420697320616c726561647920726563656976696e60008201527f6720726577617264732e00000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742068617665206120706572736f6e616c207265666c656374696f60008201527f6e20616d6f756e74206c6172676572207468616e20746f74616c207265666c6560208201527f6374696f6e000000000000000000000000000000000000000000000000000000604082015250565b7f4163636f756e747320776974686f757420726577617264732063616e6e6f742060008201527f646f20616e206169722064726f70000000000000000000000000000000000000602082015250565b7f54686973206163636f756e7420697320616c7265616479206578636c7564656460008201527f2066726f6d20726563656976696e6720726577617264732e0000000000000000602082015250565b614b7c81614573565b8114614b8757600080fd5b50565b614b9381614585565b8114614b9e57600080fd5b50565b614baa816145b1565b8114614bb557600080fd5b50565b614bc1816145bb565b8114614bcc57600080fd5b5056fea264697066735822122042c08c3358c3cc7952e8af0828c2aeeb7c45ac98f6de6505cabce141947bfaca64736f6c6343000803003300000000000000000000000038eed6a71a4dda9d7f776946e3cfa4ec43781ae6
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000038eed6a71a4dda9d7f776946e3cfa4ec43781ae6
-----Decoded View---------------
Arg [0] : routerAddress (address): 0x38eed6a71a4dda9d7f776946e3cfa4ec43781ae6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000038eed6a71a4dda9d7f776946e3cfa4ec43781ae6
Deployed ByteCode Sourcemap
20274:22557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19824:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41470:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25578:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27289:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23165:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28825:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24326:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41731:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20119:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23220:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42315:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29018:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23113:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29658:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27442:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27070:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10040:133;;;;;;;;;;;;;:::i;:::-;;30364:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22652:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9449:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29498:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19969:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21539:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21303:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42605:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41302:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27932:775;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30613:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42092:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28712:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10313:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19824:83;19870:13;19897:5;19890:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19824:83;:::o;41470:165::-;41558:4;41571:43;41580:12;:10;:12::i;:::-;41594:11;41607:6;41571:8;:43::i;:::-;41626:4;41619:11;;41470:165;;;;:::o;25578:123::-;25647:4;25665:22;:31;25688:7;25665:31;;;;;;;;;;;;;;;;;;;;;;;;;25658:38;;25578:123;;;:::o;27289:85::-;27333:7;27354:15;;27347:22;;27289:85;:::o;23165:51::-;;;:::o;28825:107::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28922:5:::1;28891:19;:28;28911:7;28891:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28825:107:::0;:::o;24326:93::-;24381:7;24402:12;;24395:19;;24326:93;:::o;41731:287::-;41846:4;41857:40;41867:8;41877:11;41890:6;41857:9;:40::i;:::-;41902:95;41916:8;41930:12;:10;:12::i;:::-;41986:6;41948:11;:21;41960:8;41948:21;;;;;;;;;;;;;;;:35;41970:12;:10;:12::i;:::-;41948:35;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;41902:8;:95::i;:::-;42009:4;42002:11;;41731:287;;;;;:::o;20119:83::-;20169:5;20188:9;;;;;;;;;;;20181:16;;20119:83;:::o;23220:42::-;;;:::o;42315:223::-;42403:4;42416:101;42430:12;:10;:12::i;:::-;42448:11;42506:6;42465:11;:25;42477:12;:10;:12::i;:::-;42465:25;;;;;;;;;;;;;;;:38;42491:11;42465:38;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;42416:8;:101::i;:::-;42529:4;42522:11;;42315:223;;;;:::o;29018:406::-;29063:14;29080:12;:10;:12::i;:::-;29063:29;;29111:22;:30;29134:6;29111:30;;;;;;;;;;;;;;;;;;;;;;;;;29110:31;29097:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29205:24;29232:28;29253:6;29232:20;:28::i;:::-;29205:55;;29331:16;29298:18;:26;29317:6;29298:26;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;29265:18;:26;29284:6;29265:26;;;;;;;;;;;;;;;:82;;;;29373:16;29352:17;;:37;;;;;;;:::i;:::-;;;;;;;;29413:6;29394:15;;:25;;;;;;;:::i;:::-;;;;;;;;29018:406;;;:::o;23113:46::-;;;;;;;;;;;;;:::o;29658:92::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29742:3:::1;29727:12;;:18;;;;;;;;;;;;;;;;;;29658:92:::0;:::o;25706:119::-;25774:4;25792:19;:28;25812:7;25792:28;;;;;;;;;;;;;;;;;;;;;;;;;25785:35;;25706:119;;;:::o;27442:485::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27526:22:::1;:31;27549:7;27526:31;;;;;;;;;;;;;;;;;;;;;;;;;27525:32;27512:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;27750:1;27720:18;:27;27739:7;27720:27;;;;;;;;;;;;;;;;:31;27716:134;;;27784:60;27811:18;:27;27830:7;27811:27;;;;;;;;;;;;;;;;27784:20;:60::i;:::-;27759:13;:22;27773:7;27759:22;;;;;;;;;;;;;;;:85;;;;27716:134;27890:4;27856:22;:31;27879:7;27856:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27899:9;27914:7;27899:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27442:485:::0;:::o;27070:214::-;27136:7;27161:22;:31;27184:7;27161:31;;;;;;;;;;;;;;;;;;;;;;;;;:118;;27230:49;27251:18;:27;27270:7;27251:27;;;;;;;;;;;;;;;;27230:20;:49::i;:::-;27161:118;;;27200:13;:22;27214:7;27200:22;;;;;;;;;;;;;;;;27161:118;27150:129;;27070:214;;;:::o;10040:133::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10141:1:::1;10104:40;;10125:6;::::0;::::1;;;;;;;;10104:40;;;;;;;;;;;;10166:1;10149:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10040:133::o:0;30364:122::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30478:3:::1;30467:7;30452:12;;:22;;;;:::i;:::-;30451:30;;;;:::i;:::-;30437:11;:44;;;;30364:122:::0;:::o;22652:51::-;;;;:::o;9449:78::-;9495:7;9516:6;;;;;;;;;;;9509:13;;9449:78;:::o;29498:80::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29570:3:::1;29561:6;;:12;;;;;;;;;;;;;;;;;;29498:80:::0;:::o;19969:87::-;20017:13;20044:7;20037:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19969:87;:::o;21539:29::-;;;;;;;;;;;;;:::o;21303:23::-;;;;;;;;;;;;;:::o;42605:223::-;42693:4;42706:101;42720:12;:10;:12::i;:::-;42738:11;42796:6;42755:11;:25;42767:12;:10;:12::i;:::-;42755:25;;;;;;;;;;;;;;;:38;42781:11;42755:38;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;42706:8;:101::i;:::-;42819:4;42812:11;;42605:223;;;;:::o;41302:163::-;41389:4;41402:42;41412:12;:10;:12::i;:::-;41426:9;41437:6;41402:9;:42::i;:::-;41456:4;41449:11;;41302:163;;;;:::o;27932:775::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28014:22:::1;:31;28037:7;28014:31;;;;;;;;;;;;;;;;;;;;;;;;;28001:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;28176:9;28171:532;28195:9;:16;;;;28191:1;:20;28171:532;;;28244:7;28228:23;;:9;28238:1;28228:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;28224:474;;;28379:9;28408:1;28389:9;:16;;;;:20;;;;:::i;:::-;28379:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28364:9;28374:1;28364:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28518:1;28493:13;:22;28507:7;28493:22;;;;;;;;;;;;;;;:26;;;;28560:5;28526:22;:31;28549:7;28526:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28641:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28686:5;;28224:474;28213:3;;;;;:::i;:::-;;;;28171:532;;;;27932:775:::0;:::o;30613:154::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30715:5:::1;30686:26;;:34;;;;;;;;;;;;;;;;;;30730:32;30756:5;30730:32;;;;;;:::i;:::-;;;;;;;;30613:154:::0;:::o;42092:156::-;42189:7;42212:11;:18;42224:5;42212:18;;;;;;;;;;;;;;;:31;42231:11;42212:31;;;;;;;;;;;;;;;;42205:38;;42092:156;;;;:::o;28712:108::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28811:4:::1;28780:19;:28;28800:7;28780:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28712:108:::0;:::o;10313:236::-;9653:12;:10;:12::i;:::-;9642:23;;:7;:5;:7::i;:::-;:23;;;9634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10421:1:::1;10401:22;;:8;:22;;;;10388:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;10513:8;10484:38;;10505:6;::::0;::::1;;;;;;;;10484:38;;;;;;;;;;;;10536:8;10527:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10313:236:::0;:::o;8108:89::-;8161:7;8182:10;8175:17;;8108:89;:::o;40881:416::-;41013:1;40990:25;;:11;:25;;;;40977:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;41130:1;41113:19;;:5;:19;;;;41100:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;41240:6;41206:11;:18;41218:5;41206:18;;;;;;;;;;;;;;;:31;41225:11;41206:31;;;;;;;;;;;;;;;:40;;;;41272:11;41256:36;;41265:5;41256:36;;;41285:6;41256:36;;;;;;:::i;:::-;;;;;;;;40881:416;;;:::o;39745:1080::-;39872:1;39854:20;;:6;:20;;;;39841:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39966:1;39945:23;;:9;:23;;;;39932:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;40046:1;40037:6;:10;40029:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40112:7;:5;:7::i;:::-;40102:17;;:6;:17;;;;:41;;;;;40136:7;:5;:7::i;:::-;40123:20;;:9;:20;;;;40102:41;40098:141;;;40173:11;;40163:6;:21;;40149:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;40098:141;40527:33;;40499:24;40517:4;40499:9;:24::i;:::-;:61;;:97;;;;;40569:27;;;;;;;;;;;40568:28;40499:97;:131;;;;;40604:26;;;;;;;;;;;40499:131;:166;;;;;40648:17;40638:27;;:6;:27;;;;40499:166;40490:198;;;40671:17;:15;:17::i;:::-;40490:198;40695:125;40715:6;40727:9;40742:6;40754:19;:27;40774:6;40754:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;40785:19;:30;40805:9;40785:30;;;;;;;;;;;;;;;;;;;;;;;;;40754:61;40695:14;:125::i;:::-;39745:1080;;;:::o;26197:231::-;26274:7;26319:6;26303:12;;:22;;26290:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26413:10;:8;:10::i;:::-;26404:6;:19;;;;:::i;:::-;26397:26;;26197:231;;;:::o;26522:281::-;26609:7;26659:16;26638:17;;:37;;26625:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;26788:10;:8;:10::i;:::-;26769:16;:29;;;;:::i;:::-;26762:36;;26522:281;;;:::o;38991:641::-;24209:4;24179:27;;:34;;;;;;;;;;;;;;;;;;39094:12:::1;39145:1;39109:33;;:37;;;;:::i;:::-;39094:52;;39151:17;39207:4;39171:33;;:40;;;;:::i;:::-;39151:60;;39218:33;39254:21;39218:57;;39320:23;39338:4;39320:17;:23::i;:::-;39430:17;39474:25;39450:21;:49;;;;:::i;:::-;39430:69;;39538:35;39552:9;39563;39538:13;:35::i;:::-;39585:42;39600:4;39606:9;39617;39585:42;;;;;;;;:::i;:::-;;;;;;;;24218:1;;;;24254:5:::0;24224:27;;:35;;;;;;;;;;;;;;;;;;38991:641::o;36933:971::-;37130:10;37126:31;;;37142:15;:13;:15::i;:::-;37126:31;37173:22;:30;37196:6;37173:30;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;37208:22;:33;37231:9;37208:33;;;;;;;;;;;;;;;;;;;;;;;;;37207:34;37173:68;37164:650;;;37253:48;37275:6;37283:9;37294:6;37253:21;:48::i;:::-;37164:650;;;37323:22;:30;37346:6;37323:30;;;;;;;;;;;;;;;;;;;;;;;;;37322:31;:68;;;;;37357:22;:33;37380:9;37357:33;;;;;;;;;;;;;;;;;;;;;;;;;37322:68;37313:501;;;37402:46;37422:6;37430:9;37441:6;37402:19;:46::i;:::-;37313:501;;;37470:22;:30;37493:6;37470:30;;;;;;;;;;;;;;;;;;;;;;;;;37469:31;:73;;;;;37509:22;:33;37532:9;37509:33;;;;;;;;;;;;;;;;;;;;;;;;;37508:34;37469:73;37460:354;;;37554:44;37572:6;37580:9;37591:6;37554:17;:44::i;:::-;37460:354;;;37619:22;:30;37642:6;37619:30;;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;;37653:22;:33;37676:9;37653:33;;;;;;;;;;;;;;;;;;;;;;;;;37619:67;37610:204;;;37698:48;37720:6;37728:9;37739:6;37698:21;:48::i;:::-;37610:204;;;37764:44;37782:6;37790:9;37801:6;37764:17;:44::i;:::-;37610:204;37460:354;37313:501;37164:650;37871:10;37867:32;;;37883:16;:14;:16::i;:::-;37867:32;36933:971;;;;:::o;25919:184::-;25961:7;25976:26;26004:21;26033:19;:17;:19::i;:::-;25975:77;;;;26085:13;26064:18;:34;;;;:::i;:::-;26057:41;;;;25919:184;:::o;37975:494::-;38090:21;38128:1;38114:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38090:40;;38153:4;38135;38140:1;38135:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;38173:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38163:4;38168:1;38163:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;38202:62;38219:4;38234:15;38252:11;38202:8;:62::i;:::-;38291:15;:66;;;38363:11;38380:1;38415:4;38433;38444:15;38291:173;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37975:494;;:::o;38557:429::-;38694:62;38711:4;38726:15;38744:11;38694:8;:62::i;:::-;38787:15;:31;;;38827:9;38852:4;38863:11;38880:1;38914;38948:7;:5;:7::i;:::-;38961:15;38787:194;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38557:429;;:::o;29842:197::-;29894:1;29884:6;;;;;;;;;;;:11;;;:32;;;;;29915:1;29899:12;;;;;;;;;;;:17;;;29884:32;29880:45;;;29918:7;;29880:45;29949:6;;;;;;;;;;;29931:15;;:24;;;;;;;;;;;;;;;;;;29984:12;;;;;;;;;;;29960:21;;:36;;;;;;;;;;;;;;;;;;30012:1;30003:6;;:10;;;;;;;;;;;;;;;;;;30033:1;30018:12;;:16;;;;;;;;;;;;;;;;;;29842:197;:::o;32476:1034::-;32747:6;32723:13;:21;32737:6;32723:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;32699:13;:21;32713:6;32699:21;;;;;;;;;;;;;;;:54;;;;32824:28;32845:6;32824:20;:28::i;:::-;32791:18;:26;32810:6;32791:26;;;;;;;;;;;;;;;;:61;;;;:::i;:::-;32758:18;:26;32777:6;32758:26;;;;;;;;;;;;;;;:94;;;;32892:12;32907:24;32924:6;32907:16;:24::i;:::-;32892:39;;32973:12;32988:30;33011:6;32988:22;:30::i;:::-;32973:45;;33025:24;33068:4;33061;33052:6;:13;;;;:::i;:::-;:20;;;;:::i;:::-;33025:47;;33077:29;33183:26;33204:4;33183:20;:26::i;:::-;33149;33170:4;33149:20;:26::i;:::-;33113:28;33134:6;33113:20;:28::i;:::-;:62;;;;:::i;:::-;:96;;;;:::i;:::-;33077:132;;33378:21;33342:18;:29;33361:9;33342:29;;;;;;;;;;;;;;;;:57;;;;:::i;:::-;33306:18;:29;33325:9;33306:29;;;;;;;;;;;;;;;:93;;;;33406:20;33421:4;33406:14;:20::i;:::-;33431:17;33443:4;33431:11;:17::i;:::-;33477:9;33460:45;;33469:6;33460:45;;;33488:16;33460:45;;;;;;:::i;:::-;;;;;;;;32476:1034;;;;;;;:::o;33561:1040::-;33836:28;33857:6;33836:20;:28::i;:::-;33803:18;:26;33822:6;33803:26;;;;;;;;;;;;;;;;:61;;;;:::i;:::-;33770:18;:26;33789:6;33770:26;;;;;;;;;;;;;;;:94;;;;33904:12;33919:24;33936:6;33919:16;:24::i;:::-;33904:39;;33985:12;34000:30;34023:6;34000:22;:30::i;:::-;33985:45;;34037:24;34080:4;34073;34064:6;:13;;;;:::i;:::-;:20;;;;:::i;:::-;34037:47;;34089:29;34195:26;34216:4;34195:20;:26::i;:::-;34161;34182:4;34161:20;:26::i;:::-;34125:28;34146:6;34125:20;:28::i;:::-;:62;;;;:::i;:::-;:96;;;;:::i;:::-;34089:132;;34376:16;34349:13;:24;34363:9;34349:24;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;34322:13;:24;34336:9;34322:24;;;;;;;;;;;;;;;:70;;;;34469:21;34433:18;:29;34452:9;34433:29;;;;;;;;;;;;;;;;:57;;;;:::i;:::-;34397:18;:29;34416:9;34397:29;;;;;;;;;;;;;;;:93;;;;34497:20;34512:4;34497:14;:20::i;:::-;34522:17;34534:4;34522:11;:17::i;:::-;34568:9;34551:45;;34560:6;34551:45;;;34579:16;34551:45;;;;;;:::i;:::-;;;;;;;;33561:1040;;;;;;;:::o;34656:957::-;34929:28;34950:6;34929:20;:28::i;:::-;34896:18;:26;34915:6;34896:26;;;;;;;;;;;;;;;;:61;;;;:::i;:::-;34863:18;:26;34882:6;34863:26;;;;;;;;;;;;;;;:94;;;;34997:12;35012:24;35029:6;35012:16;:24::i;:::-;34997:39;;35078:12;35093:30;35116:6;35093:22;:30::i;:::-;35078:45;;35130:24;35173:4;35166;35157:6;:13;;;;:::i;:::-;:20;;;;:::i;:::-;35130:47;;35182:29;35288:26;35309:4;35288:20;:26::i;:::-;35254;35275:4;35254:20;:26::i;:::-;35218:28;35239:6;35218:20;:28::i;:::-;:62;;;;:::i;:::-;:96;;;;:::i;:::-;35182:132;;35481:21;35445:18;:29;35464:9;35445:29;;;;;;;;;;;;;;;;:57;;;;:::i;:::-;35409:18;:29;35428:9;35409:29;;;;;;;;;;;;;;;:93;;;;35509:20;35524:4;35509:14;:20::i;:::-;35534:17;35546:4;35534:11;:17::i;:::-;35580:9;35563:45;;35572:6;35563:45;;;35591:16;35563:45;;;;;;:::i;:::-;;;;;;;;34656:957;;;;;;;:::o;35660:1115::-;35936:6;35912:13;:21;35926:6;35912:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;35888:13;:21;35902:6;35888:21;;;;;;;;;;;;;;;:54;;;;36013:28;36034:6;36013:20;:28::i;:::-;35980:18;:26;35999:6;35980:26;;;;;;;;;;;;;;;;:61;;;;:::i;:::-;35947:18;:26;35966:6;35947:26;;;;;;;;;;;;;;;:94;;;;36081:12;36096:24;36113:6;36096:16;:24::i;:::-;36081:39;;36162:12;36177:30;36200:6;36177:22;:30::i;:::-;36162:45;;36214:24;36257:4;36250;36241:6;:13;;;;:::i;:::-;:20;;;;:::i;:::-;36214:47;;36266:29;36372:26;36393:4;36372:20;:26::i;:::-;36338;36359:4;36338:20;:26::i;:::-;36302:28;36323:6;36302:20;:28::i;:::-;:62;;;;:::i;:::-;:96;;;;:::i;:::-;36266:132;;36550:16;36523:13;:24;36537:9;36523:24;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;36496:13;:24;36510:9;36496:24;;;;;;;;;;;;;;;:70;;;;36643:21;36607:18;:29;36626:9;36607:29;;;;;;;;;;;;;;;;:57;;;;:::i;:::-;36571:18;:29;36590:9;36571:29;;;;;;;;;;;;;;;:93;;;;36671:20;36686:4;36671:14;:20::i;:::-;36696:17;36708:4;36696:11;:17::i;:::-;36742:9;36725:45;;36734:6;36725:45;;;36753:16;36725:45;;;;;;:::i;:::-;;;;;;;;35660:1115;;;;;;;:::o;30109:109::-;30157:15;;;;;;;;;;;30148:6;;:24;;;;;;;;;;;;;;;;;;30192:21;;;;;;;;;;;30177:12;;:36;;;;;;;;;;;;;;;;;;30109:109::o;24424:1080::-;24475:7;24484;24498:23;24524:17;;24498:43;;24546:19;24568:12;;24546:34;;24630:9;24625:661;24649:9;:16;;;;24645:1;:20;24625:661;;;24858:15;24823:18;:32;24842:9;24852:1;24842:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24823:32;;;;;;;;;;;;;;;;:50;:100;;;;24912:11;24882:13;:27;24896:9;24906:1;24896:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24882:27;;;;;;;;;;;;;;;;:41;24823:100;24678:292;;;24938:17;;24957:12;;24930:40;;;;;;;;;24678:292;25107:18;:32;25126:9;25136:1;25126:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25107:32;;;;;;;;;;;;;;;;25084:15;:55;;;;:::i;:::-;25061:78;;25253:13;:27;25267:9;25277:1;25267:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25253:27;;;;;;;;;;;;;;;;25239:11;:41;;;;:::i;:::-;25225:55;;24667:3;;;;;:::i;:::-;;;;24625:661;;;;25405:15;25389:12;;25369:17;;:32;;;;:::i;:::-;25368:52;:131;;25470:15;25487:11;25368:131;;;25429:17;;25448:12;;25368:131;25357:142;;;;;;24424:1080;;;:::o;31234:119::-;31298:7;31319:29;31333:6;31341;;;;;;;;;;;31319:13;:29::i;:::-;31312:36;;31234:119;;;:::o;31527:142::-;31606:7;31629:35;31643:6;31651:12;;;;;;;;;;;31629:13;:35::i;:::-;31622:42;;31527:142;;;:::o;32010:296::-;32143:28;32164:6;32143:20;:28::i;:::-;32103:18;:33;32130:4;32103:33;;;;;;;;;;;;;;;;:68;;;;:::i;:::-;32063:18;:33;32090:4;32063:33;;;;;;;;;;;;;;;:108;;;;32180:22;:37;32211:4;32180:37;;;;;;;;;;;;;;;;;;;;;;;;;32176:125;;;32295:6;32259:13;:28;32281:4;32259:28;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;32223:13;:28;32245:4;32223:28;;;;;;;;;;;;;;;:78;;;;32176:125;32010:296;:::o;31793:140::-;31866:30;31887:8;31866:20;:30::i;:::-;31845:17;;:51;;;;;;;:::i;:::-;;;;;;;;31920:8;31901:15;;:27;;;;;;;:::i;:::-;;;;;;;;31793:140;:::o;30941:129::-;31022:7;31062:3;31055;31046:12;;:6;:12;;;;:::i;:::-;31045:20;;;;:::i;:::-;31038:27;;30941:129;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:135::-;;816:6;803:20;794:29;;832:31;857:5;832:31;:::i;:::-;784:85;;;;:::o;875:262::-;;983:2;971:9;962:7;958:23;954:32;951:2;;;999:1;996;989:12;951:2;1042:1;1067:53;1112:7;1103:6;1092:9;1088:22;1067:53;:::i;:::-;1057:63;;1013:117;941:196;;;;:::o;1143:284::-;;1262:2;1250:9;1241:7;1237:23;1233:32;1230:2;;;1278:1;1275;1268:12;1230:2;1321:1;1346:64;1402:7;1393:6;1382:9;1378:22;1346:64;:::i;:::-;1336:74;;1292:128;1220:207;;;;:::o;1433:407::-;;;1558:2;1546:9;1537:7;1533:23;1529:32;1526:2;;;1574:1;1571;1564:12;1526:2;1617:1;1642:53;1687:7;1678:6;1667:9;1663:22;1642:53;:::i;:::-;1632:63;;1588:117;1744:2;1770:53;1815:7;1806:6;1795:9;1791:22;1770:53;:::i;:::-;1760:63;;1715:118;1516:324;;;;;:::o;1846:552::-;;;;1988:2;1976:9;1967:7;1963:23;1959:32;1956:2;;;2004:1;2001;1994:12;1956:2;2047:1;2072:53;2117:7;2108:6;2097:9;2093:22;2072:53;:::i;:::-;2062:63;;2018:117;2174:2;2200:53;2245:7;2236:6;2225:9;2221:22;2200:53;:::i;:::-;2190:63;;2145:118;2302:2;2328:53;2373:7;2364:6;2353:9;2349:22;2328:53;:::i;:::-;2318:63;;2273:118;1946:452;;;;;:::o;2404:407::-;;;2529:2;2517:9;2508:7;2504:23;2500:32;2497:2;;;2545:1;2542;2535:12;2497:2;2588:1;2613:53;2658:7;2649:6;2638:9;2634:22;2613:53;:::i;:::-;2603:63;;2559:117;2715:2;2741:53;2786:7;2777:6;2766:9;2762:22;2741:53;:::i;:::-;2731:63;;2686:118;2487:324;;;;;:::o;2817:256::-;;2922:2;2910:9;2901:7;2897:23;2893:32;2890:2;;;2938:1;2935;2928:12;2890:2;2981:1;3006:50;3048:7;3039:6;3028:9;3024:22;3006:50;:::i;:::-;2996:60;;2952:114;2880:193;;;;:::o;3079:262::-;;3187:2;3175:9;3166:7;3162:23;3158:32;3155:2;;;3203:1;3200;3193:12;3155:2;3246:1;3271:53;3316:7;3307:6;3296:9;3292:22;3271:53;:::i;:::-;3261:63;;3217:117;3145:196;;;;:::o;3347:596::-;;;;3500:2;3488:9;3479:7;3475:23;3471:32;3468:2;;;3516:1;3513;3506:12;3468:2;3559:1;3584:64;3640:7;3631:6;3620:9;3616:22;3584:64;:::i;:::-;3574:74;;3530:128;3697:2;3723:64;3779:7;3770:6;3759:9;3755:22;3723:64;:::i;:::-;3713:74;;3668:129;3836:2;3862:64;3918:7;3909:6;3898:9;3894:22;3862:64;:::i;:::-;3852:74;;3807:129;3458:485;;;;;:::o;3949:258::-;;4055:2;4043:9;4034:7;4030:23;4026:32;4023:2;;;4071:1;4068;4061:12;4023:2;4114:1;4139:51;4182:7;4173:6;4162:9;4158:22;4139:51;:::i;:::-;4129:61;;4085:115;4013:194;;;;:::o;4213:179::-;;4303:46;4345:3;4337:6;4303:46;:::i;:::-;4381:4;4376:3;4372:14;4358:28;;4293:99;;;;:::o;4398:108::-;4475:24;4493:5;4475:24;:::i;:::-;4470:3;4463:37;4453:53;;:::o;4512:118::-;4599:24;4617:5;4599:24;:::i;:::-;4594:3;4587:37;4577:53;;:::o;4666:732::-;;4814:54;4862:5;4814:54;:::i;:::-;4884:86;4963:6;4958:3;4884:86;:::i;:::-;4877:93;;4994:56;5044:5;4994:56;:::i;:::-;5073:7;5104:1;5089:284;5114:6;5111:1;5108:13;5089:284;;;5190:6;5184:13;5217:63;5276:3;5261:13;5217:63;:::i;:::-;5210:70;;5303:60;5356:6;5303:60;:::i;:::-;5293:70;;5149:224;5136:1;5133;5129:9;5124:14;;5089:284;;;5093:14;5389:3;5382:10;;4790:608;;;;;;;:::o;5404:109::-;5485:21;5500:5;5485:21;:::i;:::-;5480:3;5473:34;5463:50;;:::o;5519:183::-;5632:63;5689:5;5632:63;:::i;:::-;5627:3;5620:76;5610:92;;:::o;5708:147::-;5803:45;5842:5;5803:45;:::i;:::-;5798:3;5791:58;5781:74;;:::o;5861:364::-;;5977:39;6010:5;5977:39;:::i;:::-;6032:71;6096:6;6091:3;6032:71;:::i;:::-;6025:78;;6112:52;6157:6;6152:3;6145:4;6138:5;6134:16;6112:52;:::i;:::-;6189:29;6211:6;6189:29;:::i;:::-;6184:3;6180:39;6173:46;;5953:272;;;;;:::o;6231:366::-;;6394:67;6458:2;6453:3;6394:67;:::i;:::-;6387:74;;6470:93;6559:3;6470:93;:::i;:::-;6588:2;6583:3;6579:12;6572:19;;6377:220;;;:::o;6603:366::-;;6766:67;6830:2;6825:3;6766:67;:::i;:::-;6759:74;;6842:93;6931:3;6842:93;:::i;:::-;6960:2;6955:3;6951:12;6944:19;;6749:220;;;:::o;6975:366::-;;7138:67;7202:2;7197:3;7138:67;:::i;:::-;7131:74;;7214:93;7303:3;7214:93;:::i;:::-;7332:2;7327:3;7323:12;7316:19;;7121:220;;;:::o;7347:366::-;;7510:67;7574:2;7569:3;7510:67;:::i;:::-;7503:74;;7586:93;7675:3;7586:93;:::i;:::-;7704:2;7699:3;7695:12;7688:19;;7493:220;;;:::o;7719:366::-;;7882:67;7946:2;7941:3;7882:67;:::i;:::-;7875:74;;7958:93;8047:3;7958:93;:::i;:::-;8076:2;8071:3;8067:12;8060:19;;7865:220;;;:::o;8091:366::-;;8254:67;8318:2;8313:3;8254:67;:::i;:::-;8247:74;;8330:93;8419:3;8330:93;:::i;:::-;8448:2;8443:3;8439:12;8432:19;;8237:220;;;:::o;8463:366::-;;8626:67;8690:2;8685:3;8626:67;:::i;:::-;8619:74;;8702:93;8791:3;8702:93;:::i;:::-;8820:2;8815:3;8811:12;8804:19;;8609:220;;;:::o;8835:366::-;;8998:67;9062:2;9057:3;8998:67;:::i;:::-;8991:74;;9074:93;9163:3;9074:93;:::i;:::-;9192:2;9187:3;9183:12;9176:19;;8981:220;;;:::o;9207:366::-;;9370:67;9434:2;9429:3;9370:67;:::i;:::-;9363:74;;9446:93;9535:3;9446:93;:::i;:::-;9564:2;9559:3;9555:12;9548:19;;9353:220;;;:::o;9579:366::-;;9742:67;9806:2;9801:3;9742:67;:::i;:::-;9735:74;;9818:93;9907:3;9818:93;:::i;:::-;9936:2;9931:3;9927:12;9920:19;;9725:220;;;:::o;9951:366::-;;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10190:93;10279:3;10190:93;:::i;:::-;10308:2;10303:3;10299:12;10292:19;;10097:220;;;:::o;10323:366::-;;10486:67;10550:2;10545:3;10486:67;:::i;:::-;10479:74;;10562:93;10651:3;10562:93;:::i;:::-;10680:2;10675:3;10671:12;10664:19;;10469:220;;;:::o;10695:366::-;;10858:67;10922:2;10917:3;10858:67;:::i;:::-;10851:74;;10934:93;11023:3;10934:93;:::i;:::-;11052:2;11047:3;11043:12;11036:19;;10841:220;;;:::o;11067:118::-;11154:24;11172:5;11154:24;:::i;:::-;11149:3;11142:37;11132:53;;:::o;11191:112::-;11274:22;11290:5;11274:22;:::i;:::-;11269:3;11262:35;11252:51;;:::o;11309:222::-;;11440:2;11429:9;11425:18;11417:26;;11453:71;11521:1;11510:9;11506:17;11497:6;11453:71;:::i;:::-;11407:124;;;;:::o;11537:807::-;;11824:3;11813:9;11809:19;11801:27;;11838:71;11906:1;11895:9;11891:17;11882:6;11838:71;:::i;:::-;11919:72;11987:2;11976:9;11972:18;11963:6;11919:72;:::i;:::-;12001:80;12077:2;12066:9;12062:18;12053:6;12001:80;:::i;:::-;12091;12167:2;12156:9;12152:18;12143:6;12091:80;:::i;:::-;12181:73;12249:3;12238:9;12234:19;12225:6;12181:73;:::i;:::-;12264;12332:3;12321:9;12317:19;12308:6;12264:73;:::i;:::-;11791:553;;;;;;;;;:::o;12350:210::-;;12475:2;12464:9;12460:18;12452:26;;12488:65;12550:1;12539:9;12535:17;12526:6;12488:65;:::i;:::-;12442:118;;;;:::o;12566:274::-;;12723:2;12712:9;12708:18;12700:26;;12736:97;12830:1;12819:9;12815:17;12806:6;12736:97;:::i;:::-;12690:150;;;;:::o;12846:313::-;;12997:2;12986:9;12982:18;12974:26;;13046:9;13040:4;13036:20;13032:1;13021:9;13017:17;13010:47;13074:78;13147:4;13138:6;13074:78;:::i;:::-;13066:86;;12964:195;;;;:::o;13165:419::-;;13369:2;13358:9;13354:18;13346:26;;13418:9;13412:4;13408:20;13404:1;13393:9;13389:17;13382:47;13446:131;13572:4;13446:131;:::i;:::-;13438:139;;13336:248;;;:::o;13590:419::-;;13794:2;13783:9;13779:18;13771:26;;13843:9;13837:4;13833:20;13829:1;13818:9;13814:17;13807:47;13871:131;13997:4;13871:131;:::i;:::-;13863:139;;13761:248;;;:::o;14015:419::-;;14219:2;14208:9;14204:18;14196:26;;14268:9;14262:4;14258:20;14254:1;14243:9;14239:17;14232:47;14296:131;14422:4;14296:131;:::i;:::-;14288:139;;14186:248;;;:::o;14440:419::-;;14644:2;14633:9;14629:18;14621:26;;14693:9;14687:4;14683:20;14679:1;14668:9;14664:17;14657:47;14721:131;14847:4;14721:131;:::i;:::-;14713:139;;14611:248;;;:::o;14865:419::-;;15069:2;15058:9;15054:18;15046:26;;15118:9;15112:4;15108:20;15104:1;15093:9;15089:17;15082:47;15146:131;15272:4;15146:131;:::i;:::-;15138:139;;15036:248;;;:::o;15290:419::-;;15494:2;15483:9;15479:18;15471:26;;15543:9;15537:4;15533:20;15529:1;15518:9;15514:17;15507:47;15571:131;15697:4;15571:131;:::i;:::-;15563:139;;15461:248;;;:::o;15715:419::-;;15919:2;15908:9;15904:18;15896:26;;15968:9;15962:4;15958:20;15954:1;15943:9;15939:17;15932:47;15996:131;16122:4;15996:131;:::i;:::-;15988:139;;15886:248;;;:::o;16140:419::-;;16344:2;16333:9;16329:18;16321:26;;16393:9;16387:4;16383:20;16379:1;16368:9;16364:17;16357:47;16421:131;16547:4;16421:131;:::i;:::-;16413:139;;16311:248;;;:::o;16565:419::-;;16769:2;16758:9;16754:18;16746:26;;16818:9;16812:4;16808:20;16804:1;16793:9;16789:17;16782:47;16846:131;16972:4;16846:131;:::i;:::-;16838:139;;16736:248;;;:::o;16990:419::-;;17194:2;17183:9;17179:18;17171:26;;17243:9;17237:4;17233:20;17229:1;17218:9;17214:17;17207:47;17271:131;17397:4;17271:131;:::i;:::-;17263:139;;17161:248;;;:::o;17415:419::-;;17619:2;17608:9;17604:18;17596:26;;17668:9;17662:4;17658:20;17654:1;17643:9;17639:17;17632:47;17696:131;17822:4;17696:131;:::i;:::-;17688:139;;17586:248;;;:::o;17840:419::-;;18044:2;18033:9;18029:18;18021:26;;18093:9;18087:4;18083:20;18079:1;18068:9;18064:17;18057:47;18121:131;18247:4;18121:131;:::i;:::-;18113:139;;18011:248;;;:::o;18265:419::-;;18469:2;18458:9;18454:18;18446:26;;18518:9;18512:4;18508:20;18504:1;18493:9;18489:17;18482:47;18546:131;18672:4;18546:131;:::i;:::-;18538:139;;18436:248;;;:::o;18690:222::-;;18821:2;18810:9;18806:18;18798:26;;18834:71;18902:1;18891:9;18887:17;18878:6;18834:71;:::i;:::-;18788:124;;;;:::o;18918:831::-;;19219:3;19208:9;19204:19;19196:27;;19233:71;19301:1;19290:9;19286:17;19277:6;19233:71;:::i;:::-;19314:80;19390:2;19379:9;19375:18;19366:6;19314:80;:::i;:::-;19441:9;19435:4;19431:20;19426:2;19415:9;19411:18;19404:48;19469:108;19572:4;19563:6;19469:108;:::i;:::-;19461:116;;19587:72;19655:2;19644:9;19640:18;19631:6;19587:72;:::i;:::-;19669:73;19737:3;19726:9;19722:19;19713:6;19669:73;:::i;:::-;19186:563;;;;;;;;:::o;19755:442::-;;19942:2;19931:9;19927:18;19919:26;;19955:71;20023:1;20012:9;20008:17;19999:6;19955:71;:::i;:::-;20036:72;20104:2;20093:9;20089:18;20080:6;20036:72;:::i;:::-;20118;20186:2;20175:9;20171:18;20162:6;20118:72;:::i;:::-;19909:288;;;;;;:::o;20203:214::-;;20330:2;20319:9;20315:18;20307:26;;20343:67;20407:1;20396:9;20392:17;20383:6;20343:67;:::i;:::-;20297:120;;;;:::o;20423:132::-;;20513:3;20505:11;;20543:4;20538:3;20534:14;20526:22;;20495:60;;;:::o;20561:114::-;;20662:5;20656:12;20646:22;;20635:40;;;:::o;20681:99::-;;20767:5;20761:12;20751:22;;20740:40;;;:::o;20786:113::-;;20888:4;20883:3;20879:14;20871:22;;20861:38;;;:::o;20905:184::-;;21038:6;21033:3;21026:19;21078:4;21073:3;21069:14;21054:29;;21016:73;;;;:::o;21095:169::-;;21213:6;21208:3;21201:19;21253:4;21248:3;21244:14;21229:29;;21191:73;;;;:::o;21270:305::-;;21329:20;21347:1;21329:20;:::i;:::-;21324:25;;21363:20;21381:1;21363:20;:::i;:::-;21358:25;;21517:1;21449:66;21445:74;21442:1;21439:81;21436:2;;;21523:18;;:::i;:::-;21436:2;21567:1;21564;21560:9;21553:16;;21314:261;;;;:::o;21581:185::-;;21638:20;21656:1;21638:20;:::i;:::-;21633:25;;21672:20;21690:1;21672:20;:::i;:::-;21667:25;;21711:1;21701:2;;21716:18;;:::i;:::-;21701:2;21758:1;21755;21751:9;21746:14;;21623:143;;;;:::o;21772:348::-;;21835:20;21853:1;21835:20;:::i;:::-;21830:25;;21869:20;21887:1;21869:20;:::i;:::-;21864:25;;22057:1;21989:66;21985:74;21982:1;21979:81;21974:1;21967:9;21960:17;21956:105;21953:2;;;22064:18;;:::i;:::-;21953:2;22112:1;22109;22105:9;22094:20;;21820:300;;;;:::o;22126:191::-;;22186:20;22204:1;22186:20;:::i;:::-;22181:25;;22220:20;22238:1;22220:20;:::i;:::-;22215:25;;22259:1;22256;22253:8;22250:2;;;22264:18;;:::i;:::-;22250:2;22309:1;22306;22302:9;22294:17;;22171:146;;;;:::o;22323:96::-;;22389:24;22407:5;22389:24;:::i;:::-;22378:35;;22368:51;;;:::o;22425:90::-;;22502:5;22495:13;22488:21;22477:32;;22467:48;;;:::o;22521:126::-;;22598:42;22591:5;22587:54;22576:65;;22566:81;;;:::o;22653:77::-;;22719:5;22708:16;;22698:32;;;:::o;22736:86::-;;22811:4;22804:5;22800:16;22789:27;;22779:43;;;:::o;22828:178::-;;22937:63;22994:5;22937:63;:::i;:::-;22924:76;;22914:92;;;:::o;23012:139::-;;23121:24;23139:5;23121:24;:::i;:::-;23108:37;;23098:53;;;:::o;23157:121::-;;23248:24;23266:5;23248:24;:::i;:::-;23235:37;;23225:53;;;:::o;23284:307::-;23352:1;23362:113;23376:6;23373:1;23370:13;23362:113;;;23461:1;23456:3;23452:11;23446:18;23442:1;23437:3;23433:11;23426:39;23398:2;23395:1;23391:10;23386:15;;23362:113;;;23493:6;23490:1;23487:13;23484:2;;;23573:1;23564:6;23559:3;23555:16;23548:27;23484:2;23333:258;;;;:::o;23597:320::-;;23678:1;23672:4;23668:12;23658:22;;23725:1;23719:4;23715:12;23746:18;23736:2;;23802:4;23794:6;23790:17;23780:27;;23736:2;23864;23856:6;23853:14;23833:18;23830:38;23827:2;;;23883:18;;:::i;:::-;23827:2;23648:269;;;;:::o;23923:233::-;;23985:24;24003:5;23985:24;:::i;:::-;23976:33;;24031:66;24024:5;24021:77;24018:2;;;24101:18;;:::i;:::-;24018:2;24148:1;24141:5;24137:13;24130:20;;23966:190;;;:::o;24162:180::-;24210:77;24207:1;24200:88;24307:4;24304:1;24297:15;24331:4;24328:1;24321:15;24348:180;24396:77;24393:1;24386:88;24493:4;24490:1;24483:15;24517:4;24514:1;24507:15;24534:180;24582:77;24579:1;24572:88;24679:4;24676:1;24669:15;24703:4;24700:1;24693:15;24720:102;;24812:2;24808:7;24803:2;24796:5;24792:14;24788:28;24778:38;;24768:54;;;:::o;24828:227::-;24968:34;24964:1;24956:6;24952:14;24945:58;25037:10;25032:2;25024:6;25020:15;25013:35;24934:121;:::o;25061:225::-;25201:34;25197:1;25189:6;25185:14;25178:58;25270:8;25265:2;25257:6;25253:15;25246:33;25167:119;:::o;25292:291::-;25432:34;25428:1;25420:6;25416:14;25409:58;25501:34;25496:2;25488:6;25484:15;25477:59;25570:5;25565:2;25557:6;25553:15;25546:30;25398:185;:::o;25589:230::-;25729:34;25725:1;25717:6;25713:14;25706:58;25798:13;25793:2;25785:6;25781:15;25774:38;25695:124;:::o;25825:241::-;25965:34;25961:1;25953:6;25949:14;25942:58;26034:24;26029:2;26021:6;26017:15;26010:49;25931:135;:::o;26072:241::-;26212:34;26208:1;26200:6;26196:14;26189:58;26281:24;26276:2;26268:6;26264:15;26257:49;26178:135;:::o;26319:229::-;26459:34;26455:1;26447:6;26443:14;26436:58;26528:12;26523:2;26515:6;26511:15;26504:37;26425:123;:::o;26554:227::-;26694:34;26690:1;26682:6;26678:14;26671:58;26763:10;26758:2;26750:6;26746:15;26739:35;26660:121;:::o;26787:182::-;26927:34;26923:1;26915:6;26911:14;26904:58;26893:76;:::o;26975:228::-;27115:34;27111:1;27103:6;27099:14;27092:58;27184:11;27179:2;27171:6;27167:15;27160:36;27081:122;:::o;27209:293::-;27349:34;27345:1;27337:6;27333:14;27326:58;27418:34;27413:2;27405:6;27401:15;27394:59;27487:7;27482:2;27474:6;27470:15;27463:32;27315:187;:::o;27508:233::-;27648:34;27644:1;27636:6;27632:14;27625:58;27717:16;27712:2;27704:6;27700:15;27693:41;27614:127;:::o;27747:243::-;27887:34;27883:1;27875:6;27871:14;27864:58;27956:26;27951:2;27943:6;27939:15;27932:51;27853:137;:::o;27996:122::-;28069:24;28087:5;28069:24;:::i;:::-;28062:5;28059:35;28049:2;;28108:1;28105;28098:12;28049:2;28039:79;:::o;28124:116::-;28194:21;28209:5;28194:21;:::i;:::-;28187:5;28184:32;28174:2;;28230:1;28227;28220:12;28174:2;28164:76;:::o;28246:122::-;28319:24;28337:5;28319:24;:::i;:::-;28312:5;28309:35;28299:2;;28358:1;28355;28348:12;28299:2;28289:79;:::o;28374:118::-;28445:22;28461:5;28445:22;:::i;:::-;28438:5;28435:33;28425:2;;28482:1;28479;28472:12;28425:2;28415:77;:::o
Metadata Hash
42c08c3358c3cc7952e8af0828c2aeeb7c45ac98f6de6505cabce141947bfaca
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.