More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 129 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 6564995 | 15 mins ago | IN | 0 S | 0.00273108 | ||||
Approve | 6563670 | 32 mins ago | IN | 0 S | 0.00273108 | ||||
Approve | 6563400 | 35 mins ago | IN | 0 S | 0.00158136 | ||||
Approve | 6563357 | 36 mins ago | IN | 0 S | 0.00174306 | ||||
Approve | 6563345 | 36 mins ago | IN | 0 S | 0.00271452 | ||||
Approve | 6563249 | 37 mins ago | IN | 0 S | 0.00271452 | ||||
Transfer | 6563208 | 38 mins ago | IN | 0 S | 0.00790564 | ||||
Approve | 6563158 | 38 mins ago | IN | 0 S | 0.00271452 | ||||
Approve | 6561154 | 1 hr ago | IN | 0 S | 0.00258208 | ||||
Approve | 6561004 | 1 hr ago | IN | 0 S | 0.0016792 | ||||
Approve | 6560727 | 1 hr ago | IN | 0 S | 0.00164158 | ||||
Approve | 6560253 | 1 hr ago | IN | 0 S | 0.00164224 | ||||
Approve | 6558079 | 1 hr ago | IN | 0 S | 0.00260056 | ||||
Approve | 6554306 | 2 hrs ago | IN | 0 S | 0.00273108 | ||||
Transfer | 6554076 | 2 hrs ago | IN | 0 S | 0.00790564 | ||||
Approve | 6552322 | 2 hrs ago | IN | 0 S | 0.00282987 | ||||
Approve | 6552103 | 2 hrs ago | IN | 0 S | 0.00164158 | ||||
Approve | 6551830 | 2 hrs ago | IN | 0 S | 0.00273157 | ||||
Approve | 6551739 | 2 hrs ago | IN | 0 S | 0.00273108 | ||||
Approve | 6551521 | 2 hrs ago | IN | 0 S | 0.0025812 | ||||
Approve | 6551101 | 2 hrs ago | IN | 0 S | 0.00258214 | ||||
Approve | 6551003 | 2 hrs ago | IN | 0 S | 0.00150364 | ||||
Approve | 6550970 | 2 hrs ago | IN | 0 S | 0.00258274 | ||||
Approve | 6549009 | 3 hrs ago | IN | 0 S | 0.00327719 | ||||
Approve | 6548522 | 3 hrs ago | IN | 0 S | 0.00285025 |
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 = "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
60c0604052662386f26fc100006000196200001b91906200066b565b6000196200002a9190620005f2565b6009556046600b556000600c55603c600d553480156200004957600080fd5b506040516200568a3803806200568a83398181016040528101906200006f9190620004e8565b6200008f62000083620003dc60201b60201c565b620003e460201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010090620005a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017390620005a2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506009546003600062000201620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000255620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000366620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc10000604051620003cc9190620005c4565b60405180910390a350506200071b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620004e28162000701565b92915050565b60008060408385031215620004fc57600080fd5b60006200050c85828601620004d1565b92505060206200051f85828601620004d1565b9150509250929050565b600062000538602283620005e1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6200059c8162000661565b82525050565b60006020820190508181036000830152620005bd8162000529565b9050919050565b6000602082019050620005db600083018462000591565b92915050565b600082825260208201905092915050565b6000620005ff8262000661565b91506200060c8362000661565b925082821015620006225762000621620006a3565b5b828203905092915050565b60006200063a8262000641565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620006788262000661565b9150620006858362000661565b925082620006985762000697620006d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200070c816200062d565b81146200071857600080fd5b50565b60805160601c60a05160601c614f35620007556000396000818161084a01528181612b360152612b5d01526000612a9d0152614f356000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600881526020017f4449414d4f4e4453000000000000000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000000000000000000000000000000000000000000084612133565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ac012cb782adba60089d8d3252f45a9dd57f589a12dc74e5c12d3fbbb580ad264736f6c63430008000033000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad81565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600881526020017f4449414d4f4e4453000000000000000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad84612133565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ac012cb782adba60089d8d3252f45a9dd57f589a12dc74e5c12d3fbbb580ad264736f6c63430008000033
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:18656:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28645:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23551:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25561:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26561:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28548:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25844:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27252:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39195:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26764:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29557:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25751:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27708:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39531:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40044:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29072:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14142:103;;;:::i;:::-;;40593:621;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39090:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13491:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39763:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25654:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28018:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26155:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28428:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26367:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40320:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29887:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14400:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30265:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39424:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39862:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28645:419;28699:14;28716:12;:10;:12::i;:::-;28699:29;;28762:11;:19;28774:6;28762:19;;;;;;;;;;;;;;;;;;;;;;;;;28761:20;28739:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28865:15;28892:19;28903:7;28892:10;:19::i;:::-;28864:47;;;;;;28940:28;28960:7;28940;:15;28948:6;28940:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28922:7;:15;28930:6;28922:15;;;;;;;;;;;;;;;:46;;;;28989:20;29001:7;28989;;:11;;:20;;;;:::i;:::-;28979:7;:30;;;;29033:23;29048:7;29033:10;;:14;;:23;;;;:::i;:::-;29020:10;:36;;;;28645:419;;;:::o;23551:51::-;;;:::o;25561:85::-;25600:13;25633:5;;;;;;;;;;;;;;;;;25626:12;;25561:85;:::o;26561:195::-;26665:4;26687:39;26696:12;:10;:12::i;:::-;26710:7;26719:6;26687:8;:39::i;:::-;26744:4;26737:11;;26561:195;;;;:::o;28548:89::-;28592:7;28619:10;;28612:17;;28548:89;:::o;25844:97::-;25899:7;24175:4;25919:14;;25844:97;:::o;27252:448::-;27386:4;27403:36;27413:6;27421:9;27432:6;27403:9;:36::i;:::-;27450:220;27473:6;27494:12;:10;:12::i;:::-;27521:138;27577:6;27521:138;;;;;;;;;;;;;;;;;:11;:19;27533:6;27521:19;;;;;;;;;;;;;;;:33;27541:12;:10;:12::i;:::-;27521:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27450:8;:220::i;:::-;27688:4;27681:11;;27252:448;;;;;:::o;39195:221::-;39296:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39335:7:::1;39318:14;:24;;;;39358:28;39378:7;39358:28;;;;;;:::i;:::-;;;;;;;;39404:4;39397:11;;39195:221:::0;;;:::o;26764:247::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26870:1:::1;26849:23;;:9;:23;;;;26841:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26948:9;26922:15;;:36;;;;;;;;;;;;;;;;;;26974:29;26993:9;26974:29;;;;;;:::i;:::-;;;;;;;;26764:247:::0;:::o;29557:322::-;29651:7;29709;;29698;:18;;29676:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:19;29819:10;:8;:10::i;:::-;29797:32;;29847:24;29859:11;29847:7;:11;;:24;;;;:::i;:::-;29840:31;;;29557:322;;;:::o;25751:85::-;25794:5;24422:1;25812:16;;25751:85;:::o;27708:302::-;27825:4;27847:133;27870:12;:10;:12::i;:::-;27897:7;27919:50;27958:10;27919:11;:25;27931:12;:10;:12::i;:::-;27919:25;;;;;;;;;;;;;;;:34;27945:7;27919:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27847:8;:133::i;:::-;27998:4;27991:11;;27708:302;;;;:::o;39531:224::-;39633:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39673:7:::1;39655:15;:25;;;;39696:29;39717:7;39696:29;;;;;;:::i;:::-;;;;;;;;39743:4;39736:11;;39531:224:::0;;;:::o;40044:268::-;40113:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40157:1:::1;40138:21;;:7;:21;;;;40130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40239:4;40209:18;:27;40228:7;40209:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40259:23;40274:7;40259:23;;;;;;:::i;:::-;;;;;;;;40300:4;40293:11;;40044:268:::0;;;:::o;29072:477::-;29192:7;24175:4;29225:7;:18;;29217:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29295:17;29290:252;;29330:15;29357:19;29368:7;29357:10;:19::i;:::-;29329:47;;;;;;29398:7;29391:14;;;;;29290:252;29441:23;29474:19;29485:7;29474:10;:19::i;:::-;29438:55;;;;;;29515:15;29508:22;;;29072:477;;;;;:::o;25949:198::-;26015:7;26039:11;:20;26051:7;26039:20;;;;;;;;;;;;;;;;;;;;;;;;;26035:49;;;26068:7;:16;26076:7;26068:16;;;;;;;;;;;;;;;;26061:23;;;;26035:49;26102:37;26122:7;:16;26130:7;26122:16;;;;;;;;;;;;;;;;26102:19;:37::i;:::-;26095:44;;25949: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;40593:621::-;40652:4;16610:1;17208:7;;:19;;17200:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16610:1;17341:7;:18;;;;40665:25:::1;40693:24;40711:4;40693:9;:24::i;:::-;40665:52;;40724:23;40750:76;40793:32;40813:11;;40793:15;;:19;;:32;;;;:::i;:::-;40750:38;40772:15;;40750:17;:21;;:38;;;;:::i;:::-;:42;;:76;;;;:::i;:::-;40724:102;;40833:18;40854:72;40893:32;40913:11;;40893:15;;:19;;:32;;;;:::i;:::-;40854:34;40876:11;;40854:17;:21;;:34;;;;:::i;:::-;:38;;:72;;;;:::i;:::-;40833:93;;40940:64;40957:17;40976:15;40993:10;40940:64;;;;;;;;:::i;:::-;;;;;;;;41035:1;41017:15;:19;41013:126;;;41049:22;41055:15;41049:5;:22::i;:::-;41013:126;41145:17;41151:10;41145:5;:17::i;:::-;41202:4;41195:11;;;;;16566:1:::0;17520:7;:22;;;;40593:621;:::o;27019:225::-;27075:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27092:46:::1;27101:10;27113:15;;;;;;;;;;;24175:4;27092:8;:46::i;:::-;27154:60;27177:10;27189:15;;;;;;;;;;;24175:4;27154:60;;;;;;;;:::i;:::-;;;;;;;;27232:4;27225:11;;27019:225:::0;:::o;39090:97::-;39138:7;39165:14;;39158:21;;39090:97;:::o;13491:87::-;13537:7;13564:6;;;;;;;;;;;13557:13;;13491:87;:::o;39763:91::-;39808:7;39835:11;;39828:18;;39763:91;:::o;25654:89::-;25695:13;25728:7;;;;;;;;;;;;;;;;;25721:14;;25654:89;:::o;28018:402::-;28140:4;28162:228;28185:12;:10;:12::i;:::-;28212:7;28234:145;28291:15;28234:145;;;;;;;;;;;;;;;;;:11;:25;28246:12;:10;:12::i;:::-;28234:25;;;;;;;;;;;;;;;:34;28260:7;28234:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28162:8;:228::i;:::-;28408:4;28401:11;;28018:402;;;;:::o;26155:204::-;26262:4;26287:42;26297:12;:10;:12::i;:::-;26311:9;26322:6;26287:9;:42::i;:::-;26347:4;26340:11;;26155:204;;;;:::o;28428:112::-;28488:4;28512:11;:20;28524:7;28512:20;;;;;;;;;;;;;;;;;;;;;;;;;28505:27;;28428:112;;;:::o;26367:186::-;26486:7;26518:11;:18;26530:5;26518:18;;;;;;;;;;;;;;;:27;26537:7;26518:27;;;;;;;;;;;;;;;;26511:34;;26367:186;;;;:::o;40320:265::-;40387:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40431:1:::1;40412:21;;:7;:21;;;;40404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40513:5;40483:18;:27;40502:7;40483:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40534:21;40547:7;40534:21;;;;;;:::i;:::-;;;;;;;;40573:4;40566:11;;40320:265:::0;;;:::o;29887:370::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29967:11:::1;:20;29979:7;29967:20;;;;;;;;;;;;;;;;;;;;;;;;;29966:21;29958:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30053:1;30034:7;:16;30042:7;30034:16;;;;;;;;;;;;;;;;:20;30030:109;;;30090:37;30110:7;:16;30118:7;30110:16;;;;;;;;;;;;;;;;30090:19;:37::i;:::-;30071:7;:16;30079:7;30071:16;;;;;;;;;;;;;;;:56;;;;30030:109;30172:4;30149:11;:20;30161:7;30149:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30187:9;30202:7;30187:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30226;30241:7;30226:23;;;;;;:::i;:::-;;;;;;;;29887: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;30265:511::-;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30344:11:::1;:20;30356:7;30344:20;;;;;;;;;;;;;;;;;;;;;;;;;30336:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30408:9;30403:327;30427:9;:16;;;;30423:1;:20;30403:327;;;30485:7;30469:23;;:9;30479:1;30469:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30465:254;;;30528:9;30557:1;30538:9;:16;;;;:20;;;;:::i;:::-;30528:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30513:9;30523:1;30513:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30597:1;30578:7;:16;30586:7;30578:16;;;;;;;;;;;;;;;:20;;;;30640:5;30617:11;:20;30629:7;30617:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30664:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30698:5;;30465:254;30445:3;;;;;:::i;:::-;;;;30403:327;;;;30745:23;30760:7;30745:23;;;;;;:::i;:::-;;;;;;;;30265:511:::0;:::o;39424:99::-;39473:7;39500:15;;39493:22;;39424:99;:::o;39862:174::-;39930:4;13722:12;:10;:12::i;:::-;13711:23;;:7;:5;:7::i;:::-;:23;;;13703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39961:7:::1;39947:11;:21;;;;39984:22;39998:7;39984:22;;;;;;:::i;:::-;;;;;;;;40024:4;40017:11;;39862:174:::0;;;:::o;5040:98::-;5093:7;5120:10;5113:17;;5040:98;:::o;36426:589::-;36526:7;36548;36570:11;;:::i;:::-;36596:7;36618:11;;:::i;:::-;36658:23;36683:17;36704:20;36716:7;36704:11;:20::i;:::-;36657:67;;;;36735:19;36757:10;:8;:10::i;:::-;36735:32;;36793:15;36823:23;36861:17;36892:40;36904:7;36913:5;36920:11;36892;:40::i;:::-;36778:154;;;;;;36951:7;36960:15;36977:5;36984:15;37001:5;36943:64;;;;;;;;;;;;;;;;36426: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;30784:371::-;30928:1;30911:19;;:5;:19;;;;30903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31009:1;30990:21;;:7;:21;;;;30982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31093:6;31063:11;:18;31075:5;31063:18;;;;;;;;;;;;;;;:27;31082:7;31063:27;;;;;;;;;;;;;;;:36;;;;31131:7;31115:32;;31124:5;31115:32;;;31140:6;31115:32;;;;;;:::i;:::-;;;;;;;;30784:371;;;:::o;31163:1393::-;31312:1;31294:20;;:6;:20;;;;31286:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31396:1;31375:23;;:9;:23;;;;31367:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31466:1;31457:6;:10;31449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31524:28;31555:14;;31524:45;;31580:29;31612:15;;31580:47;;31638:25;31666:11;;31638:39;;31692:18;:26;31711:6;31692:26;;;;;;;;;;;;;;;;;;;;;;;;;31688:141;;;31752:1;31735:14;:18;;;;31786:1;31768:15;:19;;;;31816:1;31802:11;:15;;;;31688:141;31845:11;:19;31857:6;31845:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31869:11;:22;31881:9;31869:22;;;;;;;;;;;;;;;;;;;;;;;;;31868:23;31845:46;31841:467;;;31908:48;31930:6;31938:9;31949:6;31908:21;:48::i;:::-;31841:467;;;31979:11;:19;31991:6;31979:19;;;;;;;;;;;;;;;;;;;;;;;;;31978:20;:46;;;;;32002:11;:22;32014:9;32002:22;;;;;;;;;;;;;;;;;;;;;;;;;31978:46;31974:334;;;32041:46;32061:6;32069:9;32080:6;32041:19;:46::i;:::-;31974:334;;;32109:11;:19;32121:6;32109:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32132:11;:22;32144:9;32132:22;;;;;;;;;;;;;;;;;;;;;;;;;32109:45;32105:203;;;32171:48;32193:6;32201:9;32212:6;32171:21;:48::i;:::-;32105:203;;;32252:44;32270:6;32278:9;32289:6;32252:17;:44::i;:::-;32105:203;31974:334;31841:467;32324:18;:26;32343:6;32324:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;32354:18;:29;32373:9;32354:29;;;;;;;;;;;;;;;;;;;;;;;;;32324:59;32320:229;;;32417:20;32400:14;:37;;;;32470:21;32452:15;:39;;;;32520:17;32506:11;:31;;;;32320:229;31163: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;38305:164::-;38347:7;38368:15;38385;38404:19;:17;:19::i;:::-;38367:56;;;;38441:20;38453:7;38441;:11;;:20;;;;:::i;:::-;38434:27;;;;38305: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;41222:472::-;41282:21;41320:1;41306:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41282:40;;41351:4;41333;41338:1;41333:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41377:3;41367:4;41372:1;41367:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;41391:66;41408:4;41423:15;41441;41391:8;:66::i;:::-;41468:15;:69;;;41552:15;41582:1;41619:4;41638:7;:5;:7::i;:::-;41660:15;41468:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41222:472;;:::o;41702:174::-;41757:48;41775:4;24040:42;41794:10;41757:9;:48::i;:::-;24040:42;41821:47;;41838:4;41821:47;;;41857:10;41821:47;;;;;;:::i;:::-;;;;;;;;41702:174;:::o;37023:541::-;37110:7;37119:11;;:::i;:::-;37148:17;;:::i;:::-;37195:37;37227:4;37195:27;37207:14;;37195:7;:11;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;37176:5;:16;;:56;;;;;37264:38;37297:4;37264:28;37276:15;;37264:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;37243:5;:18;;:59;;;;;37329:34;37358:4;37329:24;37341:11;;37329:7;:11;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;37313:5;:13;;:50;;;;;37374:23;37400:114;37500:5;:13;;;37400:81;37462:5;:18;;;37400:43;37426:5;:16;;;37400:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;37374:140;;37533:15;37550:5;37525:31;;;;;;37023:541;;;:::o;37572:725::-;37747:7;37769;37791:11;;:::i;:::-;37830:17;;:::i;:::-;37858:15;37876:24;37888:11;37876:7;:11;;:24;;;;:::i;:::-;37858:42;;37930:33;37951:11;37930:5;:16;;;:20;;:33;;;;:::i;:::-;37911:5;:16;;:52;;;;;37995:35;38018:11;37995:5;:18;;;:22;;:35;;;;:::i;:::-;37974:5;:18;;:56;;;;;38057:30;38075:11;38057:5;:13;;;:17;;:30;;;;:::i;:::-;38041:5;:13;;:46;;;;;38098:23;38124:114;38224:5;:13;;;38124:81;38186:5;:18;;;38124:43;38150:5;:16;;;38124:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;38098:140;;38257:7;38266:15;38283:5;38249:40;;;;;;;;;37572:725;;;;;;;:::o;34057:763::-;34208:15;34238:23;34276:17;34308:23;34346:17;34377:19;34388:7;34377:10;:19::i;:::-;34193:203;;;;;;;;;;34425:28;34445:7;34425;:15;34433:6;34425:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34407:7;:15;34415:6;34407:15;;;;;;;;;;;;;;;:46;;;;34482:28;34502:7;34482;:15;34490:6;34482:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34464:7;:15;34472:6;34464:15;;;;;;;;;;;;;;;:46;;;;34542:39;34565:15;34542:7;:18;34550:9;34542:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34521:7;:18;34529:9;34521:18;;;;;;;;;;;;;;;:60;;;;34592:47;34604:5;:16;;;34622:5;:16;;;34592:11;:47::i;:::-;34650:53;34664:5;:18;;;34684:5;:18;;;34650:13;:53::i;:::-;34714:38;34723:5;:13;;;34738:5;:13;;;34714:8;:38::i;:::-;34785:9;34768:44;;34777:6;34768:44;;;34796:15;34768:44;;;;;;:::i;:::-;;;;;;;;34057:763;;;;;;;;:::o;33274:775::-;33423:15;33453:23;33491:17;33523:23;33561:17;33592:19;33603:7;33592:10;:19::i;:::-;33408:203;;;;;;;;;;33640:28;33660:7;33640;:15;33648:6;33640:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33622:7;:15;33630:6;33622:15;;;;;;;;;;;;;;;:46;;;;33700:39;33723:15;33700:7;:18;33708:9;33700:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33679:7;:18;33687:9;33679:18;;;;;;;;;;;;;;;:60;;;;33771:39;33794:15;33771:7;:18;33779:9;33771:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33750:7;:18;33758:9;33750:18;;;;;;;;;;;;;;;:60;;;;33821:47;33833:5;:16;;;33851:5;:16;;;33821:11;:47::i;:::-;33879:53;33893:5;:18;;;33913:5;:18;;;33879:13;:53::i;:::-;33943:38;33952:5;:13;;;33967:5;:13;;;33943:8;:38::i;:::-;34014:9;33997:44;;34006:6;33997:44;;;34025:15;33997:44;;;;;;:::i;:::-;;;;;;;;33274:775;;;;;;;;:::o;34828:834::-;34979:15;35009:23;35047:17;35079:23;35117:17;35148:19;35159:7;35148:10;:19::i;:::-;34964:203;;;;;;;;;;35196:28;35216:7;35196;:15;35204:6;35196:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35178:7;:15;35186:6;35178:15;;;;;;;;;;;;;;;:46;;;;35253:28;35273:7;35253;:15;35261:6;35253:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35235:7;:15;35243:6;35235:15;;;;;;;;;;;;;;;:46;;;;35313:39;35336:15;35313:7;:18;35321:9;35313:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35292:7;:18;35300:9;35292:18;;;;;;;;;;;;;;;:60;;;;35384:39;35407:15;35384:7;:18;35392:9;35384:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35363:7;:18;35371:9;35363:18;;;;;;;;;;;;;;;:60;;;;35434:47;35446:5;:16;;;35464:5;:16;;;35434:11;:47::i;:::-;35492:53;35506:5;:18;;;35526:5;:18;;;35492:13;:53::i;:::-;35556:38;35565:5;:13;;;35580:5;:13;;;35556:8;:38::i;:::-;35627:9;35610:44;;35619:6;35610:44;;;35638:15;35610:44;;;;;;:::i;:::-;;;;;;;;34828:834;;;;;;;;:::o;32564:702::-;32711:15;32741:23;32779:17;32811:23;32849:17;32880:19;32891:7;32880:10;:19::i;:::-;32696:203;;;;;;;;;;32928:28;32948:7;32928;:15;32936:6;32928:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32910:7;:15;32918:6;32910:15;;;;;;;;;;;;;;;:46;;;;32988:39;33011:15;32988:7;:18;32996:9;32988:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32967:7;:18;32975:9;32967:18;;;;;;;;;;;;;;;:60;;;;33038:47;33050:5;:16;;;33068:5;:16;;;33038:11;:47::i;:::-;33096:53;33110:5;:18;;;33130:5;:18;;;33096:13;:53::i;:::-;33160:38;33169:5;:13;;;33184:5;:13;;;33160:8;:38::i;:::-;33231:9;33214:44;;33223:6;33214:44;;;33242:15;33214:44;;;;;;:::i;:::-;;;;;;;;32564:702;;;;;;;;:::o;38477:605::-;38528:7;38537;38557:15;38575:7;;38557:25;;38593:15;24175:4;38593:25;;38634:9;38629:338;38653:9;:16;;;;38649:1;:20;38629:338;;;38737:7;38713;:21;38721:9;38731:1;38721:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38713:21;;;;;;;;;;;;;;;;:31;:83;;;;38789:7;38765;:21;38773:9;38783:1;38773:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38765:21;;;;;;;;;;;;;;;;:31;38713:83;38691:146;;;38820:7;;24175:4;38812:25;;;;;;;;;38691:146;38862:34;38874:7;:21;38882:9;38892:1;38882:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38874:21;;;;;;;;;;;;;;;;38862:7;:11;;:34;;;;:::i;:::-;38852:44;;38921:34;38933:7;:21;38941:9;38951:1;38941:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38933:21;;;;;;;;;;;;;;;;38921:7;:11;;:34;;;;:::i;:::-;38911:44;;38671:3;;;;;:::i;:::-;;;;38629:338;;;;38991:20;24175:4;38991:7;;:11;;:20;;;;:::i;:::-;38981:7;:30;38977:61;;;39021:7;;24175:4;39013:25;;;;;;;;38977:61;39057:7;39066;39049:25;;;;;;38477: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;35670:175::-;35762:24;35774:11;35762:7;;:11;;:24;;;;:::i;:::-;35752:7;:34;;;;35810:27;35825:11;35810:10;;:14;;:27;;;;:::i;:::-;35797:10;:40;;;;35670:175;;:::o;35853:298::-;35980:41;36007:13;35980:7;:22;35996:4;35980:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;35955:7;:22;35971:4;35955:22;;;;;;;;;;;;;;;:66;;;;36036:11;:26;36056:4;36036:26;;;;;;;;;;;;;;;;;;;;;;;;;36032:111;;;36102:41;36129:13;36102:7;:22;36118:4;36102:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;36077:7;:22;36093:4;36077:22;;;;;;;;;;;;;;;:66;;;;36032:111;35853:298;;:::o;36159:259::-;36257:36;36284:8;36257:7;:22;36273:4;36257:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36232:7;:22;36248:4;36232:22;;;;;;;;;;;;;;;:61;;;;36308:11;:26;36328:4;36308:26;;;;;;;;;;;;;;;;;;;;;;;;;36304:106;;;36374:36;36401:8;36374:7;:22;36390:4;36374:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36349:7;:22;36365:4;36349:22;;;;;;;;;;;;;;;:61;;;;36304:106;36159: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://1ac012cb782adba60089d8d3252f45a9dd57f589a12dc74e5c12d3fbbb580ad2
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.