Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Rebalance And Bu... | 6512974 | 8 days ago | IN | 0 S | 0.00629715 | ||||
Approve | 6512605 | 8 days ago | IN | 0 S | 0.00248235 | ||||
Approve | 6512602 | 8 days ago | IN | 0 S | 0.00273108 | ||||
Approve | 6512378 | 8 days ago | IN | 0 S | 0.00273108 | ||||
Exclude From Fee | 6512298 | 8 days ago | IN | 0 S | 0.00276815 | ||||
Exclude Account | 6512288 | 8 days ago | IN | 0 S | 0.00697554 | ||||
Approve | 6511988 | 8 days ago | IN | 0 S | 0.00248235 | ||||
Approve | 6511980 | 8 days ago | IN | 0 S | 0.00282987 |
Loading...
Loading
Contract Name:
DIAMONDS
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-04 */ /** *Submitted for verification at Etherscan.io on 2022-02-23 */ // SPDX-License-Identifier: Unlicensed // Inspired by https://reflect.finance/ pragma solidity 0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); 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); } } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract DIAMONDS is Context, IERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; using Address for address; struct Fees { uint256 reflectFee; uint256 rebalanceFee; uint256 burnFee; } address private DiamondsAddress; address private immutable LCX; IUniswapV2Router02 public immutable UniswapV2Router; // IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; address private constant deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1e16; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "Equalizer Diamonds"; string private constant _symbol = "TEST2 DIAMONDS"; uint8 private constant _decimals = 9; uint256 private _reflectionFee = 70; uint256 private _rebalancingFee = 0; uint256 private _burningFee = 60; event RebalanceAndBurn(uint256, uint256, uint256); event SetDiamondsAddress(address); event ApproveDiamondsAddress(address, address, uint256); event ExcludeAccount(address); event IncludeAccount(address); event ChangeReflectionFee(uint256); event ChangeReBalancingFee(uint256); event ChangeBurnFee(uint256); event ExcludeFromFee(address); event IncludeInFee(address); constructor(address _lcxAddress, address _uniswapV2Address) { require(_lcxAddress != address(0), "Address should not be zero address"); require(_uniswapV2Address != address(0), "Address should not be zero address"); LCX = _lcxAddress; UniswapV2Router = IUniswapV2Router02(_uniswapV2Address); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_uniswapV2Address] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function setDiamondsAddress(address _diamonds) external onlyOwner { require(_diamonds != address(0), "Address should not be zero address"); DiamondsAddress = address(_diamonds); emit SetDiamondsAddress(_diamonds); } function approveDiamondSC() external onlyOwner returns (bool) { _approve(msg.sender, DiamondsAddress, _tTotal); emit ApproveDiamondsAddress(msg.sender, DiamondsAddress, _tTotal); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcluded(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflect(uint256 tAmount) external { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); emit ExcludeAccount(account); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } emit IncludeAccount(account); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 currentReflectionFee = _reflectionFee; uint256 currentRebalancingFee = _rebalancingFee; uint256 currentBurningFee = _burningFee; if (_isExcludedFromFee[sender]) { _reflectionFee = 0; _rebalancingFee = 0; _burningFee = 0; } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { _reflectionFee = currentReflectionFee; _rebalancingFee = currentRebalancingFee; _burningFee = currentBurningFee; } } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rReflectFee, uint256 tReflectFee) private { _rTotal = _rTotal.sub(rReflectFee); _tFeeTotal = _tFeeTotal.add(tReflectFee); } function _reBalanceFee(uint256 rRebalanceFee, uint256 tRebalanceFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rRebalanceFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tRebalanceFee); } function _burnFee(uint256 rBurnFee, uint256 tBurnFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rBurnFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tBurnFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, Fees memory, uint256, Fees memory ) { (uint256 tTransferAmount, Fees memory tFees) = _getTValues(tAmount); uint256 currentRate = _getRate(); ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees ) = _getRValues(tAmount, tFees, currentRate); return (rAmount, rTransferAmount, rFees, tTransferAmount, tFees); } function _getTValues(uint256 tAmount) private view returns (uint256, Fees memory) { Fees memory tFees; tFees.reflectFee = tAmount.mul(_reflectionFee).div(1000); tFees.rebalanceFee = tAmount.mul(_rebalancingFee).div(1000); tFees.burnFee = tAmount.mul(_burningFee).div(1000); uint256 tTransferAmount = tAmount .sub(tFees.reflectFee) .sub(tFees.rebalanceFee) .sub(tFees.burnFee); return (tTransferAmount, tFees); } function _getRValues( uint256 tAmount, Fees memory tFees, uint256 currentRate ) private pure returns ( uint256, uint256, Fees memory ) { Fees memory rFees; uint256 rAmount = tAmount.mul(currentRate); rFees.reflectFee = tFees.reflectFee.mul(currentRate); rFees.rebalanceFee = tFees.rebalanceFee.mul(currentRate); rFees.burnFee = tFees.burnFee.mul(currentRate); uint256 rTransferAmount = rAmount .sub(rFees.reflectFee) .sub(rFees.rebalanceFee) .sub(rFees.burnFee); return (rAmount, rTransferAmount, rFees); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function reflectionFee() external view returns (uint256) { return _reflectionFee; } function changeReflectionFee(uint256 _newFee) external onlyOwner returns (bool) { _reflectionFee = _newFee; emit ChangeReflectionFee(_newFee); return true; } function rebalancingFee() external view returns (uint256) { return _rebalancingFee; } function changeReBalancingFee(uint256 _newFee) external onlyOwner returns (bool) { _rebalancingFee = _newFee; emit ChangeReBalancingFee(_newFee); return true; } function burningFee() external view returns (uint256) { return _burningFee; } function changeBurnFee(uint256 _newFee) external onlyOwner returns (bool) { _burningFee = _newFee; emit ChangeBurnFee(_newFee); return true; } function excludeFromFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); return true; } function includeInFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = false; emit IncludeInFee(account); return true; } function rebalanceAndBurn() external nonReentrant returns (bool) { uint256 balanceInContract = balanceOf(address(this)); uint256 rebalanceAmount = balanceInContract.mul(_rebalancingFee).div(_rebalancingFee.add(_burningFee)); uint256 burnAmount = balanceInContract.mul(_burningFee).div(_rebalancingFee.add(_burningFee)); emit RebalanceAndBurn(balanceInContract, rebalanceAmount, burnAmount); if (rebalanceAmount > 0) { _swap(rebalanceAmount); // Only call _swap if rebalanceAmount is greater than zero } _burn(burnAmount); // Burn tokens normally return true; } function _swap(uint256 rebalanceAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = LCX; _approve(address(this), address(UniswapV2Router), rebalanceAmount); UniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( rebalanceAmount, 0, // Accept any amount path, owner(), block.timestamp ); } function _burn(uint256 burnAmount) internal { _transfer(address(this), deadWallet, burnAmount); emit Transfer(address(this), deadWallet, burnAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_lcxAddress","type":"address"},{"internalType":"address","name":"_uniswapV2Address","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":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ApproveDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReBalancingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReflectionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeInFee","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":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RebalanceAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"SetDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveDiamondSC","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":"burningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReBalancingFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_diamonds","type":"address"}],"name":"setDiamondsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052662386f26fc100006000196200001b91906200066b565b6000196200002a9190620005f2565b6009556046600b556000600c55603c600d553480156200004957600080fd5b506040516200568a3803806200568a83398181016040528101906200006f9190620004e8565b6200008f62000083620003dc60201b60201c565b620003e460201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010090620005a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017390620005a2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506009546003600062000201620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000255620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000366620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc10000604051620003cc9190620005c4565b60405180910390a350506200071b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620004e28162000701565b92915050565b60008060408385031215620004fc57600080fd5b60006200050c85828601620004d1565b92505060206200051f85828601620004d1565b9150509250929050565b600062000538602283620005e1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6200059c8162000661565b82525050565b60006020820190508181036000830152620005bd8162000529565b9050919050565b6000602082019050620005db600083018462000591565b92915050565b600082825260208201905092915050565b6000620005ff8262000661565b91506200060c8362000661565b925082821015620006225762000621620006a3565b5b828203905092915050565b60006200063a8262000641565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620006788262000661565b9150620006858362000661565b925082620006985762000697620006d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200070c816200062d565b81146200071857600080fd5b50565b60805160601c60a05160601c614f35620007556000396000818161084a01528181612b360152612b5d01526000612a9d0152614f356000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600e81526020017f5445535432204449414d4f4e4453000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000000000000000000000000000000000000000000084612133565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e84085b09fe9de57a60ff0e0d4dac8e988cca97b1ae45f66db40b58814e99af64736f6c63430008000033000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad81565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600e81526020017f5445535432204449414d4f4e4453000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad84612133565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e84085b09fe9de57a60ff0e0d4dac8e988cca97b1ae45f66db40b58814e99af64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
-----Decoded View---------------
Arg [0] : _lcxAddress (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
Arg [1] : _uniswapV2Address (address): 0xcC6169aA1E879d3a4227536671F85afdb2d23fAD
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Arg [1] : 000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
Deployed Bytecode Sourcemap
23223:18662:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28651:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23551:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25567:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26567:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28554:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25850:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27258:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39201:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26770:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29563:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25757:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27714:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39537:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40050:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29078:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25955:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14142:103;;;:::i;:::-;;40599:621;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27025:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39096:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13491:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39769:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25660:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28024:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26161:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28434:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26373:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40326:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29893:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14400:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30271:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39430:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39868:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28651:419;28705:14;28722:12;:10;:12::i;:::-;28705:29;;28768:11;:19;28780:6;28768:19;;;;;;;;;;;;;;;;;;;;;;;;;28767:20;28745:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28871:15;28898:19;28909:7;28898:10;:19::i;:::-;28870:47;;;;;;28946:28;28966:7;28946;:15;28954:6;28946:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28928:7;:15;28936:6;28928:15;;;;;;;;;;;;;;;:46;;;;28995:20;29007:7;28995;;:11;;:20;;;;:::i;:::-;28985:7;:30;;;;29039:23;29054:7;29039:10;;:14;;:23;;;;:::i;:::-;29026:10;:36;;;;28651:419;;;:::o;23551:51::-;;;:::o;25567:85::-;25606:13;25639:5;;;;;;;;;;;;;;;;;25632:12;;25567:85;:::o;26567:195::-;26671:4;26693:39;26702:12;:10;:12::i;:::-;26716:7;26725:6;26693:8;:39::i;:::-;26750:4;26743:11;;26567:195;;;;:::o;28554:89::-;28598:7;28625:10;;28618:17;;28554:89;:::o;25850:97::-;25905:7;24175:4;25925:14;;25850:97;:::o;27258:448::-;27392:4;27409:36;27419:6;27427:9;27438:6;27409:9;:36::i;:::-;27456:220;27479:6;27500:12;:10;:12::i;:::-;27527:138;27583:6;27527:138;;;;;;;;;;;;;;;;;:11;:19;27539:6;27527:19;;;;;;;;;;;;;;;:33;27547:12;:10;:12::i;:::-;27527:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27456:8;:220::i;:::-;27694:4;27687:11;;27258:448;;;;;:::o;39201:221::-;39302:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:7:::1;39324:14;:24;;;;39364:28;39384:7;39364:28;;;;;;:::i;:::-;;;;;;;;39410:4;39403:11;;39201:221:::0;;;:::o;26770:247::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26876:1:::1;26855:23;;:9;:23;;;;26847:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26954:9;26928:15;;:36;;;;;;;;;;;;;;;;;;26980:29;26999:9;26980:29;;;;;;:::i;:::-;;;;;;;;26770:247:::0;:::o;29563:322::-;29657:7;29715;;29704;:18;;29682:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29803:19;29825:10;:8;:10::i;:::-;29803:32;;29853:24;29865:11;29853:7;:11;;:24;;;;:::i;:::-;29846:31;;;29563:322;;;:::o;25757:85::-;25800:5;24428:1;25818:16;;25757:85;:::o;27714:302::-;27831:4;27853:133;27876:12;:10;:12::i;:::-;27903:7;27925:50;27964:10;27925:11;:25;27937:12;:10;:12::i;:::-;27925:25;;;;;;;;;;;;;;;:34;27951:7;27925:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27853:8;:133::i;:::-;28004:4;27997:11;;27714:302;;;;:::o;39537:224::-;39639:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39679:7:::1;39661:15;:25;;;;39702:29;39723:7;39702:29;;;;;;:::i;:::-;;;;;;;;39749:4;39742:11;;39537:224:::0;;;:::o;40050:268::-;40119:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40163:1:::1;40144:21;;:7;:21;;;;40136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40245:4;40215:18;:27;40234:7;40215:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40265:23;40280:7;40265:23;;;;;;:::i;:::-;;;;;;;;40306:4;40299:11;;40050:268:::0;;;:::o;29078:477::-;29198:7;24175:4;29231:7;:18;;29223:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29301:17;29296:252;;29336:15;29363:19;29374:7;29363:10;:19::i;:::-;29335:47;;;;;;29404:7;29397:14;;;;;29296:252;29447:23;29480:19;29491:7;29480:10;:19::i;:::-;29444:55;;;;;;29521:15;29514:22;;;29078:477;;;;;:::o;25955:198::-;26021:7;26045:11;:20;26057:7;26045:20;;;;;;;;;;;;;;;;;;;;;;;;;26041:49;;;26074:7;:16;26082:7;26074:16;;;;;;;;;;;;;;;;26067:23;;;;26041:49;26108:37;26128:7;:16;26136:7;26128:16;;;;;;;;;;;;;;;;26108:19;:37::i;:::-;26101:44;;25955:198;;;;:::o;14142:103::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14207:30:::1;14234:1;14207:18;:30::i;:::-;14142:103::o:0;40599:621::-;40658:4;16610:1;17208:7;;:19;;17200:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16610:1;17341:7;:18;;;;40671:25:::1;40699:24;40717:4;40699:9;:24::i;:::-;40671:52;;40730:23;40756:76;40799:32;40819:11;;40799:15;;:19;;:32;;;;:::i;:::-;40756:38;40778:15;;40756:17;:21;;:38;;;;:::i;:::-;:42;;:76;;;;:::i;:::-;40730:102;;40839:18;40860:72;40899:32;40919:11;;40899:15;;:19;;:32;;;;:::i;:::-;40860:34;40882:11;;40860:17;:21;;:34;;;;:::i;:::-;:38;;:72;;;;:::i;:::-;40839:93;;40946:64;40963:17;40982:15;40999:10;40946:64;;;;;;;;:::i;:::-;;;;;;;;41041:1;41023:15;:19;41019:126;;;41055:22;41061:15;41055:5;:22::i;:::-;41019:126;41151:17;41157:10;41151:5;:17::i;:::-;41208:4;41201:11;;;;;16566:1:::0;17520:7;:22;;;;40599:621;:::o;27025:225::-;27081:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27098:46:::1;27107:10;27119:15;;;;;;;;;;;24175:4;27098:8;:46::i;:::-;27160:60;27183:10;27195:15;;;;;;;;;;;24175:4;27160:60;;;;;;;;:::i;:::-;;;;;;;;27238:4;27231:11;;27025:225:::0;:::o;39096:97::-;39144:7;39171:14;;39164:21;;39096:97;:::o;13491:87::-;13537:7;13564:6;;;;;;;;;;;13557:13;;13491:87;:::o;39769:91::-;39814:7;39841:11;;39834:18;;39769:91;:::o;25660:89::-;25701:13;25734:7;;;;;;;;;;;;;;;;;25727:14;;25660:89;:::o;28024:402::-;28146:4;28168:228;28191:12;:10;:12::i;:::-;28218:7;28240:145;28297:15;28240:145;;;;;;;;;;;;;;;;;:11;:25;28252:12;:10;:12::i;:::-;28240:25;;;;;;;;;;;;;;;:34;28266:7;28240:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28168:8;:228::i;:::-;28414:4;28407:11;;28024:402;;;;:::o;26161:204::-;26268:4;26293:42;26303:12;:10;:12::i;:::-;26317:9;26328:6;26293:9;:42::i;:::-;26353:4;26346:11;;26161:204;;;;:::o;28434:112::-;28494:4;28518:11;:20;28530:7;28518:20;;;;;;;;;;;;;;;;;;;;;;;;;28511:27;;28434:112;;;:::o;26373:186::-;26492:7;26524:11;:18;26536:5;26524:18;;;;;;;;;;;;;;;:27;26543:7;26524:27;;;;;;;;;;;;;;;;26517:34;;26373:186;;;;:::o;40326:265::-;40393:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40437:1:::1;40418:21;;:7;:21;;;;40410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40519:5;40489:18;:27;40508:7;40489:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40540:21;40553:7;40540:21;;;;;;:::i;:::-;;;;;;;;40579:4;40572:11;;40326:265:::0;;;:::o;29893:370::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29973:11:::1;:20;29985:7;29973:20;;;;;;;;;;;;;;;;;;;;;;;;;29972:21;29964:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30059:1;30040:7;:16;30048:7;30040:16;;;;;;;;;;;;;;;;:20;30036:109;;;30096:37;30116:7;:16;30124:7;30116:16;;;;;;;;;;;;;;;;30096:19;:37::i;:::-;30077:7;:16;30085:7;30077:16;;;;;;;;;;;;;;;:56;;;;30036:109;30178:4;30155:11;:20;30167:7;30155:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30193:9;30208:7;30193:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30232;30247:7;30232:23;;;;;;:::i;:::-;;;;;;;;29893:370:::0;:::o;14400:201::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14509:1:::1;14489:22;;:8;:22;;;;14481:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14565:28;14584:8;14565:18;:28::i;:::-;14400:201:::0;:::o;30271:511::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30350:11:::1;:20;30362:7;30350:20;;;;;;;;;;;;;;;;;;;;;;;;;30342:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30414:9;30409:327;30433:9;:16;;;;30429:1;:20;30409:327;;;30491:7;30475:23;;:9;30485:1;30475:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30471:254;;;30534:9;30563:1;30544:9;:16;;;;:20;;;;:::i;:::-;30534:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30519:9;30529:1;30519:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30603:1;30584:7;:16;30592:7;30584:16;;;;;;;;;;;;;;;:20;;;;30646:5;30623:11;:20;30635:7;30623:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30670:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30704:5;;30471:254;30451:3;;;;;:::i;:::-;;;;30409:327;;;;30751:23;30766:7;30751:23;;;;;;:::i;:::-;;;;;;;;30271:511:::0;:::o;39430:99::-;39479:7;39506:15;;39499:22;;39430:99;:::o;39868:174::-;39936:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39967:7:::1;39953:11;:21;;;;39990:22;40004:7;39990:22;;;;;;:::i;:::-;;;;;;;;40030:4;40023:11;;39868:174:::0;;;:::o;5040:98::-;5093:7;5120:10;5113:17;;5040:98;:::o;36432:589::-;36532:7;36554;36576:11;;:::i;:::-;36602:7;36624:11;;:::i;:::-;36664:23;36689:17;36710:20;36722:7;36710:11;:20::i;:::-;36663:67;;;;36741:19;36763:10;:8;:10::i;:::-;36741:32;;36799:15;36829:23;36867:17;36898:40;36910:7;36919:5;36926:11;36898;:40::i;:::-;36784:154;;;;;;36957:7;36966:15;36983:5;36990:15;37007:5;36949:64;;;;;;;;;;;;;;;;36432:589;;;;;;;:::o;909:136::-;967:7;994:43;998:1;1001;994:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;987:50;;909:136;;;;:::o;445:181::-;503:7;523:9;539:1;535;:5;;;;:::i;:::-;523:17;;564:1;559;:6;;551:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;617:1;610:8;;;445:181;;;;:::o;30790:371::-;30934:1;30917:19;;:5;:19;;;;30909:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31015:1;30996:21;;:7;:21;;;;30988:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31099:6;31069:11;:18;31081:5;31069:18;;;;;;;;;;;;;;;:27;31088:7;31069:27;;;;;;;;;;;;;;;:36;;;;31137:7;31121:32;;31130:5;31121:32;;;31146:6;31121:32;;;;;;:::i;:::-;;;;;;;;30790:371;;;:::o;31169:1393::-;31318:1;31300:20;;:6;:20;;;;31292:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31402:1;31381:23;;:9;:23;;;;31373:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:1;31463:6;:10;31455:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31530:28;31561:14;;31530:45;;31586:29;31618:15;;31586:47;;31644:25;31672:11;;31644:39;;31698:18;:26;31717:6;31698:26;;;;;;;;;;;;;;;;;;;;;;;;;31694:141;;;31758:1;31741:14;:18;;;;31792:1;31774:15;:19;;;;31822:1;31808:11;:15;;;;31694:141;31851:11;:19;31863:6;31851:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31875:11;:22;31887:9;31875:22;;;;;;;;;;;;;;;;;;;;;;;;;31874:23;31851:46;31847:467;;;31914:48;31936:6;31944:9;31955:6;31914:21;:48::i;:::-;31847:467;;;31985:11;:19;31997:6;31985:19;;;;;;;;;;;;;;;;;;;;;;;;;31984:20;:46;;;;;32008:11;:22;32020:9;32008:22;;;;;;;;;;;;;;;;;;;;;;;;;31984:46;31980:334;;;32047:46;32067:6;32075:9;32086:6;32047:19;:46::i;:::-;31980:334;;;32115:11;:19;32127:6;32115:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32138:11;:22;32150:9;32138:22;;;;;;;;;;;;;;;;;;;;;;;;;32115:45;32111:203;;;32177:48;32199:6;32207:9;32218:6;32177:21;:48::i;:::-;32111:203;;;32258:44;32276:6;32284:9;32295:6;32258:17;:44::i;:::-;32111:203;31980:334;31847:467;32330:18;:26;32349:6;32330:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;32360:18;:29;32379:9;32360:29;;;;;;;;;;;;;;;;;;;;;;;;;32330:59;32326:229;;;32423:20;32406:14;:37;;;;32476:21;32458:15;:39;;;;32526:17;32512:11;:31;;;;32326:229;31169:1393;;;;;;:::o;1348:226::-;1468:7;1501:1;1496;:6;;1504:12;1488:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1528:9;1544:1;1540;:5;;;;:::i;:::-;1528:17;;1565:1;1558:8;;;1348:226;;;;;:::o;38311:164::-;38353:7;38374:15;38391;38410:19;:17;:19::i;:::-;38373:56;;;;38447:20;38459:7;38447;:11;;:20;;;;:::i;:::-;38440:27;;;;38311:164;:::o;2780:132::-;2838:7;2865:39;2869:1;2872;2865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2858:46;;2780:132;;;;:::o;14761:191::-;14835:16;14854:6;;;;;;;;;;;14835:25;;14880:8;14871:6;;:17;;;;;;;;;;;;;;;;;;14935:8;14904:40;;14925:8;14904:40;;;;;;;;;;;;14761:191;;:::o;1833:471::-;1891:7;2141:1;2136;:6;2132:47;;;2166:1;2159:8;;;;2132:47;2191:9;2207:1;2203;:5;;;;:::i;:::-;2191:17;;2236:1;2231;2227;:5;;;;:::i;:::-;:10;2219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2295:1;2288:8;;;1833:471;;;;;:::o;41228:472::-;41288:21;41326:1;41312:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41288:40;;41357:4;41339;41344:1;41339:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41383:3;41373:4;41378:1;41373:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;41397:66;41414:4;41429:15;41447;41397:8;:66::i;:::-;41474:15;:69;;;41558:15;41588:1;41625:4;41644:7;:5;:7::i;:::-;41666:15;41474:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41228:472;;:::o;41708:174::-;41763:48;41781:4;24040:42;41800:10;41763:9;:48::i;:::-;24040:42;41827:47;;41844:4;41827:47;;;41863:10;41827:47;;;;;;:::i;:::-;;;;;;;;41708:174;:::o;37029:541::-;37116:7;37125:11;;:::i;:::-;37154:17;;:::i;:::-;37201:37;37233:4;37201:27;37213:14;;37201:7;:11;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;37182:5;:16;;:56;;;;;37270:38;37303:4;37270:28;37282:15;;37270:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;37249:5;:18;;:59;;;;;37335:34;37364:4;37335:24;37347:11;;37335:7;:11;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;37319:5;:13;;:50;;;;;37380:23;37406:114;37506:5;:13;;;37406:81;37468:5;:18;;;37406:43;37432:5;:16;;;37406:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;37380:140;;37539:15;37556:5;37531:31;;;;;;37029:541;;;:::o;37578:725::-;37753:7;37775;37797:11;;:::i;:::-;37836:17;;:::i;:::-;37864:15;37882:24;37894:11;37882:7;:11;;:24;;;;:::i;:::-;37864:42;;37936:33;37957:11;37936:5;:16;;;:20;;:33;;;;:::i;:::-;37917:5;:16;;:52;;;;;38001:35;38024:11;38001:5;:18;;;:22;;:35;;;;:::i;:::-;37980:5;:18;;:56;;;;;38063:30;38081:11;38063:5;:13;;;:17;;:30;;;;:::i;:::-;38047:5;:13;;:46;;;;;38104:23;38130:114;38230:5;:13;;;38130:81;38192:5;:18;;;38130:43;38156:5;:16;;;38130:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;38104:140;;38263:7;38272:15;38289:5;38255:40;;;;;;;;;37578:725;;;;;;;:::o;34063:763::-;34214:15;34244:23;34282:17;34314:23;34352:17;34383:19;34394:7;34383:10;:19::i;:::-;34199:203;;;;;;;;;;34431:28;34451:7;34431;:15;34439:6;34431:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34413:7;:15;34421:6;34413:15;;;;;;;;;;;;;;;:46;;;;34488:28;34508:7;34488;:15;34496:6;34488:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34470:7;:15;34478:6;34470:15;;;;;;;;;;;;;;;:46;;;;34548:39;34571:15;34548:7;:18;34556:9;34548:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34527:7;:18;34535:9;34527:18;;;;;;;;;;;;;;;:60;;;;34598:47;34610:5;:16;;;34628:5;:16;;;34598:11;:47::i;:::-;34656:53;34670:5;:18;;;34690:5;:18;;;34656:13;:53::i;:::-;34720:38;34729:5;:13;;;34744:5;:13;;;34720:8;:38::i;:::-;34791:9;34774:44;;34783:6;34774:44;;;34802:15;34774:44;;;;;;:::i;:::-;;;;;;;;34063:763;;;;;;;;:::o;33280:775::-;33429:15;33459:23;33497:17;33529:23;33567:17;33598:19;33609:7;33598:10;:19::i;:::-;33414:203;;;;;;;;;;33646:28;33666:7;33646;:15;33654:6;33646:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33628:7;:15;33636:6;33628:15;;;;;;;;;;;;;;;:46;;;;33706:39;33729:15;33706:7;:18;33714:9;33706:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33685:7;:18;33693:9;33685:18;;;;;;;;;;;;;;;:60;;;;33777:39;33800:15;33777:7;:18;33785:9;33777:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33756:7;:18;33764:9;33756:18;;;;;;;;;;;;;;;:60;;;;33827:47;33839:5;:16;;;33857:5;:16;;;33827:11;:47::i;:::-;33885:53;33899:5;:18;;;33919:5;:18;;;33885:13;:53::i;:::-;33949:38;33958:5;:13;;;33973:5;:13;;;33949:8;:38::i;:::-;34020:9;34003:44;;34012:6;34003:44;;;34031:15;34003:44;;;;;;:::i;:::-;;;;;;;;33280:775;;;;;;;;:::o;34834:834::-;34985:15;35015:23;35053:17;35085:23;35123:17;35154:19;35165:7;35154:10;:19::i;:::-;34970:203;;;;;;;;;;35202:28;35222:7;35202;:15;35210:6;35202:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35184:7;:15;35192:6;35184:15;;;;;;;;;;;;;;;:46;;;;35259:28;35279:7;35259;:15;35267:6;35259:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35241:7;:15;35249:6;35241:15;;;;;;;;;;;;;;;:46;;;;35319:39;35342:15;35319:7;:18;35327:9;35319:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35298:7;:18;35306:9;35298:18;;;;;;;;;;;;;;;:60;;;;35390:39;35413:15;35390:7;:18;35398:9;35390:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35369:7;:18;35377:9;35369:18;;;;;;;;;;;;;;;:60;;;;35440:47;35452:5;:16;;;35470:5;:16;;;35440:11;:47::i;:::-;35498:53;35512:5;:18;;;35532:5;:18;;;35498:13;:53::i;:::-;35562:38;35571:5;:13;;;35586:5;:13;;;35562:8;:38::i;:::-;35633:9;35616:44;;35625:6;35616:44;;;35644:15;35616:44;;;;;;:::i;:::-;;;;;;;;34834:834;;;;;;;;:::o;32570:702::-;32717:15;32747:23;32785:17;32817:23;32855:17;32886:19;32897:7;32886:10;:19::i;:::-;32702:203;;;;;;;;;;32934:28;32954:7;32934;:15;32942:6;32934:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32916:7;:15;32924:6;32916:15;;;;;;;;;;;;;;;:46;;;;32994:39;33017:15;32994:7;:18;33002:9;32994:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32973:7;:18;32981:9;32973:18;;;;;;;;;;;;;;;:60;;;;33044:47;33056:5;:16;;;33074:5;:16;;;33044:11;:47::i;:::-;33102:53;33116:5;:18;;;33136:5;:18;;;33102:13;:53::i;:::-;33166:38;33175:5;:13;;;33190:5;:13;;;33166:8;:38::i;:::-;33237:9;33220:44;;33229:6;33220:44;;;33248:15;33220:44;;;;;;:::i;:::-;;;;;;;;32570:702;;;;;;;;:::o;38483:605::-;38534:7;38543;38563:15;38581:7;;38563:25;;38599:15;24175:4;38599:25;;38640:9;38635:338;38659:9;:16;;;;38655:1;:20;38635:338;;;38743:7;38719;:21;38727:9;38737:1;38727:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38719:21;;;;;;;;;;;;;;;;:31;:83;;;;38795:7;38771;:21;38779:9;38789:1;38779:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38771:21;;;;;;;;;;;;;;;;:31;38719:83;38697:146;;;38826:7;;24175:4;38818:25;;;;;;;;;38697:146;38868:34;38880:7;:21;38888:9;38898:1;38888:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38880:21;;;;;;;;;;;;;;;;38868:7;:11;;:34;;;;:::i;:::-;38858:44;;38927:34;38939:7;:21;38947:9;38957:1;38947:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38939:21;;;;;;;;;;;;;;;;38927:7;:11;;:34;;;;:::i;:::-;38917:44;;38677:3;;;;;:::i;:::-;;;;38635:338;;;;38997:20;24175:4;38997:7;;:11;;:20;;;;:::i;:::-;38987:7;:30;38983:61;;;39027:7;;24175:4;39019:25;;;;;;;;38983:61;39063:7;39072;39055:25;;;;;;38483:605;;;:::o;3408:312::-;3528:7;3560:1;3556;:5;3563:12;3548:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3587:9;3603:1;3599;:5;;;;:::i;:::-;3587:17;;3711:1;3704:8;;;3408:312;;;;;:::o;35676:175::-;35768:24;35780:11;35768:7;;:11;;:24;;;;:::i;:::-;35758:7;:34;;;;35816:27;35831:11;35816:10;;:14;;:27;;;;:::i;:::-;35803:10;:40;;;;35676:175;;:::o;35859:298::-;35986:41;36013:13;35986:7;:22;36002:4;35986:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;35961:7;:22;35977:4;35961:22;;;;;;;;;;;;;;;:66;;;;36042:11;:26;36062:4;36042:26;;;;;;;;;;;;;;;;;;;;;;;;;36038:111;;;36108:41;36135:13;36108:7;:22;36124:4;36108:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;36083:7;:22;36099:4;36083:22;;;;;;;;;;;;;;;:66;;;;36038:111;35859:298;;:::o;36165:259::-;36263:36;36290:8;36263:7;:22;36279:4;36263:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36238:7;:22;36254:4;36238:22;;;;;;;;;;;;;;;:61;;;;36314:11;:26;36334:4;36314:26;;;;;;;;;;;;;;;;;;;;;;;;;36310:106;;;36380:36;36407:8;36380:7;:22;36396:4;36380:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36355:7;:22;36371:4;36355:22;;;;;;;;;;;;;;;:61;;;;36310:106;36165:259;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:179::-;;2853:46;2895:3;2887:6;2853:46;:::i;:::-;2931:4;2926:3;2922:14;2908:28;;2843:99;;;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3216:732::-;;3364:54;3412:5;3364:54;:::i;:::-;3434:86;3513:6;3508:3;3434:86;:::i;:::-;3427:93;;3544:56;3594:5;3544:56;:::i;:::-;3623:7;3654:1;3639:284;3664:6;3661:1;3658:13;3639:284;;;3740:6;3734:13;3767:63;3826:3;3811:13;3767:63;:::i;:::-;3760:70;;3853:60;3906:6;3853:60;:::i;:::-;3843:70;;3699:224;3686:1;3683;3679:9;3674:14;;3639:284;;;3643:14;3939:3;3932:10;;3340:608;;;;;;;:::o;3954:109::-;4035:21;4050:5;4035:21;:::i;:::-;4030:3;4023:34;4013:50;;:::o;4069:185::-;4183:64;4241:5;4183:64;:::i;:::-;4178:3;4171:77;4161:93;;:::o;4260:147::-;4355:45;4394:5;4355:45;:::i;:::-;4350:3;4343:58;4333:74;;:::o;4413:364::-;;4529:39;4562:5;4529:39;:::i;:::-;4584:71;4648:6;4643:3;4584:71;:::i;:::-;4577:78;;4664:52;4709:6;4704:3;4697:4;4690:5;4686:16;4664:52;:::i;:::-;4741:29;4763:6;4741:29;:::i;:::-;4736:3;4732:39;4725:46;;4505:272;;;;;:::o;4783:367::-;;4946:67;5010:2;5005:3;4946:67;:::i;:::-;4939:74;;5043:34;5039:1;5034:3;5030:11;5023:55;5109:5;5104:2;5099:3;5095:12;5088:27;5141:2;5136:3;5132:12;5125:19;;4929:221;;;:::o;5156:374::-;;5319:67;5383:2;5378:3;5319:67;:::i;:::-;5312:74;;5416:34;5412:1;5407:3;5403:11;5396:55;5482:12;5477:2;5472:3;5468:12;5461:34;5521:2;5516:3;5512:12;5505:19;;5302:228;;;:::o;5536:370::-;;5699:67;5763:2;5758:3;5699:67;:::i;:::-;5692:74;;5796:34;5792:1;5787:3;5783:11;5776:55;5862:8;5857:2;5852:3;5848:12;5841:30;5897:2;5892:3;5888:12;5881:19;;5682:224;;;:::o;5912:366::-;;6075:67;6139:2;6134:3;6075:67;:::i;:::-;6068:74;;6172:34;6168:1;6163:3;6159:11;6152:55;6238:4;6233:2;6228:3;6224:12;6217:26;6269:2;6264:3;6260:12;6253:19;;6058:220;;;:::o;6284:366::-;;6447:67;6511:2;6506:3;6447:67;:::i;:::-;6440:74;;6544:34;6540:1;6535:3;6531:11;6524:55;6610:4;6605:2;6600:3;6596:12;6589:26;6641:2;6636:3;6632:12;6625:19;;6430:220;;;:::o;6656:325::-;;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6916:29;6912:1;6907:3;6903:11;6896:50;6972:2;6967:3;6963:12;6956:19;;6802:179;;;:::o;6987:325::-;;7150:67;7214:2;7209:3;7150:67;:::i;:::-;7143:74;;7247:29;7243:1;7238:3;7234:11;7227:50;7303:2;7298:3;7294:12;7287:19;;7133:179;;;:::o;7318:321::-;;7481:67;7545:2;7540:3;7481:67;:::i;:::-;7474:74;;7578:25;7574:1;7569:3;7565:11;7558:46;7630:2;7625:3;7621:12;7614:19;;7464:175;;;:::o;7645:329::-;;7808:67;7872:2;7867:3;7808:67;:::i;:::-;7801:74;;7905:33;7901:1;7896:3;7892:11;7885:54;7965:2;7960:3;7956:12;7949:19;;7791:183;;;:::o;7980:366::-;;8143:67;8207:2;8202:3;8143:67;:::i;:::-;8136:74;;8240:34;8236:1;8231:3;8227:11;8220:55;8306:4;8301:2;8296:3;8292:12;8285:26;8337:2;8332:3;8328:12;8321:19;;8126:220;;;:::o;8352:365::-;;8515:67;8579:2;8574:3;8515:67;:::i;:::-;8508:74;;8612:34;8608:1;8603:3;8599:11;8592:55;8678:3;8673:2;8668:3;8664:12;8657:25;8708:2;8703:3;8699:12;8692:19;;8498:219;;;:::o;8723:330::-;;8886:67;8950:2;8945:3;8886:67;:::i;:::-;8879:74;;8983:34;8979:1;8974:3;8970:11;8963:55;9044:2;9039:3;9035:12;9028:19;;8869:184;;;:::o;9059:373::-;;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9319:34;9315:1;9310:3;9306:11;9299:55;9385:11;9380:2;9375:3;9371:12;9364:33;9423:2;9418:3;9414:12;9407:19;;9205:227;;;:::o;9438:369::-;;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9698:34;9694:1;9689:3;9685:11;9678:55;9764:7;9759:2;9754:3;9750:12;9743:29;9798:2;9793:3;9789:12;9782:19;;9584:223;;;:::o;9813:368::-;;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10073:34;10069:1;10064:3;10060:11;10053:55;10139:6;10134:2;10129:3;10125:12;10118:28;10172:2;10167:3;10163:12;10156:19;;9959:222;;;:::o;10187:329::-;;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10447:33;10443:1;10438:3;10434:11;10427:54;10507:2;10502:3;10498:12;10491:19;;10333:183;;;:::o;10522:376::-;;10685:67;10749:2;10744:3;10685:67;:::i;:::-;10678:74;;10782:34;10778:1;10773:3;10769:11;10762:55;10848:14;10843:2;10838:3;10834:12;10827:36;10889:2;10884:3;10880:12;10873:19;;10668:230;;;:::o;10904:118::-;10991:24;11009:5;10991:24;:::i;:::-;10986:3;10979:37;10969:53;;:::o;11028:112::-;11111:22;11127:5;11111:22;:::i;:::-;11106:3;11099:35;11089:51;;:::o;11146:222::-;;11277:2;11266:9;11262:18;11254:26;;11290:71;11358:1;11347:9;11343:17;11334:6;11290:71;:::i;:::-;11244:124;;;;:::o;11374:442::-;;11561:2;11550:9;11546:18;11538:26;;11574:71;11642:1;11631:9;11627:17;11618:6;11574:71;:::i;:::-;11655:72;11723:2;11712:9;11708:18;11699:6;11655:72;:::i;:::-;11737;11805:2;11794:9;11790:18;11781:6;11737:72;:::i;:::-;11528:288;;;;;;:::o;11822:210::-;;11947:2;11936:9;11932:18;11924:26;;11960:65;12022:1;12011:9;12007:17;11998:6;11960:65;:::i;:::-;11914:118;;;;:::o;12038:276::-;;12196:2;12185:9;12181:18;12173:26;;12209:98;12304:1;12293:9;12289:17;12280:6;12209:98;:::i;:::-;12163:151;;;;:::o;12320:313::-;;12471:2;12460:9;12456:18;12448:26;;12520:9;12514:4;12510:20;12506:1;12495:9;12491:17;12484:47;12548:78;12621:4;12612:6;12548:78;:::i;:::-;12540:86;;12438:195;;;;:::o;12639:419::-;;12843:2;12832:9;12828:18;12820:26;;12892:9;12886:4;12882:20;12878:1;12867:9;12863:17;12856:47;12920:131;13046:4;12920:131;:::i;:::-;12912:139;;12810:248;;;:::o;13064:419::-;;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13235:248;;;:::o;13489:419::-;;13693:2;13682:9;13678:18;13670:26;;13742:9;13736:4;13732:20;13728:1;13717:9;13713:17;13706:47;13770:131;13896:4;13770:131;:::i;:::-;13762:139;;13660:248;;;:::o;13914:419::-;;14118:2;14107:9;14103:18;14095:26;;14167:9;14161:4;14157:20;14153:1;14142:9;14138:17;14131:47;14195:131;14321:4;14195:131;:::i;:::-;14187:139;;14085:248;;;:::o;14339:419::-;;14543:2;14532:9;14528:18;14520:26;;14592:9;14586:4;14582:20;14578:1;14567:9;14563:17;14556:47;14620:131;14746:4;14620:131;:::i;:::-;14612:139;;14510:248;;;:::o;14764:419::-;;14968:2;14957:9;14953:18;14945:26;;15017:9;15011:4;15007:20;15003:1;14992:9;14988:17;14981:47;15045:131;15171:4;15045:131;:::i;:::-;15037:139;;14935:248;;;:::o;15189:419::-;;15393:2;15382:9;15378:18;15370:26;;15442:9;15436:4;15432:20;15428:1;15417:9;15413:17;15406:47;15470:131;15596:4;15470:131;:::i;:::-;15462:139;;15360:248;;;:::o;15614:419::-;;15818:2;15807:9;15803:18;15795:26;;15867:9;15861:4;15857:20;15853:1;15842:9;15838:17;15831:47;15895:131;16021:4;15895:131;:::i;:::-;15887:139;;15785:248;;;:::o;16039:419::-;;16243:2;16232:9;16228:18;16220:26;;16292:9;16286:4;16282:20;16278:1;16267:9;16263:17;16256:47;16320:131;16446:4;16320:131;:::i;:::-;16312:139;;16210:248;;;:::o;16464:419::-;;16668:2;16657:9;16653:18;16645:26;;16717:9;16711:4;16707:20;16703:1;16692:9;16688:17;16681:47;16745:131;16871:4;16745:131;:::i;:::-;16737:139;;16635:248;;;:::o;16889:419::-;;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;17060:248;;;:::o;17314:419::-;;17518:2;17507:9;17503:18;17495:26;;17567:9;17561:4;17557:20;17553:1;17542:9;17538:17;17531:47;17595:131;17721:4;17595:131;:::i;:::-;17587:139;;17485:248;;;:::o;17739:419::-;;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17910:248;;;:::o;18164:419::-;;18368:2;18357:9;18353:18;18345:26;;18417:9;18411:4;18407:20;18403:1;18392:9;18388:17;18381:47;18445:131;18571:4;18445:131;:::i;:::-;18437:139;;18335:248;;;:::o;18589:419::-;;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18760:248;;;:::o;19014:419::-;;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19185:248;;;:::o;19439:419::-;;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19610:248;;;:::o;19864:222::-;;19995:2;19984:9;19980:18;19972:26;;20008:71;20076:1;20065:9;20061:17;20052:6;20008:71;:::i;:::-;19962:124;;;;:::o;20092:831::-;;20393:3;20382:9;20378:19;20370:27;;20407:71;20475:1;20464:9;20460:17;20451:6;20407:71;:::i;:::-;20488:80;20564:2;20553:9;20549:18;20540:6;20488:80;:::i;:::-;20615:9;20609:4;20605:20;20600:2;20589:9;20585:18;20578:48;20643:108;20746:4;20737:6;20643:108;:::i;:::-;20635:116;;20761:72;20829:2;20818:9;20814:18;20805:6;20761:72;:::i;:::-;20843:73;20911:3;20900:9;20896:19;20887:6;20843:73;:::i;:::-;20360:563;;;;;;;;:::o;20929:442::-;;21116:2;21105:9;21101:18;21093:26;;21129:71;21197:1;21186:9;21182:17;21173:6;21129:71;:::i;:::-;21210:72;21278:2;21267:9;21263:18;21254:6;21210:72;:::i;:::-;21292;21360:2;21349:9;21345:18;21336:6;21292:72;:::i;:::-;21083:288;;;;;;:::o;21377:214::-;;21504:2;21493:9;21489:18;21481:26;;21517:67;21581:1;21570:9;21566:17;21557:6;21517:67;:::i;:::-;21471:120;;;;:::o;21597:132::-;;21687:3;21679:11;;21717:4;21712:3;21708:14;21700:22;;21669:60;;;:::o;21735:114::-;;21836:5;21830:12;21820:22;;21809:40;;;:::o;21855:99::-;;21941:5;21935:12;21925:22;;21914:40;;;:::o;21960:113::-;;22062:4;22057:3;22053:14;22045:22;;22035:38;;;:::o;22079:184::-;;22212:6;22207:3;22200:19;22252:4;22247:3;22243:14;22228:29;;22190:73;;;;:::o;22269:169::-;;22387:6;22382:3;22375:19;22427:4;22422:3;22418:14;22403:29;;22365:73;;;;:::o;22444:305::-;;22503:20;22521:1;22503:20;:::i;:::-;22498:25;;22537:20;22555:1;22537:20;:::i;:::-;22532:25;;22691:1;22623:66;22619:74;22616:1;22613:81;22610:2;;;22697:18;;:::i;:::-;22610:2;22741:1;22738;22734:9;22727:16;;22488:261;;;;:::o;22755:185::-;;22812:20;22830:1;22812:20;:::i;:::-;22807:25;;22846:20;22864:1;22846:20;:::i;:::-;22841:25;;22885:1;22875:2;;22890:18;;:::i;:::-;22875:2;22932:1;22929;22925:9;22920:14;;22797:143;;;;:::o;22946:348::-;;23009:20;23027:1;23009:20;:::i;:::-;23004:25;;23043:20;23061:1;23043:20;:::i;:::-;23038:25;;23231:1;23163:66;23159:74;23156:1;23153:81;23148:1;23141:9;23134:17;23130:105;23127:2;;;23238:18;;:::i;:::-;23127:2;23286:1;23283;23279:9;23268:20;;22994:300;;;;:::o;23300:191::-;;23360:20;23378:1;23360:20;:::i;:::-;23355:25;;23394:20;23412:1;23394:20;:::i;:::-;23389:25;;23433:1;23430;23427:8;23424:2;;;23438:18;;:::i;:::-;23424:2;23483:1;23480;23476:9;23468:17;;23345:146;;;;:::o;23497:96::-;;23563:24;23581:5;23563:24;:::i;:::-;23552:35;;23542:51;;;:::o;23599:90::-;;23676:5;23669:13;23662:21;23651:32;;23641:48;;;:::o;23695:126::-;;23772:42;23765:5;23761:54;23750:65;;23740:81;;;:::o;23827:77::-;;23893:5;23882:16;;23872:32;;;:::o;23910:86::-;;23985:4;23978:5;23974:16;23963:27;;23953:43;;;:::o;24002:180::-;;24112:64;24170:5;24112:64;:::i;:::-;24099:77;;24089:93;;;:::o;24188:140::-;;24298:24;24316:5;24298:24;:::i;:::-;24285:37;;24275:53;;;:::o;24334:121::-;;24425:24;24443:5;24425:24;:::i;:::-;24412:37;;24402:53;;;:::o;24461:307::-;24529:1;24539:113;24553:6;24550:1;24547:13;24539:113;;;24638:1;24633:3;24629:11;24623:18;24619:1;24614:3;24610:11;24603:39;24575:2;24572:1;24568:10;24563:15;;24539:113;;;24670:6;24667:1;24664:13;24661:2;;;24750:1;24741:6;24736:3;24732:16;24725:27;24661:2;24510:258;;;;:::o;24774:233::-;;24836:24;24854:5;24836:24;:::i;:::-;24827:33;;24882:66;24875:5;24872:77;24869:2;;;24952:18;;:::i;:::-;24869:2;24999:1;24992:5;24988:13;24981:20;;24817:190;;;:::o;25013:180::-;25061:77;25058:1;25051:88;25158:4;25155:1;25148:15;25182:4;25179:1;25172:15;25199:180;25247:77;25244:1;25237:88;25344:4;25341:1;25334:15;25368:4;25365:1;25358:15;25385:102;;25477:2;25473:7;25468:2;25461:5;25457:14;25453:28;25443:38;;25433:54;;;:::o;25493:122::-;25566:24;25584:5;25566:24;:::i;:::-;25559:5;25556:35;25546:2;;25605:1;25602;25595:12;25546:2;25536:79;:::o;25621:116::-;25691:21;25706:5;25691:21;:::i;:::-;25684:5;25681:32;25671:2;;25727:1;25724;25717:12;25671:2;25661:76;:::o;25743:122::-;25816:24;25834:5;25816:24;:::i;:::-;25809:5;25806:35;25796:2;;25855:1;25852;25845:12;25796:2;25786:79;:::o
Swarm Source
ipfs://0e84085b09fe9de57a60ff0e0d4dac8e988cca97b1ae45f66db40b58814e99af
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.