Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 22 from a total of 22 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16986202 | 662 days ago | IN | 0 ETH | 0.00071637 | ||||
Set Swap And Liq... | 12766166 | 1302 days ago | IN | 0 ETH | 0.00029876 | ||||
Reflectionfeesta... | 12747414 | 1305 days ago | IN | 0 ETH | 0.00045875 | ||||
Migrate Bnb | 12747409 | 1305 days ago | IN | 0 ETH | 0.00031177 | ||||
Approve | 12741447 | 1306 days ago | IN | 0 ETH | 0.00056083 | ||||
Approve | 12739895 | 1306 days ago | IN | 0 ETH | 0.00051409 | ||||
Approve | 12718966 | 1309 days ago | IN | 0 ETH | 0.00077114 | ||||
Transfer | 12712222 | 1311 days ago | IN | 0 ETH | 0.00662976 | ||||
Transfer | 12711751 | 1311 days ago | IN | 0 ETH | 0.00219058 | ||||
Approve | 12708833 | 1311 days ago | IN | 0 ETH | 0.00051409 | ||||
Approve | 12705866 | 1312 days ago | IN | 0 ETH | 0.0011624 | ||||
Approve | 12705796 | 1312 days ago | IN | 0 ETH | 0.00107492 | ||||
Approve | 12705743 | 1312 days ago | IN | 0 ETH | 0.00023694 | ||||
Approve | 12705715 | 1312 days ago | IN | 0 ETH | 0.00088798 | ||||
Approve | 12705168 | 1312 days ago | IN | 0 ETH | 0.00102819 | ||||
Approve | 12705154 | 1312 days ago | IN | 0 ETH | 0.0010796 | ||||
Transfer | 12704928 | 1312 days ago | IN | 0 ETH | 0.00283316 | ||||
Approve | 12703909 | 1312 days ago | IN | 0 ETH | 0.00280416 | ||||
Exclude From Fee | 12703847 | 1312 days ago | IN | 0 ETH | 0.0019878 | ||||
Transfer | 12703836 | 1312 days ago | IN | 0 ETH | 0.0056668 | ||||
Exclude From Fee | 12703836 | 1312 days ago | IN | 0 ETH | 0.00184912 | ||||
Activate Contrac... | 12703826 | 1312 days ago | IN | 0 ETH | 0.00518656 |
Latest 17 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12753333 | 1304 days ago | 0.00338957 ETH | ||||
12753333 | 1304 days ago | 0.01016873 ETH | ||||
12747949 | 1305 days ago | 0.00373674 ETH | ||||
12747949 | 1305 days ago | 0.01121022 ETH | ||||
12747409 | 1305 days ago | 0.03805395 ETH | ||||
12712222 | 1311 days ago | 0.00376797 ETH | ||||
12712222 | 1311 days ago | 0.01130392 ETH | ||||
12712222 | 1311 days ago | 0.00377696 ETH | ||||
12712222 | 1311 days ago | 0.01133088 ETH | ||||
12711751 | 1311 days ago | 0.00379731 ETH | ||||
12711751 | 1311 days ago | 0.01139193 ETH | ||||
12709007 | 1311 days ago | 0.00379731 ETH | ||||
12709007 | 1311 days ago | 0.01139193 ETH | ||||
12706734 | 1311 days ago | 0.00381784 ETH | ||||
12706734 | 1311 days ago | 0.01145354 ETH | ||||
12705880 | 1312 days ago | 0.00386688 ETH | ||||
12705880 | 1312 days ago | 0.01160064 ETH |
Loading...
Loading
This contract contains unverified libraries: Utils
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
BURN
Compiler Version
v0.6.8+commit.0bbfe453
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-25 */ //SPDX-License-Identifier: Unlicensed pragma solidity >=0.6.8; interface IBEP20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // 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); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/protocols/bep/Utils.sol pragma solidity >=0.6.8; library Utils { using SafeMath for uint256; function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) { uint256 seed = uint256( keccak256( abi.encodePacked( block.timestamp + block.difficulty + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) + block.gaslimit + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) + block.number + salty ) ) ); return seed.mod(to - from) + from; } function calculateBNBReward( uint256 _tTotal, uint256 currentBalance, uint256 currentBNBPool, uint256 totalSupply, address ofAddress ) public pure returns (uint256) { uint256 bnbPool = currentBNBPool; // calculate reward to send uint256 multiplier = 100; // now calculate reward uint256 reward = bnbPool.mul(multiplier).mul(currentBalance).div(100).div(totalSupply); return reward; } function calculateTopUpClaim( uint256 currentRecipientBalance, uint256 basedRewardCycleBlock, uint256 threshHoldTopUpRate, uint256 amount ) public view returns (uint256) { if (currentRecipientBalance == 0) { return block.timestamp + basedRewardCycleBlock; } else { uint256 rate = amount.mul(100).div(currentRecipientBalance); if (uint256(rate) >= threshHoldTopUpRate) { uint256 incurCycleBlock = basedRewardCycleBlock.mul(uint256(rate)).div(100); if (incurCycleBlock >= basedRewardCycleBlock) { incurCycleBlock = basedRewardCycleBlock; } return incurCycleBlock; } return 0; } } function swapTokensForEth( address routerAddress, uint256 tokenAmount ) public { IUniswapV2Router02 uniswapRouter = IUniswapV2Router02(routerAddress); // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); // make the swap uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapETHForTokens( address routerAddress, address recipient, uint256 ethAmount ) public { IUniswapV2Router02 uniswapRouter = IUniswapV2Router02(routerAddress); // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = address(this); // make the swap uniswapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}( 0, // accept any amount of ETH path, address(recipient), block.timestamp + 360 ); } function addLiquidity( address routerAddress, address owner, uint256 tokenAmount, uint256 ethAmount ) public { IUniswapV2Router02 uniswapRouter = IUniswapV2Router02(routerAddress); // add the liquidity uniswapRouter.addLiquidityETH{value : ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner, block.timestamp + 360 ); } } // File: contracts/protocols/bep/ReentrancyGuard.sol pragma solidity >=0.6.8; /** * @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 () public { _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 make 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; } modifier isHuman() { require(tx.origin == msg.sender, "sorry humans only"); _; } } // File: contracts/protocols/LM.sol pragma solidity >=0.6.8; pragma experimental ABIEncoderV2; contract BURN is Context, IBEP20, Ownable, ReentrancyGuard { using SafeMath for uint256; using Address for address; address payable public charityAddress = 0xF8e54e888a865bC9645702336760B5A79759B062; struct DailyRound { uint256 startTime; uint256 endTime; bool ended; //has daily round ended uint256 pool; //amount in the pool; address player; } mapping (uint256 => DailyRound) public round; 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; mapping(address => bool) private _isExcludedFromMaxTx; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10 ** 6 * 10 ** 9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "BURN"; string private _symbol = "BURN"; uint8 private _decimals = 9; IUniswapV2Router02 public immutable uniswapRouter; address public immutable uniswapPair; bool inSwapAndLiquify = false; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event ClaimBNBSuccessfully( address recipient, uint256 ethReceived, uint256 nextAvailableClaimDate ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor ( address payable routerAddress ) public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02(routerAddress); // Create a uniswap pair for this new token uniswapPair = IUniswapV2Factory(_uniswapRouter.factory()) .createPair(address(this), _uniswapRouter.WETH()); // set the rest of the contract variables uniswapRouter = _uniswapRouter; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(0x000000000000000000000000000000000000dEaD)] = true; _isExcludedFromFee[address(this)] = true; //round data round[1].startTime = now; round[1].endTime = now+rndMax; // exclude from max tx _isExcludedFromMaxTx[owner()] = true; _isExcludedFromMaxTx[address(this)] = true; _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true; _isExcludedFromMaxTx[address(0)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view 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) public override returns (bool) { _transfer(_msgSender(), recipient, amount, 0); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount, 0); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { 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) public 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 excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already 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; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); uint256 jackpotFee = tFee/2; uint256 burnFee = tFee/2; uint256 finalRTransferAmount = rTransferAmount.sub(burnFee).sub(jackpotFee); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(finalRTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); if(jackpotFee>0){ address winner; if(sender == uniswapPair) winner = recipient; else if(recipient == uniswapPair) winner = sender; else winner = msg.sender; updateJackpotDetails(tAmount, jackpotFee, roundID, winner); _transfer(address(this), address(0x000000000000000000000000000000000000dEaD), burnFee, 0); } emit Transfer(sender, recipient, tTransferAmount.sub(burnFee).sub(jackpotFee)); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to receive ETH from uniswapRouter when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } 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 _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10 ** 2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10 ** 2 ); } function calculateJackpotFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_jackpotFee).div( 10 ** 2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10 ** 2 ); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousJackpotFee = _jackpotFee; _previousBurnFee = _burnFee; _taxFee = 0; _liquidityFee = 0; _jackpotFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _jackpotFee = _previousBurnFee; _burnFee = _previousBurnFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount, uint256 value ) private { require(from != address(0), "BEP20: transfer from the zero address"); require(to != address(0), "BEP20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); ensureMaxTxAmount(from, to, amount, value); // swap and liquify swapAndLiquify(from, to); //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || reflectionFeesdiabled) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if (!takeFee) removeAllFee(); // top up claim cycle topUpClaimCycleAfterTransfer(recipient, amount); 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]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); uint256 jackpotFee = tFee/2; uint256 burnFee = tFee/2; uint256 finalRTransferAmount = rTransferAmount.sub(burnFee).sub(jackpotFee); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(finalRTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); if(jackpotFee>0){ address winner; if(sender == uniswapPair) winner = recipient; else if(recipient == uniswapPair) winner = sender; else winner = msg.sender; updateJackpotDetails(tAmount, jackpotFee, roundID, winner); _transfer(address(this), address(0x000000000000000000000000000000000000dEaD), burnFee, 0); } emit Transfer(sender, recipient, tTransferAmount.sub(burnFee).sub(jackpotFee)); } function updateJackpotDetails(uint256 totalAmount, uint256 jackpotAmount, uint256 _rID, address _winner) private { /***** FIRST check if there is a need to start the new round ******/ if (now > round[_rID].endTime && round[_rID].ended == false) { startNewRound(); } _rID = roundID; /*****SECOND update the timer*****/ // grab time uint256 _now = now; // calculate time based on number of BURN transfered uint256 _newTime; if(totalAmount >= tokensForTimer) { if (_now > round[_rID].endTime && round[_rID].player == address(0)) _newTime = (((totalAmount) / (tokensForTimer)).mul(rndInc)).add(_now); else _newTime = (((totalAmount) / (tokensForTimer)).mul(rndInc)).add(round[_rID].endTime); // compare to max and set new end time if (_newTime < (rndMax).add(_now)) round[_rID].endTime = _newTime; else round[_rID].endTime = rndMax.add(_now); //update the winner if(round[_rID].player != _winner) round[_rID].player = _winner; } /*****THIRD update the jackpot details*****/ //Update the amount in the pool round[_rID].pool = round[_rID].pool.add(jackpotAmount); } function startNewRound()private { uint256 _roundID = roundID; uint256 _poolAmount = round[roundID].pool; if (now > round[_roundID].endTime && round[_roundID].ended == false) { round[_roundID].ended = true; address _winner = round[roundID].player; if(_poolAmount.mul(10).div(100)>0){ _transfer(address(this), _winner, _poolAmount.mul(10).div(100), 0); _transfer(address(this), address(0x000000000000000000000000000000000000dEaD), _poolAmount.mul(10).div(100), 0); } lastWinner = _winner; _roundID++; roundID++; round[_roundID].startTime = now; round[_roundID].endTime = now.add(rndMax); round[_roundID].pool = _poolAmount.mul(80).div(100); } } function startNewRoundByOwner()public onlyOwner(){ if (now > round[roundID].endTime && round[roundID].ended == false) { startNewRound(); } } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); uint256 jackpotFee = tFee/2; uint256 burnFee = tFee/2; uint256 finalRTransferAmount = rTransferAmount.sub(burnFee).sub(jackpotFee); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(finalRTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); if(jackpotFee>0){ address winner; if(sender == uniswapPair) winner = recipient; else if(recipient == uniswapPair) winner = sender; else winner = msg.sender; updateJackpotDetails(tAmount, jackpotFee, roundID, winner); _transfer(address(this), address(0x000000000000000000000000000000000000dEaD), burnFee, 0); } emit Transfer(sender, recipient, tTransferAmount.sub(burnFee).sub(jackpotFee)); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); uint256 jackpotFee = tFee/2; uint256 burnFee = tFee/2; uint256 finalRTransferAmount = rTransferAmount.sub(burnFee).sub(jackpotFee); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(finalRTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); if(burnFee>0){ address winner; if(sender == uniswapPair) winner = recipient; else if(recipient == uniswapPair) winner = sender; else winner = msg.sender; updateJackpotDetails(tAmount, jackpotFee, roundID, winner); _transfer(address(this), address(0x000000000000000000000000000000000000dEaD), burnFee, 0); } emit Transfer(sender, recipient, tTransferAmount); } // Innovation for protocol by BURN Team uint256 public rewardCycleBlock = 1 days; uint256 public easyRewardCycleBlock = 1 days; uint256 public threshHoldTopUpRate = 25; // 25 percent uint256 public _maxTxAmount = _tTotal; // should be 0.05% percent per transaction, will be set again at activateContract() function uint256 public disruptiveCoverageFee = 150000000000000000; // antiwhale mapping(address => uint256) public nextAvailableClaimDate; bool public swapAndLiquifyEnabled = false; // should be true uint256 public disruptiveTransferEnabledFrom = 0; uint256 public disableEasyRewardFrom = 0; bool public reflectionFeesdiabled = false; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 8; // 4% will be added pool, 4% will be converted to ETH uint256 public _burnFee = 1; //1% amount will be burned in every tx uint256 public _jackpotFee = 1; //1% amount will be sent to jackpot uint256 private _previousLiquidityFee = _liquidityFee; uint256 private _previousJackpotFee = _jackpotFee; uint256 private _previousBurnFee = _burnFee; uint256 public rewardThreshold = 150000000000000000; uint256 private rndInc = 4 seconds; // every BURN transacted adds this much to the timer uint256 private rndMax = 24 hours; uint256 public roundID = 1; uint256 public tokensForTimer = 25000000000000000; // this much tokens will increase the time by rndInc seconds address public lastWinner; uint256 minTokenNumberToSell = _tTotal.mul(1).div(10000).div(10); // 0.001% max tx amount will trigger swap and add liquidity function setMaxTxPercent(uint256 maxTxPercent) public onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000); } function setTimeAddForJackpot(uint256 _timeInSeconds) public onlyOwner(){ rndInc = _timeInSeconds; } function setMAxTimeForJackpot(uint256 _timeInSeconds) public onlyOwner(){ rndMax = _timeInSeconds; } function setTokenForTimer(uint256 _tokens) public onlyOwner(){ tokensForTimer = _tokens; } function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { _isExcludedFromMaxTx[_address] = value; } function calculateBNBReward(address ofAddress) public view returns (uint256) { uint256 totalSupply_ = uint256(_tTotal) .sub(balanceOf(address(0))) .sub(balanceOf(0x000000000000000000000000000000000000dEaD)) // exclude burned wallet .sub(balanceOf(address(uniswapPair))); // exclude liquidity wallet return Utils.calculateBNBReward( _tTotal, balanceOf(address(ofAddress)), address(this).balance, totalSupply_, ofAddress ); } function getRewardCycleBlock() public view returns (uint256) { if (block.timestamp >= disableEasyRewardFrom) return rewardCycleBlock; return easyRewardCycleBlock; } function claimBNBReward() isHuman nonReentrant public { require(nextAvailableClaimDate[msg.sender] <= block.timestamp, 'Error: next available not reached'); require(balanceOf(msg.sender) >= 0, 'Error: must own BURN to claim reward'); uint256 reward = calculateBNBReward(msg.sender); // reward threshold if (reward >= rewardThreshold) { uint256 charityamount = reward.div(5); (bool success, ) = address(charityAddress).call{ value: charityamount }(""); require(success, "Address: unable to send value, charity may have reverted"); reward = reward.sub(reward.div(5)); } // update rewardCycleBlock nextAvailableClaimDate[msg.sender] = block.timestamp + getRewardCycleBlock(); emit ClaimBNBSuccessfully(msg.sender, reward, nextAvailableClaimDate[msg.sender]); (bool sent,) = address(msg.sender).call{value : reward}(""); require(sent, 'Error: Cannot withdraw reward'); } function topUpClaimCycleAfterTransfer(address recipient, uint256 amount) private { uint256 currentRecipientBalance = balanceOf(recipient); uint256 basedRewardCycleBlock = getRewardCycleBlock(); nextAvailableClaimDate[recipient] = nextAvailableClaimDate[recipient] + Utils.calculateTopUpClaim( currentRecipientBalance, basedRewardCycleBlock, threshHoldTopUpRate, amount ); } function ensureMaxTxAmount( address from, address to, uint256 amount, uint256 value ) private view { if ( _isExcludedFromMaxTx[from] == false && // default will be false _isExcludedFromMaxTx[to] == false // default will be false ) { if (value < disruptiveCoverageFee && block.timestamp >= disruptiveTransferEnabledFrom) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } } } function disruptiveTransfer(address recipient, uint256 amount) public payable returns (bool) { _transfer(_msgSender(), recipient, amount, msg.value); return true; } function swapAndLiquify(address from, address to) private { // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool shouldSell = contractTokenBalance >= minTokenNumberToSell; if ( !inSwapAndLiquify && shouldSell && from != uniswapPair && swapAndLiquifyEnabled && !(from == address(this) && to == address(uniswapPair)) // swap 1 time ) { // only sell for minTokenNumberToSell, decouple from _maxTxAmount contractTokenBalance = minTokenNumberToSell; // add liquidity // split the contract balance into 3 pieces uint256 pooledBNB = contractTokenBalance.div(2); uint256 piece = contractTokenBalance.sub(pooledBNB).div(2); uint256 otherPiece = contractTokenBalance.sub(piece); uint256 tokenAmountToBeSwapped = pooledBNB.add(piece); uint256 initialBalance = address(this).balance; // now is to lock into staking pool Utils.swapTokensForEth(address(uniswapRouter), tokenAmountToBeSwapped); // how much ETH did we just swap into? // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 deltaBalance = address(this).balance.sub(initialBalance); uint256 bnbToBeAddedToLiquidity = deltaBalance.div(3); // add liquidity to uniswap Utils.addLiquidity(address(uniswapRouter), owner(), otherPiece, bnbToBeAddedToLiquidity); emit SwapAndLiquify(piece, deltaBalance, otherPiece); } } function activateContract() public onlyOwner { // reward claim disableEasyRewardFrom = block.timestamp + 1 weeks; rewardCycleBlock = 1 days; easyRewardCycleBlock = 1 days; // protocol disruptiveCoverageFee = 150000000000000000; disruptiveTransferEnabledFrom = block.timestamp; setMaxTxPercent(100); setSwapAndLiquifyEnabled(true); // approve contract _approve(address(this), address(uniswapRouter), 2 ** 256 - 1); } function changerewardCycleBlock(uint256 newcycle) public onlyOwner { rewardCycleBlock = newcycle; } function changeCharityAddress(address payable _newaddress) public onlyOwner { charityAddress = _newaddress; } // disable enable reflection fee , value == false (enable) function reflectionfeestartstop(bool _value) public onlyOwner { reflectionFeesdiabled = _value; } function migrateToken(address _newadress , uint256 _amount) public onlyOwner { removeAllFee(); _transferStandard(address(this), _newadress, _amount); restoreAllFee(); } function migrateBnb(address payable _newadd,uint256 amount) public onlyOwner { (bool success, ) = address(_newadd).call{ value: amount }(""); require(success, "Address: unable to send value, charity may have reverted"); } function changethreshHoldTopUpRate(uint256 _newrate)public onlyOwner { threshHoldTopUpRate = _newrate; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"ClaimBNBSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_jackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateBNBReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newaddress","type":"address"}],"name":"changeCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newcycle","type":"uint256"}],"name":"changerewardCycleBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newrate","type":"uint256"}],"name":"changethreshHoldTopUpRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBNBReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEasyRewardFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disruptiveCoverageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"disruptiveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disruptiveTransferEnabledFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"easyRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newadd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"migrateBnb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newadress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"migrateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextAvailableClaimDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeesdiabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"reflectionfeestartstop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"round","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bool","name":"ended","type":"bool"},{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"address","name":"player","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"setMAxTimeForJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"setTimeAddForJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"setTokenForTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startNewRoundByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshHoldTopUpRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTimer","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600480546001600160a01b03191673f8e54e888a865bc9645702336760b5a79759b06217815569d3c21bcecceda1000000600d5569085afffa6ff50bffffff19600e5561010060405260c081905263212aa92760e11b60e0908152620000699160109190620006b9565b5060408051808201909152600480825263212aa92760e11b60209092019182526200009791601191620006b9565b506012805461ff001960ff1991821660091716909155620151806013819055601481905560196015819055600d546016819055670214e8348c4f00006017819055825485169092556000601a819055601b55601c80549094169093556002601d819055601e556008601f81905560016020818155602182905560229290925560238190556024819055602592909255600460265560279290925560288190556658d15e176280006029556200017a92600a92620001669261271092849290919062002010620005ce821b17901c565b6200062060201b620020511790919060201c565b602b553480156200018a57600080fd5b50604051620046fc380380620046fc833981016040819052620001ad916200075b565b6000620001c26001600160e01b036200066a16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600355600e54600660006200022b6001600160e01b036200066a16565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028e57600080fd5b505afa158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c991906200075b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031257600080fd5b505afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d91906200075b565b6040518363ffffffff1660e01b81526004016200036c9291906200077a565b602060405180830381600087803b1580156200038757600080fd5b505af11580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c291906200075b565b6001600160601b0319606091821b811660a0529082901b16608052600160096000620003f66001600160e01b036200066f16565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055600983527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805485166001908117909155308252918120805490941682179093558083526005909152427f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b819055602754017f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c5590600b90620004cd6001600160e01b036200066f16565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b90925281208054831660019081179091557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac341580548416821790559080527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768054909216179055620005776001600160e01b036200066a16565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d54604051620005be91906200082b565b60405180910390a350506200084d565b600082620005df575060006200061a565b82820282848281620005ed57fe5b0414620006175760405162461bcd60e51b81526004016200060e90620007ea565b60405180910390fd5b90505b92915050565b60006200061783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067e60201b60201c565b335b90565b6000546001600160a01b031690565b60008183620006a25760405162461bcd60e51b81526004016200060e919062000794565b506000838581620006af57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006fc57805160ff19168380011785556200072c565b828001600101855582156200072c579182015b828111156200072c5782518255916020019190600101906200070f565b506200073a9291506200073e565b5090565b6200066c91905b808211156200073a576000815560010162000745565b6000602082840312156200076d578081fd5b8151620006178162000834565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620007c257858101830151858201604001528201620007a4565b81811115620007d45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b90815260200190565b6001600160a01b03811681146200084a57600080fd5b50565b60805160601c60a05160601c613e53620008a960003980610cde5280611cca528061246152806124a252806127dc528061283b528061327b52806132bc525080611804528061199e528061290352806129a55250613e536000f3fe6080604052600436106103fe5760003560e01c80637217f4bc11610213578063afcf2fc411610123578063dd467064116100ab578063f2fde38b1161007a578063f2fde38b14610b1b578063f7c7d48f14610b3b578063fc6f4cbb14610b50578063fda48a7314610b65578063fe18818414610b7a57610405565b8063dd46706414610a9b578063dd62ed3e14610abb578063e0362d4414610adb578063ea2f0b3714610afb57610405565b8063c0f71b80116100f2578063c0f71b8014610a06578063c49b9a8014610a26578063c816841b14610a46578063d4ed7b3f14610a5b578063d543dbeb14610a7b57610405565b8063afcf2fc4146109a7578063b47fd563146109bc578063b6c52324146109dc578063c0b0fda2146109f157610405565b80638edd14e1116101a657806395d89b411161017557806395d89b41146109285780639bb4dc601461093d578063a457c2d714610952578063a69df4b514610972578063a9059cbb1461098757610405565b80638edd14e1146108c95780638ee88c53146108de5780638fda356d146108fe57806395ba68d71461091357610405565b80637d1db4a5116101e25780637d1db4a51461085f57806388f82020146108745780638da5cb5b146108945780638dbc24b0146108a957610405565b80637217f4bc146107e857806372929e90146107fd578063735de9f71461081d5780637ab9e38f1461083f57610405565b80633bd5d1731161030e57806354861fe5116102a15780636a40701c116102705780636a40701c146107745780636bc87c3a146107895780636d33a4681461079e57806370a08231146107b3578063715018a6146107d357610405565b806354861fe51461070a5780635b89029c1461072a5780635e4196ab1461074a5780635ea4d29c1461075f57610405565b8063495e06a8116102dd578063495e06a8146106a05780634a74bb02146106b557806352390c02146106ca5780635342acb4146106ea57610405565b80633bd5d1731461062d5780633d87ea751461064d578063437823ec146106605780634549b0391461068057610405565b806323a8a8271161039157806334d5f37b1161036057806334d5f37b146105925780633685d419146105c357806337ad7cf5146105e357806339509351146105f85780633b124fe71461061857610405565b806323a8a8271461051057806323b872dd146105305780632d83811914610550578063313ce5671461057057610405565b806314f8b424116103cd57806314f8b424146104a657806318160ddd146104bb5780631f3011b4146104d05780632060995e146104f057610405565b8063061c82d01461040a57806306fdde031461042c578063095ea7b31461045757806313114a9d1461048457610405565b3661040557005b600080fd5b34801561041657600080fd5b5061042a610425366004613636565b610b8f565b005b34801561043857600080fd5b50610441610bd2565b60405161044e919061370c565b60405180910390f35b34801561046357600080fd5b50610477610472366004613608565b610c69565b60405161044e9190613701565b34801561049057600080fd5b50610499610c87565b60405161044e9190613cea565b3480156104b257600080fd5b50610499610c8d565b3480156104c757600080fd5b50610499610c93565b3480156104dc57600080fd5b5061042a6104eb366004613636565b610c99565b3480156104fc57600080fd5b5061049961050b366004613518565b610cd3565b34801561051c57600080fd5b5061042a61052b36600461361a565b610ddc565b34801561053c57600080fd5b5061047761054b366004613597565b610e24565b34801561055c57600080fd5b5061049961056b366004613636565b610eb3565b34801561057c57600080fd5b50610585610ef3565b60405161044e9190613d7c565b34801561059e57600080fd5b506105b26105ad366004613636565b610efc565b60405161044e959493929190613cf3565b3480156105cf57600080fd5b5061042a6105de366004613518565b610f38565b3480156105ef57600080fd5b506104996110a1565b34801561060457600080fd5b50610477610613366004613608565b6110a7565b34801561062457600080fd5b506104996110fb565b34801561063957600080fd5b5061042a610648366004613636565b611101565b61047761065b366004613608565b6111c8565b34801561066c57600080fd5b5061042a61067b366004613518565b6111dd565b34801561068c57600080fd5b5061049961069b366004613666565b611236565b3480156106ac57600080fd5b50610499611293565b3480156106c157600080fd5b50610477611299565b3480156106d657600080fd5b5061042a6106e5366004613518565b6112a2565b3480156106f657600080fd5b50610477610705366004613518565b6113d0565b34801561071657600080fd5b5061042a610725366004613636565b6113ee565b34801561073657600080fd5b5061042a6107453660046135d7565b611428565b34801561075657600080fd5b50610499611488565b34801561076b57600080fd5b5061049961148e565b34801561078057600080fd5b5061042a611494565b34801561079557600080fd5b506104996116e7565b3480156107aa57600080fd5b506104996116ed565b3480156107bf57600080fd5b506104996107ce366004613518565b6116f3565b3480156107df57600080fd5b5061042a611755565b3480156107f457600080fd5b506104996117c2565b34801561080957600080fd5b5061042a610818366004613636565b6117c8565b34801561082957600080fd5b50610832611802565b60405161044e919061368a565b34801561084b57600080fd5b5061042a61085a366004613636565b611826565b34801561086b57600080fd5b50610499611860565b34801561088057600080fd5b5061047761088f366004613518565b611866565b3480156108a057600080fd5b50610832611884565b3480156108b557600080fd5b5061042a6108c4366004613518565b611893565b3480156108d557600080fd5b506104996118ea565b3480156108ea57600080fd5b5061042a6108f9366004613636565b6118f0565b34801561090a57600080fd5b5061042a61192a565b34801561091f57600080fd5b506104996119c7565b34801561093457600080fd5b506104416119cd565b34801561094957600080fd5b50610499611a2e565b34801561095e57600080fd5b5061047761096d366004613608565b611a49565b34801561097e57600080fd5b5061042a611ab7565b34801561099357600080fd5b506104776109a2366004613608565b611b51565b3480156109b357600080fd5b50610832611b67565b3480156109c857600080fd5b506104996109d7366004613518565b611b76565b3480156109e857600080fd5b50610499611b88565b3480156109fd57600080fd5b50610499611b8e565b348015610a1257600080fd5b5061042a610a21366004613534565b611b94565b348015610a3257600080fd5b5061042a610a4136600461361a565b611c4a565b348015610a5257600080fd5b50610832611cc8565b348015610a6757600080fd5b5061042a610a76366004613608565b611cec565b348015610a8757600080fd5b5061042a610a96366004613636565b611d3c565b348015610aa757600080fd5b5061042a610ab6366004613636565b611d9e565b348015610ac757600080fd5b50610499610ad636600461355f565b611e19565b348015610ae757600080fd5b5061042a610af6366004613636565b611e44565b348015610b0757600080fd5b5061042a610b16366004613518565b611e7e565b348015610b2757600080fd5b5061042a610b36366004613518565b611ed4565b348015610b4757600080fd5b5061042a611f78565b348015610b5c57600080fd5b50610477611ff2565b348015610b7157600080fd5b50610499611ffb565b348015610b8657600080fd5b50610832612001565b610b97612093565b6000546001600160a01b03908116911614610bcd5760405162461bcd60e51b8152600401610bc490613ab3565b60405180910390fd5b601d55565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c76612093565b8484612097565b5060015b92915050565b600f5490565b60285481565b600d5490565b610ca1612093565b6000546001600160a01b03908116911614610cce5760405162461bcd60e51b8152600401610bc490613ab3565b601355565b600080610d38610d027f00000000000000000000000000000000000000000000000000000000000000006116f3565b610d2c610d1061dead6116f3565b610d2c610d1d60006116f3565b600d549063ffffffff61214b16565b9063ffffffff61214b16565b905073bc1928e06d21891ecc438130262e145e2251c0746337e6f019600d54610d60866116f3565b4785886040518663ffffffff1660e01b8152600401610d83959493929190613d50565b60206040518083038186803b158015610d9b57600080fd5b505af4158015610daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd3919061364e565b9150505b919050565b610de4612093565b6000546001600160a01b03908116911614610e115760405162461bcd60e51b8152600401610bc490613ab3565b601c805460ff1916911515919091179055565b6000610e33848484600061218d565b610ea984610e3f612093565b610ea485604051806060016040528060288152602001613db1602891396001600160a01b038a16600090815260086020526040812090610e7d612093565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61227a16565b612097565b5060019392505050565b6000600e54821115610ed75760405162461bcd60e51b8152600401610bc4906138ca565b6000610ee16122a6565b9050610dd3838263ffffffff61205116565b60125460ff1690565b600560205260009081526040902080546001820154600283015460038401546004909401549293919260ff90911691906001600160a01b031685565b610f40612093565b6000546001600160a01b03908116911614610f6d5760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b0381166000908152600a602052604090205460ff16610fa55760405162461bcd60e51b8152600401610bc490613991565b60005b600c5481101561109d57816001600160a01b0316600c8281548110610fc957fe5b6000918252602090912001546001600160a01b0316141561109557600c80546000198101908110610ff657fe5b600091825260209091200154600c80546001600160a01b03909216918390811061101c57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600c80548061106e57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561109d565b600101610fa8565b5050565b60145481565b6000610c7d6110b4612093565b84610ea485600860006110c5612093565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6122cf16565b601d5481565b600061110b612093565b6001600160a01b0381166000908152600a602052604090205490915060ff16156111475760405162461bcd60e51b8152600401610bc490613c19565b6000611152836122f4565b505050506001600160a01b03841660009081526006602052604090205491925061117e9190508261214b565b6001600160a01b038316600090815260066020526040902055600e546111aa908263ffffffff61214b16565b600e55600f546111c0908463ffffffff6122cf16565b600f55505050565b6000610c7d6111d5612093565b84843461218d565b6111e5612093565b6000546001600160a01b039081169116146112125760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600d5483111561125a5760405162461bcd60e51b8152600401610bc4906139c8565b8161127957600061126a846122f4565b50939550610c81945050505050565b6000611284846122f4565b50929550610c81945050505050565b60295481565b60195460ff1681565b6112aa612093565b6000546001600160a01b039081169116146112d75760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b0381166000908152600a602052604090205460ff16156113105760405162461bcd60e51b8152600401610bc490613991565b6001600160a01b0381166000908152600660205260409020541561136a576001600160a01b03811660009081526006602052604090205461135090610eb3565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b6113f6612093565b6000546001600160a01b039081169116146114235760405162461bcd60e51b8152600401610bc490613ab3565b602955565b611430612093565b6000546001600160a01b0390811691161461145d5760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b601a5481565b60255481565b3233146114b35760405162461bcd60e51b8152600401610bc490613a47565b600260035414156114d65760405162461bcd60e51b8152600401610bc490613be2565b60026003553360009081526018602052604090205442101561150a5760405162461bcd60e51b8152600401610bc49061375f565b6000611515336116f3565b10156115335760405162461bcd60e51b8152600401610bc490613886565b600061153e33610cd3565b9050602554811061160857600061155c82600563ffffffff61205116565b6004546040519192506000916001600160a01b0390911690839061157f90610c66565b60006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b50509050806115e25760405162461bcd60e51b8152600401610bc490613829565b6116036115f684600563ffffffff61205116565b849063ffffffff61214b16565b925050505b611610611a2e565b3360008181526018602052604090819020429390930192839055517f76a3a606d310d32750e15a3d246d186b789084096189d51661559b0f97f3bec99261165a929185919061369e565b60405180910390a16000336001600160a01b03168260405161167b90610c66565b60006040518083038185875af1925050503d80600081146116b8576040519150601f19603f3d011682016040523d82523d6000602084013e6116bd565b606091505b50509050806116de5760405162461bcd60e51b8152600401610bc490613b74565b50506001600355565b601f5481565b60175481565b6001600160a01b0381166000908152600a602052604081205460ff161561173357506001600160a01b038116600090815260076020526040902054610dd7565b6001600160a01b038216600090815260066020526040902054610c8190610eb3565b61175d612093565b6000546001600160a01b0390811691161461178a5760405162461bcd60e51b8152600401610bc490613ab3565b600080546040516001600160a01b0390911690600080516020613dd9833981519152908390a3600080546001600160a01b0319169055565b60135481565b6117d0612093565b6000546001600160a01b039081169116146117fd5760405162461bcd60e51b8152600401610bc490613ab3565b602655565b7f000000000000000000000000000000000000000000000000000000000000000081565b61182e612093565b6000546001600160a01b0390811691161461185b5760405162461bcd60e51b8152600401610bc490613ab3565b601555565b60165481565b6001600160a01b03166000908152600a602052604090205460ff1690565b6000546001600160a01b031690565b61189b612093565b6000546001600160a01b039081169116146118c85760405162461bcd60e51b8152600401610bc490613ab3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60215481565b6118f8612093565b6000546001600160a01b039081169116146119255760405162461bcd60e51b8152600401610bc490613ab3565b601f55565b611932612093565b6000546001600160a01b0390811691161461195f5760405162461bcd60e51b8152600401610bc490613ab3565b4262093a808101601b55620151806013819055601455670214e8348c4f0000601755601a5561198e6064611d3c565b6119986001611c4a565b6119c5307f0000000000000000000000000000000000000000000000000000000000000000600019612097565b565b601b5481565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b6000601b544210611a425750601354610c66565b5060145490565b6000610c7d611a56612093565b84610ea485604051806060016040528060258152602001613df96025913960086000611a80612093565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61227a16565b6001546001600160a01b03163314611ae15760405162461bcd60e51b8152600401610bc490613ca7565b6002544211611b025760405162461bcd60e51b8152600401610bc490613bab565b600154600080546040516001600160a01b039384169390911691600080516020613dd983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c7d611b5e612093565b8484600061218d565b6004546001600160a01b031681565b60186020526000908152604090205481565b60025490565b60205481565b611b9c612093565b6000546001600160a01b03908116911614611bc95760405162461bcd60e51b8152600401610bc490613ab3565b6000826001600160a01b031682604051611be290610c66565b60006040518083038185875af1925050503d8060008114611c1f576040519150601f19603f3d011682016040523d82523d6000602084013e611c24565b606091505b5050905080611c455760405162461bcd60e51b8152600401610bc490613829565b505050565b611c52612093565b6000546001600160a01b03908116911614611c7f5760405162461bcd60e51b8152600401610bc490613ab3565b6019805460ff19168215151790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611cbd908390613701565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b611cf4612093565b6000546001600160a01b03908116911614611d215760405162461bcd60e51b8152600401610bc490613ab3565b611d29612343565b611d34308383612389565b61109d612569565b611d44612093565b6000546001600160a01b03908116911614611d715760405162461bcd60e51b8152600401610bc490613ab3565b611d98612710611d8c83600d5461201090919063ffffffff16565b9063ffffffff61205116565b60165550565b611da6612093565b6000546001600160a01b03908116911614611dd35760405162461bcd60e51b8152600401610bc490613ab3565b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613dd9833981519152908290a350565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b611e4c612093565b6000546001600160a01b03908116911614611e795760405162461bcd60e51b8152600401610bc490613ab3565b602755565b611e86612093565b6000546001600160a01b03908116911614611eb35760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b611edc612093565b6000546001600160a01b03908116911614611f095760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b038116611f2f5760405162461bcd60e51b8152600401610bc490613914565b600080546040516001600160a01b0380851693921691600080516020613dd983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f80612093565b6000546001600160a01b03908116911614611fad5760405162461bcd60e51b8152600401610bc490613ab3565b60285460009081526005602052604090206001015442118015611fe5575060285460009081526005602052604090206002015460ff16155b156119c5576119c5612582565b601c5460ff1681565b60155481565b602a546001600160a01b031681565b60008261201f57506000610c81565b8282028284828161202c57fe5b041461204a5760405162461bcd60e51b8152600401610bc490613a72565b9392505050565b600061204a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126dd565b3390565b6001600160a01b0383166120bd5760405162461bcd60e51b8152600401610bc4906137e5565b6001600160a01b0382166120e35760405162461bcd60e51b8152600401610bc490613c65565b6001600160a01b0380841660008181526008602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061213e908590613cea565b60405180910390a3505050565b600061204a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061227a565b6001600160a01b0384166121b35760405162461bcd60e51b8152600401610bc4906137a0565b6001600160a01b0383166121d95760405162461bcd60e51b8152600401610bc490613b31565b600082116121f95760405162461bcd60e51b8152600401610bc490613ae8565b61220584848484612714565b61220f848461279b565b6001600160a01b03841660009081526009602052604090205460019060ff168061225157506001600160a01b03841660009081526009602052604090205460ff165b8061225e5750601c5460ff165b15612267575060005b61227385858584612a65565b5050505050565b6000818484111561229e5760405162461bcd60e51b8152600401610bc4919061370c565b505050900390565b60008060006122b3612bdd565b90925090506122c8828263ffffffff61205116565b9250505090565b60008282018381101561204a5760405162461bcd60e51b8152600401610bc49061395a565b600080600080600080600080600061230b8a612d52565b92509250925060008060006123298d86866123246122a6565b612d94565b919f909e50909c50959a5093985091965092945050505050565b601d541580156123535750601f54155b1561235d576119c5565b601d8054601e55601f805460225560218054602355602080546024556000938490559183905582905555565b60008060008060008061239b876122f4565b9550955095509550955095506000600283816123b357fe5b0490506002830460006123ca83610d2c8a8561214b565b6001600160a01b038d166000908152600660205260409020549091506123f6908a63ffffffff61214b16565b6001600160a01b03808e1660009081526006602052604080822093909355908d168152205461242b908263ffffffff6122cf16565b6001600160a01b038c1660009081526006602052604090205561244d84612dfc565b6124578786612e96565b82156125035760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168d6001600160a01b031614156124a057508a6124e4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c6001600160a01b031614156124e157508b6124e4565b50335b6124f28b8560285484612ec6565b6125013061dead85600061218d565b505b6001600160a01b03808c16908d167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61254686610d2c8b8863ffffffff61214b16565b6040516125539190613cea565b60405180910390a3505050505050505050505050565b601e54601d55602254601f556024546021819055602055565b60285460008181526005602052604090206003810154600190910154421180156125be575060008281526005602052604090206002015460ff16155b1561109d57600082815260056020526040808220600201805460ff1916600117905560285482528120600401546001600160a01b03169061260b6064611d8c85600a63ffffffff61201016565b111561265057612633308261262c6064611d8c87600a63ffffffff61201016565b600061218d565b6126503061dead61262c6064611d8c87600a63ffffffff61201016565b602a80546001600160a01b0319166001600160a01b038316179055602880546001908101909155929092016000818152600560205260409020429081905560275491939161269e91906122cf565b6000848152600560205260409020600101556126c66064611d8c84605063ffffffff61201016565b600084815260056020526040902060030155505050565b600081836126fe5760405162461bcd60e51b8152600401610bc4919061370c565b50600083858161270a57fe5b0495945050505050565b6001600160a01b0384166000908152600b602052604090205460ff1615801561275657506001600160a01b0383166000908152600b602052604090205460ff16155b15612795576017548110801561276e5750601a544210155b15612795576016548211156127955760405162461bcd60e51b8152600401610bc4906139ff565b50505050565b60006127a6306116f3565b905060165481106127b657506016545b602b546012549082101590610100900460ff161580156127d35750805b801561281157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b801561281f575060195460ff165b801561287157506001600160a01b0384163014801561286f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b155b1561279557602b549150600061288e83600263ffffffff61205116565b905060006128a76002611d8c868563ffffffff61214b16565b905060006128bb858363ffffffff61214b16565b905060006128cf848463ffffffff6122cf16565b6040516356feb11b60e01b8152909150479073bc1928e06d21891ecc438130262e145e2251c074906356feb11b9061292d907f00000000000000000000000000000000000000000000000000000000000000009086906004016136e8565b60006040518083038186803b15801561294557600080fd5b505af4158015612959573d6000803e3d6000fd5b505050506000612972824761214b90919063ffffffff16565b9050600061298782600363ffffffff61205116565b905073bc1928e06d21891ecc438130262e145e2251c07463cf6c62ea7f00000000000000000000000000000000000000000000000000000000000000006129cc611884565b88856040518563ffffffff1660e01b81526004016129ed94939291906136bf565b60006040518083038186803b158015612a0557600080fd5b505af4158015612a19573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868387604051612a5093929190613d1f565b60405180910390a15050505050505050505050565b80612a7257612a72612343565b612a7c838361309f565b6001600160a01b0384166000908152600a602052604090205460ff168015612abd57506001600160a01b0383166000908152600a602052604090205460ff16155b15612ad257612acd84848461316e565b612bd0565b6001600160a01b0384166000908152600a602052604090205460ff16158015612b1357506001600160a01b0383166000908152600a602052604090205460ff165b15612b2357612acd848484613360565b6001600160a01b0384166000908152600a602052604090205460ff16158015612b6557506001600160a01b0383166000908152600a602052604090205460ff16155b15612b7557612acd848484612389565b6001600160a01b0384166000908152600a602052604090205460ff168015612bb557506001600160a01b0383166000908152600a602052604090205460ff165b15612bc557612acd84848461343e565b612bd0848484612389565b8061279557612795612569565b600e54600d546000918291825b600c54811015612d1a578260066000600c8481548110612c0657fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c6b57508160076000600c8481548110612c4457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c8257600e54600d5494509450505050612d4e565b612cc860066000600c8481548110612c9657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849063ffffffff61214b16565b9250612d1060076000600c8481548110612cde57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff61214b16565b9150600101612bea565b50600d54600e54612d309163ffffffff61205116565b821015612d4857600e54600d54935093505050612d4e565b90925090505b9091565b600080600080612d61856134e0565b90506000612d6e866134fc565b90506000612d8682610d2c898663ffffffff61214b16565b979296509094509092505050565b6000808080612da9888663ffffffff61201016565b90506000612dbd888763ffffffff61201016565b90506000612dd1888863ffffffff61201016565b90506000612de982610d2c868663ffffffff61214b16565b939b939a50919850919650505050505050565b6000612e066122a6565b90506000612e1a838363ffffffff61201016565b30600090815260066020526040902054909150612e3d908263ffffffff6122cf16565b30600090815260066020908152604080832093909355600a9052205460ff1615611c455730600090815260076020526040902054612e81908463ffffffff6122cf16565b30600090815260076020526040902055505050565b600e54612ea9908363ffffffff61214b16565b600e55600f54612ebf908263ffffffff6122cf16565b600f555050565b60008281526005602052604090206001015442118015612ef8575060008281526005602052604090206002015460ff16155b15612f0557612f05612582565b60285491506000429050600060295486106130605760008481526005602052604090206001015482118015612f5257506000848152600560205260409020600401546001600160a01b0316155b15612f8c57612f8582612f796026546029548a81612f6c57fe5b049063ffffffff61201016565b9063ffffffff6122cf16565b9050612fb8565b600084815260056020526040902060010154602654602954612fb59291612f79918a81612f6c57fe5b90505b602754612fcb908363ffffffff6122cf16565b811015612feb576000848152600560205260409020600101819055613011565b602754612ffe908363ffffffff6122cf16565b6000858152600560205260409020600101555b6000848152600560205260409020600401546001600160a01b0384811691161461306057600084815260056020526040902060040180546001600160a01b0319166001600160a01b0385161790555b600084815260056020526040902060030154613082908663ffffffff6122cf16565b600094855260056020526040909420600301939093555050505050565b60006130aa836116f3565b905060006130b6611a2e565b601554604051638958b5a960e01b815291925073bc1928e06d21891ecc438130262e145e2251c07491638958b5a9916130f791869186918990600401613d35565b60206040518083038186803b15801561310f57600080fd5b505af4158015613123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613147919061364e565b6001600160a01b039094166000908152601860205260409020805494909401909355505050565b600080600080600080613180876122f4565b95509550955095509550955060006002838161319857fe5b0490506002830460006131af83610d2c8a8561214b565b6001600160a01b038d166000908152600760205260409020549091506131db908b63ffffffff61214b16565b6001600160a01b038d16600090815260076020908152604080832093909355600690522054613210908a63ffffffff61214b16565b6001600160a01b03808e1660009081526006602052604080822093909355908d1681522054613245908263ffffffff6122cf16565b6001600160a01b038c1660009081526006602052604090205561326784612dfc565b6132718786612e96565b811561331d5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168d6001600160a01b031614156132ba57508a6132fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c6001600160a01b031614156132fb57508b6132fe565b50335b61330c8b8560285484612ec6565b61331b3061dead85600061218d565b505b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125539190613cea565b600080600080600080613372876122f4565b95509550955095509550955060006002838161338a57fe5b0490506002830460006133a183610d2c8a8561214b565b6001600160a01b038d166000908152600660205260409020549091506133cd908a63ffffffff61214b16565b6001600160a01b03808e16600090815260066020908152604080832094909455918e16815260079091522054613409908763ffffffff6122cf16565b6001600160a01b038c1660009081526007602090815260408083209390935560069052205461242b908263ffffffff6122cf16565b600080600080600080613450876122f4565b95509550955095509550955060006002838161346857fe5b04905060028304600061347f83610d2c8a8561214b565b6001600160a01b038d166000908152600760205260409020549091506134ab908b63ffffffff61214b16565b6001600160a01b038d166000908152600760209081526040808320939093556006905220546133cd908a63ffffffff61214b16565b6000610c816064611d8c601d548561201090919063ffffffff16565b6000610c816064611d8c601f548561201090919063ffffffff16565b600060208284031215613529578081fd5b813561204a81613d8a565b60008060408385031215613546578081fd5b823561355181613d8a565b946020939093013593505050565b60008060408385031215613571578182fd5b823561357c81613d8a565b9150602083013561358c81613d8a565b809150509250929050565b6000806000606084860312156135ab578081fd5b83356135b681613d8a565b925060208401356135c681613d8a565b929592945050506040919091013590565b600080604083850312156135e9578182fd5b82356135f481613d8a565b91506020830135801515811461358c578182fd5b60008060408385031215613546578182fd5b60006020828403121561362b578081fd5b813561204a81613da2565b600060208284031215613647578081fd5b5035919050565b60006020828403121561365f578081fd5b5051919050565b60008060408385031215613678578182fd5b82359150602083013561358c81613da2565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156137385785810183015185820160400152820161371c565b818111156137495783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f4572726f723a206e65787420617661696c61626c65206e6f74207265616368656040820152601960fa1b606082015260800190565b60208082526025908201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526038908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206360408201527f686172697479206d617920686176652072657665727465640000000000000000606082015260800190565b60208082526024908201527f4572726f723a206d757374206f776e204255524e20746f20636c61696d2072656040820152631dd85c9960e21b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b602080825260119082015270736f7272792068756d616e73206f6e6c7960781b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526023908201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601d908201527f4572726f723a2043616e6e6f7420776974686472617720726577617264000000604082015260600190565b6020808252601f908201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526022908201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6040820152626f636b60e81b606082015260800190565b90815260200190565b9485526020850193909352901515604084015260608301526001600160a01b0316608082015260a00190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60ff91909116815260200190565b6001600160a01b0381168114613d9f57600080fd5b50565b8015158114613d9f57600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bcccb488668c37fcb336c0e97b27118aa997671e5fe9f179dca2946e716a658764736f6c634300060800330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106103fe5760003560e01c80637217f4bc11610213578063afcf2fc411610123578063dd467064116100ab578063f2fde38b1161007a578063f2fde38b14610b1b578063f7c7d48f14610b3b578063fc6f4cbb14610b50578063fda48a7314610b65578063fe18818414610b7a57610405565b8063dd46706414610a9b578063dd62ed3e14610abb578063e0362d4414610adb578063ea2f0b3714610afb57610405565b8063c0f71b80116100f2578063c0f71b8014610a06578063c49b9a8014610a26578063c816841b14610a46578063d4ed7b3f14610a5b578063d543dbeb14610a7b57610405565b8063afcf2fc4146109a7578063b47fd563146109bc578063b6c52324146109dc578063c0b0fda2146109f157610405565b80638edd14e1116101a657806395d89b411161017557806395d89b41146109285780639bb4dc601461093d578063a457c2d714610952578063a69df4b514610972578063a9059cbb1461098757610405565b80638edd14e1146108c95780638ee88c53146108de5780638fda356d146108fe57806395ba68d71461091357610405565b80637d1db4a5116101e25780637d1db4a51461085f57806388f82020146108745780638da5cb5b146108945780638dbc24b0146108a957610405565b80637217f4bc146107e857806372929e90146107fd578063735de9f71461081d5780637ab9e38f1461083f57610405565b80633bd5d1731161030e57806354861fe5116102a15780636a40701c116102705780636a40701c146107745780636bc87c3a146107895780636d33a4681461079e57806370a08231146107b3578063715018a6146107d357610405565b806354861fe51461070a5780635b89029c1461072a5780635e4196ab1461074a5780635ea4d29c1461075f57610405565b8063495e06a8116102dd578063495e06a8146106a05780634a74bb02146106b557806352390c02146106ca5780635342acb4146106ea57610405565b80633bd5d1731461062d5780633d87ea751461064d578063437823ec146106605780634549b0391461068057610405565b806323a8a8271161039157806334d5f37b1161036057806334d5f37b146105925780633685d419146105c357806337ad7cf5146105e357806339509351146105f85780633b124fe71461061857610405565b806323a8a8271461051057806323b872dd146105305780632d83811914610550578063313ce5671461057057610405565b806314f8b424116103cd57806314f8b424146104a657806318160ddd146104bb5780631f3011b4146104d05780632060995e146104f057610405565b8063061c82d01461040a57806306fdde031461042c578063095ea7b31461045757806313114a9d1461048457610405565b3661040557005b600080fd5b34801561041657600080fd5b5061042a610425366004613636565b610b8f565b005b34801561043857600080fd5b50610441610bd2565b60405161044e919061370c565b60405180910390f35b34801561046357600080fd5b50610477610472366004613608565b610c69565b60405161044e9190613701565b34801561049057600080fd5b50610499610c87565b60405161044e9190613cea565b3480156104b257600080fd5b50610499610c8d565b3480156104c757600080fd5b50610499610c93565b3480156104dc57600080fd5b5061042a6104eb366004613636565b610c99565b3480156104fc57600080fd5b5061049961050b366004613518565b610cd3565b34801561051c57600080fd5b5061042a61052b36600461361a565b610ddc565b34801561053c57600080fd5b5061047761054b366004613597565b610e24565b34801561055c57600080fd5b5061049961056b366004613636565b610eb3565b34801561057c57600080fd5b50610585610ef3565b60405161044e9190613d7c565b34801561059e57600080fd5b506105b26105ad366004613636565b610efc565b60405161044e959493929190613cf3565b3480156105cf57600080fd5b5061042a6105de366004613518565b610f38565b3480156105ef57600080fd5b506104996110a1565b34801561060457600080fd5b50610477610613366004613608565b6110a7565b34801561062457600080fd5b506104996110fb565b34801561063957600080fd5b5061042a610648366004613636565b611101565b61047761065b366004613608565b6111c8565b34801561066c57600080fd5b5061042a61067b366004613518565b6111dd565b34801561068c57600080fd5b5061049961069b366004613666565b611236565b3480156106ac57600080fd5b50610499611293565b3480156106c157600080fd5b50610477611299565b3480156106d657600080fd5b5061042a6106e5366004613518565b6112a2565b3480156106f657600080fd5b50610477610705366004613518565b6113d0565b34801561071657600080fd5b5061042a610725366004613636565b6113ee565b34801561073657600080fd5b5061042a6107453660046135d7565b611428565b34801561075657600080fd5b50610499611488565b34801561076b57600080fd5b5061049961148e565b34801561078057600080fd5b5061042a611494565b34801561079557600080fd5b506104996116e7565b3480156107aa57600080fd5b506104996116ed565b3480156107bf57600080fd5b506104996107ce366004613518565b6116f3565b3480156107df57600080fd5b5061042a611755565b3480156107f457600080fd5b506104996117c2565b34801561080957600080fd5b5061042a610818366004613636565b6117c8565b34801561082957600080fd5b50610832611802565b60405161044e919061368a565b34801561084b57600080fd5b5061042a61085a366004613636565b611826565b34801561086b57600080fd5b50610499611860565b34801561088057600080fd5b5061047761088f366004613518565b611866565b3480156108a057600080fd5b50610832611884565b3480156108b557600080fd5b5061042a6108c4366004613518565b611893565b3480156108d557600080fd5b506104996118ea565b3480156108ea57600080fd5b5061042a6108f9366004613636565b6118f0565b34801561090a57600080fd5b5061042a61192a565b34801561091f57600080fd5b506104996119c7565b34801561093457600080fd5b506104416119cd565b34801561094957600080fd5b50610499611a2e565b34801561095e57600080fd5b5061047761096d366004613608565b611a49565b34801561097e57600080fd5b5061042a611ab7565b34801561099357600080fd5b506104776109a2366004613608565b611b51565b3480156109b357600080fd5b50610832611b67565b3480156109c857600080fd5b506104996109d7366004613518565b611b76565b3480156109e857600080fd5b50610499611b88565b3480156109fd57600080fd5b50610499611b8e565b348015610a1257600080fd5b5061042a610a21366004613534565b611b94565b348015610a3257600080fd5b5061042a610a4136600461361a565b611c4a565b348015610a5257600080fd5b50610832611cc8565b348015610a6757600080fd5b5061042a610a76366004613608565b611cec565b348015610a8757600080fd5b5061042a610a96366004613636565b611d3c565b348015610aa757600080fd5b5061042a610ab6366004613636565b611d9e565b348015610ac757600080fd5b50610499610ad636600461355f565b611e19565b348015610ae757600080fd5b5061042a610af6366004613636565b611e44565b348015610b0757600080fd5b5061042a610b16366004613518565b611e7e565b348015610b2757600080fd5b5061042a610b36366004613518565b611ed4565b348015610b4757600080fd5b5061042a611f78565b348015610b5c57600080fd5b50610477611ff2565b348015610b7157600080fd5b50610499611ffb565b348015610b8657600080fd5b50610832612001565b610b97612093565b6000546001600160a01b03908116911614610bcd5760405162461bcd60e51b8152600401610bc490613ab3565b60405180910390fd5b601d55565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c76612093565b8484612097565b5060015b92915050565b600f5490565b60285481565b600d5490565b610ca1612093565b6000546001600160a01b03908116911614610cce5760405162461bcd60e51b8152600401610bc490613ab3565b601355565b600080610d38610d027f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6116f3565b610d2c610d1061dead6116f3565b610d2c610d1d60006116f3565b600d549063ffffffff61214b16565b9063ffffffff61214b16565b905073bc1928e06d21891ecc438130262e145e2251c0746337e6f019600d54610d60866116f3565b4785886040518663ffffffff1660e01b8152600401610d83959493929190613d50565b60206040518083038186803b158015610d9b57600080fd5b505af4158015610daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd3919061364e565b9150505b919050565b610de4612093565b6000546001600160a01b03908116911614610e115760405162461bcd60e51b8152600401610bc490613ab3565b601c805460ff1916911515919091179055565b6000610e33848484600061218d565b610ea984610e3f612093565b610ea485604051806060016040528060288152602001613db1602891396001600160a01b038a16600090815260086020526040812090610e7d612093565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61227a16565b612097565b5060019392505050565b6000600e54821115610ed75760405162461bcd60e51b8152600401610bc4906138ca565b6000610ee16122a6565b9050610dd3838263ffffffff61205116565b60125460ff1690565b600560205260009081526040902080546001820154600283015460038401546004909401549293919260ff90911691906001600160a01b031685565b610f40612093565b6000546001600160a01b03908116911614610f6d5760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b0381166000908152600a602052604090205460ff16610fa55760405162461bcd60e51b8152600401610bc490613991565b60005b600c5481101561109d57816001600160a01b0316600c8281548110610fc957fe5b6000918252602090912001546001600160a01b0316141561109557600c80546000198101908110610ff657fe5b600091825260209091200154600c80546001600160a01b03909216918390811061101c57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600c80548061106e57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561109d565b600101610fa8565b5050565b60145481565b6000610c7d6110b4612093565b84610ea485600860006110c5612093565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6122cf16565b601d5481565b600061110b612093565b6001600160a01b0381166000908152600a602052604090205490915060ff16156111475760405162461bcd60e51b8152600401610bc490613c19565b6000611152836122f4565b505050506001600160a01b03841660009081526006602052604090205491925061117e9190508261214b565b6001600160a01b038316600090815260066020526040902055600e546111aa908263ffffffff61214b16565b600e55600f546111c0908463ffffffff6122cf16565b600f55505050565b6000610c7d6111d5612093565b84843461218d565b6111e5612093565b6000546001600160a01b039081169116146112125760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600d5483111561125a5760405162461bcd60e51b8152600401610bc4906139c8565b8161127957600061126a846122f4565b50939550610c81945050505050565b6000611284846122f4565b50929550610c81945050505050565b60295481565b60195460ff1681565b6112aa612093565b6000546001600160a01b039081169116146112d75760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b0381166000908152600a602052604090205460ff16156113105760405162461bcd60e51b8152600401610bc490613991565b6001600160a01b0381166000908152600660205260409020541561136a576001600160a01b03811660009081526006602052604090205461135090610eb3565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b6113f6612093565b6000546001600160a01b039081169116146114235760405162461bcd60e51b8152600401610bc490613ab3565b602955565b611430612093565b6000546001600160a01b0390811691161461145d5760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b601a5481565b60255481565b3233146114b35760405162461bcd60e51b8152600401610bc490613a47565b600260035414156114d65760405162461bcd60e51b8152600401610bc490613be2565b60026003553360009081526018602052604090205442101561150a5760405162461bcd60e51b8152600401610bc49061375f565b6000611515336116f3565b10156115335760405162461bcd60e51b8152600401610bc490613886565b600061153e33610cd3565b9050602554811061160857600061155c82600563ffffffff61205116565b6004546040519192506000916001600160a01b0390911690839061157f90610c66565b60006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b50509050806115e25760405162461bcd60e51b8152600401610bc490613829565b6116036115f684600563ffffffff61205116565b849063ffffffff61214b16565b925050505b611610611a2e565b3360008181526018602052604090819020429390930192839055517f76a3a606d310d32750e15a3d246d186b789084096189d51661559b0f97f3bec99261165a929185919061369e565b60405180910390a16000336001600160a01b03168260405161167b90610c66565b60006040518083038185875af1925050503d80600081146116b8576040519150601f19603f3d011682016040523d82523d6000602084013e6116bd565b606091505b50509050806116de5760405162461bcd60e51b8152600401610bc490613b74565b50506001600355565b601f5481565b60175481565b6001600160a01b0381166000908152600a602052604081205460ff161561173357506001600160a01b038116600090815260076020526040902054610dd7565b6001600160a01b038216600090815260066020526040902054610c8190610eb3565b61175d612093565b6000546001600160a01b0390811691161461178a5760405162461bcd60e51b8152600401610bc490613ab3565b600080546040516001600160a01b0390911690600080516020613dd9833981519152908390a3600080546001600160a01b0319169055565b60135481565b6117d0612093565b6000546001600160a01b039081169116146117fd5760405162461bcd60e51b8152600401610bc490613ab3565b602655565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b61182e612093565b6000546001600160a01b0390811691161461185b5760405162461bcd60e51b8152600401610bc490613ab3565b601555565b60165481565b6001600160a01b03166000908152600a602052604090205460ff1690565b6000546001600160a01b031690565b61189b612093565b6000546001600160a01b039081169116146118c85760405162461bcd60e51b8152600401610bc490613ab3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60215481565b6118f8612093565b6000546001600160a01b039081169116146119255760405162461bcd60e51b8152600401610bc490613ab3565b601f55565b611932612093565b6000546001600160a01b0390811691161461195f5760405162461bcd60e51b8152600401610bc490613ab3565b4262093a808101601b55620151806013819055601455670214e8348c4f0000601755601a5561198e6064611d3c565b6119986001611c4a565b6119c5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d600019612097565b565b601b5481565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b6000601b544210611a425750601354610c66565b5060145490565b6000610c7d611a56612093565b84610ea485604051806060016040528060258152602001613df96025913960086000611a80612093565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61227a16565b6001546001600160a01b03163314611ae15760405162461bcd60e51b8152600401610bc490613ca7565b6002544211611b025760405162461bcd60e51b8152600401610bc490613bab565b600154600080546040516001600160a01b039384169390911691600080516020613dd983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c7d611b5e612093565b8484600061218d565b6004546001600160a01b031681565b60186020526000908152604090205481565b60025490565b60205481565b611b9c612093565b6000546001600160a01b03908116911614611bc95760405162461bcd60e51b8152600401610bc490613ab3565b6000826001600160a01b031682604051611be290610c66565b60006040518083038185875af1925050503d8060008114611c1f576040519150601f19603f3d011682016040523d82523d6000602084013e611c24565b606091505b5050905080611c455760405162461bcd60e51b8152600401610bc490613829565b505050565b611c52612093565b6000546001600160a01b03908116911614611c7f5760405162461bcd60e51b8152600401610bc490613ab3565b6019805460ff19168215151790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611cbd908390613701565b60405180910390a150565b7f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a81565b611cf4612093565b6000546001600160a01b03908116911614611d215760405162461bcd60e51b8152600401610bc490613ab3565b611d29612343565b611d34308383612389565b61109d612569565b611d44612093565b6000546001600160a01b03908116911614611d715760405162461bcd60e51b8152600401610bc490613ab3565b611d98612710611d8c83600d5461201090919063ffffffff16565b9063ffffffff61205116565b60165550565b611da6612093565b6000546001600160a01b03908116911614611dd35760405162461bcd60e51b8152600401610bc490613ab3565b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613dd9833981519152908290a350565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b611e4c612093565b6000546001600160a01b03908116911614611e795760405162461bcd60e51b8152600401610bc490613ab3565b602755565b611e86612093565b6000546001600160a01b03908116911614611eb35760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b611edc612093565b6000546001600160a01b03908116911614611f095760405162461bcd60e51b8152600401610bc490613ab3565b6001600160a01b038116611f2f5760405162461bcd60e51b8152600401610bc490613914565b600080546040516001600160a01b0380851693921691600080516020613dd983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f80612093565b6000546001600160a01b03908116911614611fad5760405162461bcd60e51b8152600401610bc490613ab3565b60285460009081526005602052604090206001015442118015611fe5575060285460009081526005602052604090206002015460ff16155b156119c5576119c5612582565b601c5460ff1681565b60155481565b602a546001600160a01b031681565b60008261201f57506000610c81565b8282028284828161202c57fe5b041461204a5760405162461bcd60e51b8152600401610bc490613a72565b9392505050565b600061204a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126dd565b3390565b6001600160a01b0383166120bd5760405162461bcd60e51b8152600401610bc4906137e5565b6001600160a01b0382166120e35760405162461bcd60e51b8152600401610bc490613c65565b6001600160a01b0380841660008181526008602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061213e908590613cea565b60405180910390a3505050565b600061204a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061227a565b6001600160a01b0384166121b35760405162461bcd60e51b8152600401610bc4906137a0565b6001600160a01b0383166121d95760405162461bcd60e51b8152600401610bc490613b31565b600082116121f95760405162461bcd60e51b8152600401610bc490613ae8565b61220584848484612714565b61220f848461279b565b6001600160a01b03841660009081526009602052604090205460019060ff168061225157506001600160a01b03841660009081526009602052604090205460ff165b8061225e5750601c5460ff165b15612267575060005b61227385858584612a65565b5050505050565b6000818484111561229e5760405162461bcd60e51b8152600401610bc4919061370c565b505050900390565b60008060006122b3612bdd565b90925090506122c8828263ffffffff61205116565b9250505090565b60008282018381101561204a5760405162461bcd60e51b8152600401610bc49061395a565b600080600080600080600080600061230b8a612d52565b92509250925060008060006123298d86866123246122a6565b612d94565b919f909e50909c50959a5093985091965092945050505050565b601d541580156123535750601f54155b1561235d576119c5565b601d8054601e55601f805460225560218054602355602080546024556000938490559183905582905555565b60008060008060008061239b876122f4565b9550955095509550955095506000600283816123b357fe5b0490506002830460006123ca83610d2c8a8561214b565b6001600160a01b038d166000908152600660205260409020549091506123f6908a63ffffffff61214b16565b6001600160a01b03808e1660009081526006602052604080822093909355908d168152205461242b908263ffffffff6122cf16565b6001600160a01b038c1660009081526006602052604090205561244d84612dfc565b6124578786612e96565b82156125035760007f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b03168d6001600160a01b031614156124a057508a6124e4565b7f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b03168c6001600160a01b031614156124e157508b6124e4565b50335b6124f28b8560285484612ec6565b6125013061dead85600061218d565b505b6001600160a01b03808c16908d167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61254686610d2c8b8863ffffffff61214b16565b6040516125539190613cea565b60405180910390a3505050505050505050505050565b601e54601d55602254601f556024546021819055602055565b60285460008181526005602052604090206003810154600190910154421180156125be575060008281526005602052604090206002015460ff16155b1561109d57600082815260056020526040808220600201805460ff1916600117905560285482528120600401546001600160a01b03169061260b6064611d8c85600a63ffffffff61201016565b111561265057612633308261262c6064611d8c87600a63ffffffff61201016565b600061218d565b6126503061dead61262c6064611d8c87600a63ffffffff61201016565b602a80546001600160a01b0319166001600160a01b038316179055602880546001908101909155929092016000818152600560205260409020429081905560275491939161269e91906122cf565b6000848152600560205260409020600101556126c66064611d8c84605063ffffffff61201016565b600084815260056020526040902060030155505050565b600081836126fe5760405162461bcd60e51b8152600401610bc4919061370c565b50600083858161270a57fe5b0495945050505050565b6001600160a01b0384166000908152600b602052604090205460ff1615801561275657506001600160a01b0383166000908152600b602052604090205460ff16155b15612795576017548110801561276e5750601a544210155b15612795576016548211156127955760405162461bcd60e51b8152600401610bc4906139ff565b50505050565b60006127a6306116f3565b905060165481106127b657506016545b602b546012549082101590610100900460ff161580156127d35750805b801561281157507f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b0316846001600160a01b031614155b801561281f575060195460ff165b801561287157506001600160a01b0384163014801561286f57507f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b0316836001600160a01b0316145b155b1561279557602b549150600061288e83600263ffffffff61205116565b905060006128a76002611d8c868563ffffffff61214b16565b905060006128bb858363ffffffff61214b16565b905060006128cf848463ffffffff6122cf16565b6040516356feb11b60e01b8152909150479073bc1928e06d21891ecc438130262e145e2251c074906356feb11b9061292d907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9086906004016136e8565b60006040518083038186803b15801561294557600080fd5b505af4158015612959573d6000803e3d6000fd5b505050506000612972824761214b90919063ffffffff16565b9050600061298782600363ffffffff61205116565b905073bc1928e06d21891ecc438130262e145e2251c07463cf6c62ea7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6129cc611884565b88856040518563ffffffff1660e01b81526004016129ed94939291906136bf565b60006040518083038186803b158015612a0557600080fd5b505af4158015612a19573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868387604051612a5093929190613d1f565b60405180910390a15050505050505050505050565b80612a7257612a72612343565b612a7c838361309f565b6001600160a01b0384166000908152600a602052604090205460ff168015612abd57506001600160a01b0383166000908152600a602052604090205460ff16155b15612ad257612acd84848461316e565b612bd0565b6001600160a01b0384166000908152600a602052604090205460ff16158015612b1357506001600160a01b0383166000908152600a602052604090205460ff165b15612b2357612acd848484613360565b6001600160a01b0384166000908152600a602052604090205460ff16158015612b6557506001600160a01b0383166000908152600a602052604090205460ff16155b15612b7557612acd848484612389565b6001600160a01b0384166000908152600a602052604090205460ff168015612bb557506001600160a01b0383166000908152600a602052604090205460ff165b15612bc557612acd84848461343e565b612bd0848484612389565b8061279557612795612569565b600e54600d546000918291825b600c54811015612d1a578260066000600c8481548110612c0657fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c6b57508160076000600c8481548110612c4457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c8257600e54600d5494509450505050612d4e565b612cc860066000600c8481548110612c9657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849063ffffffff61214b16565b9250612d1060076000600c8481548110612cde57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff61214b16565b9150600101612bea565b50600d54600e54612d309163ffffffff61205116565b821015612d4857600e54600d54935093505050612d4e565b90925090505b9091565b600080600080612d61856134e0565b90506000612d6e866134fc565b90506000612d8682610d2c898663ffffffff61214b16565b979296509094509092505050565b6000808080612da9888663ffffffff61201016565b90506000612dbd888763ffffffff61201016565b90506000612dd1888863ffffffff61201016565b90506000612de982610d2c868663ffffffff61214b16565b939b939a50919850919650505050505050565b6000612e066122a6565b90506000612e1a838363ffffffff61201016565b30600090815260066020526040902054909150612e3d908263ffffffff6122cf16565b30600090815260066020908152604080832093909355600a9052205460ff1615611c455730600090815260076020526040902054612e81908463ffffffff6122cf16565b30600090815260076020526040902055505050565b600e54612ea9908363ffffffff61214b16565b600e55600f54612ebf908263ffffffff6122cf16565b600f555050565b60008281526005602052604090206001015442118015612ef8575060008281526005602052604090206002015460ff16155b15612f0557612f05612582565b60285491506000429050600060295486106130605760008481526005602052604090206001015482118015612f5257506000848152600560205260409020600401546001600160a01b0316155b15612f8c57612f8582612f796026546029548a81612f6c57fe5b049063ffffffff61201016565b9063ffffffff6122cf16565b9050612fb8565b600084815260056020526040902060010154602654602954612fb59291612f79918a81612f6c57fe5b90505b602754612fcb908363ffffffff6122cf16565b811015612feb576000848152600560205260409020600101819055613011565b602754612ffe908363ffffffff6122cf16565b6000858152600560205260409020600101555b6000848152600560205260409020600401546001600160a01b0384811691161461306057600084815260056020526040902060040180546001600160a01b0319166001600160a01b0385161790555b600084815260056020526040902060030154613082908663ffffffff6122cf16565b600094855260056020526040909420600301939093555050505050565b60006130aa836116f3565b905060006130b6611a2e565b601554604051638958b5a960e01b815291925073bc1928e06d21891ecc438130262e145e2251c07491638958b5a9916130f791869186918990600401613d35565b60206040518083038186803b15801561310f57600080fd5b505af4158015613123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613147919061364e565b6001600160a01b039094166000908152601860205260409020805494909401909355505050565b600080600080600080613180876122f4565b95509550955095509550955060006002838161319857fe5b0490506002830460006131af83610d2c8a8561214b565b6001600160a01b038d166000908152600760205260409020549091506131db908b63ffffffff61214b16565b6001600160a01b038d16600090815260076020908152604080832093909355600690522054613210908a63ffffffff61214b16565b6001600160a01b03808e1660009081526006602052604080822093909355908d1681522054613245908263ffffffff6122cf16565b6001600160a01b038c1660009081526006602052604090205561326784612dfc565b6132718786612e96565b811561331d5760007f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b03168d6001600160a01b031614156132ba57508a6132fe565b7f000000000000000000000000b803d636005eb78b92604a39df3ffa8eafd7284a6001600160a01b03168c6001600160a01b031614156132fb57508b6132fe565b50335b61330c8b8560285484612ec6565b61331b3061dead85600061218d565b505b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125539190613cea565b600080600080600080613372876122f4565b95509550955095509550955060006002838161338a57fe5b0490506002830460006133a183610d2c8a8561214b565b6001600160a01b038d166000908152600660205260409020549091506133cd908a63ffffffff61214b16565b6001600160a01b03808e16600090815260066020908152604080832094909455918e16815260079091522054613409908763ffffffff6122cf16565b6001600160a01b038c1660009081526007602090815260408083209390935560069052205461242b908263ffffffff6122cf16565b600080600080600080613450876122f4565b95509550955095509550955060006002838161346857fe5b04905060028304600061347f83610d2c8a8561214b565b6001600160a01b038d166000908152600760205260409020549091506134ab908b63ffffffff61214b16565b6001600160a01b038d166000908152600760209081526040808320939093556006905220546133cd908a63ffffffff61214b16565b6000610c816064611d8c601d548561201090919063ffffffff16565b6000610c816064611d8c601f548561201090919063ffffffff16565b600060208284031215613529578081fd5b813561204a81613d8a565b60008060408385031215613546578081fd5b823561355181613d8a565b946020939093013593505050565b60008060408385031215613571578182fd5b823561357c81613d8a565b9150602083013561358c81613d8a565b809150509250929050565b6000806000606084860312156135ab578081fd5b83356135b681613d8a565b925060208401356135c681613d8a565b929592945050506040919091013590565b600080604083850312156135e9578182fd5b82356135f481613d8a565b91506020830135801515811461358c578182fd5b60008060408385031215613546578182fd5b60006020828403121561362b578081fd5b813561204a81613da2565b600060208284031215613647578081fd5b5035919050565b60006020828403121561365f578081fd5b5051919050565b60008060408385031215613678578182fd5b82359150602083013561358c81613da2565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156137385785810183015185820160400152820161371c565b818111156137495783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f4572726f723a206e65787420617661696c61626c65206e6f74207265616368656040820152601960fa1b606082015260800190565b60208082526025908201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526038908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c206360408201527f686172697479206d617920686176652072657665727465640000000000000000606082015260800190565b60208082526024908201527f4572726f723a206d757374206f776e204255524e20746f20636c61696d2072656040820152631dd85c9960e21b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b602080825260119082015270736f7272792068756d616e73206f6e6c7960781b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526023908201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601d908201527f4572726f723a2043616e6e6f7420776974686472617720726577617264000000604082015260600190565b6020808252601f908201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526022908201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6040820152626f636b60e81b606082015260800190565b90815260200190565b9485526020850193909352901515604084015260608301526001600160a01b0316608082015260a00190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60ff91909116815260200190565b6001600160a01b0381168114613d9f57600080fd5b50565b8015158114613d9f57600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bcccb488668c37fcb336c0e97b27118aa997671e5fe9f179dca2946e716a658764736f6c63430006080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
32297:31220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;40888:98:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;40888:98:0;;;;;;;;:::i;:::-;;35245:83;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35245:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;36160:161;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;36160:161:0;;;;;;;;:::i;:::-;;;;;;;;37284:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37284:87:0;;;:::i;:::-;;;;;;;;55547:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55547:26:0;;;:::i;35522:95::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35522:95:0;;;:::i;62396:125::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;62396:125:0;;;;;;;;:::i;56528:558::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;56528:558:0;;;;;;;;:::i;62753:121::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;62753:121:0;;;;;;;;:::i;36329:316::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;36329:316:0;;;;;;;;:::i;38209:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38209:253:0;;;;;;;;:::i;35431:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35431:83:0;;;:::i;:::-;;;;;;;;32731:44;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;32731:44:0;;;;;;;;:::i;:::-;;;;;;;;;;;;38812:479;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38812:479:0;;;;;;;;:::i;54225:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54225:44:0;;;:::i;36653:218::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;36653:218:0;;;;;;;;:::i;54841:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54841:26:0;;;:::i;37379:377::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37379:377:0;;;;;;;;:::i;59389:187::-;;;;;;;;;:::i;40651:111::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;40651:111:0;;;;;;;;:::i;37764:437::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37764:437:0;;;;;;;;:::i;55580:49::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55580:49:0;;;:::i;54614:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54614:41:0;;;:::i;38470:334::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38470:334:0;;;;;;;;:::i;45166:124::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;45166:124:0;;;;;;;;:::i;56267:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;56267:104:0;;;;;;;;:::i;56379:134::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;56379:134:0;;;;;;;;:::i;54680:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54680:48:0;;;:::i;55333:51::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55333:51:0;;;:::i;57289:1062::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57289:1062:0;;;:::i;54928:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54928:32:0;;;:::i;54473:57::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54473:57:0;;;:::i;35625:198::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;35625:198:0;;;;;;;;:::i;16205:148::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16205:148:0;;;:::i;54178:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54178:40:0;;;:::i;56015:114::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;56015:114:0;;;;;;;;:::i;33490:49::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33490:49:0;;;:::i;:::-;;;;;;;;63384:130;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;63384:130:0;;;;;;;;:::i;54336:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54336:37:0;;;:::i;37156:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37156:120:0;;;;;;;;:::i;15569:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15569:79:0;;;:::i;62539:133::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;62539:133:0;;;;;;;;:::i;55094:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55094:30:0;;;:::i;40994:122::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;40994:122:0;;;;;;;;:::i;61843:523::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;61843:523:0;;;:::i;54735:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54735:40:0;;;:::i;35336:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35336:87:0;;;:::i;57094:187::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57094:187:0;;;:::i;36879:269::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;36879:269:0;;;;;;;;:::i;17211:293::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17211:293:0;;;:::i;35831:170::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;35831:170:0;;;;;;;;:::i;32434:82::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32434:82:0;;;:::i;54550:57::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;54550:57:0;;;;;;;;:::i;16760:89::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16760:89:0;;;:::i;55021:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55021:27:0;;;:::i;63108:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;63108:258:0;;;;;;;;:::i;41124:171::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;41124:171:0;;;;;;;;:::i;33546:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33546:36:0;;;:::i;62892:206::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;62892:206:0;;;;;;;;:::i;55864:136::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;55864:136:0;;;;;;;;:::i;16925:214::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;16925:214:0;;;;;;;;:::i;36009:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;36009:143:0;;;;;;;;:::i;56141:114::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;56141:114:0;;;;;;;;:::i;40770:110::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;40770:110:0;;;;;;;;:::i;16508:244::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;16508:244:0;;;;;;;;:::i;51397:184::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51397:184:0;;;:::i;54788:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54788:41:0;;;:::i;54276:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54276:39:0;;;:::i;55697:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55697:25:0;;;:::i;40888:98::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;;;;;;;;;40962:7:::1;:16:::0;40888:98::o;35245:83::-;35315:5;35308:12;;;;;;;;-1:-1:-1;;35308:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35282:13;;35308:12;;35315:5;;35308:12;;35315:5;35308:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35245:83;;:::o;36160:161::-;36235:4;36252:39;36261:12;:10;:12::i;:::-;36275:7;36284:6;36252:8;:39::i;:::-;-1:-1:-1;36309:4:0;36160:161;;;;;:::o;37284:87::-;37353:10;;37284:87;:::o;55547:26::-;;;;:::o;35522:95::-;35602:7;;35522:95;:::o;62396:125::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;62484:16:::1;:27:::0;62396:125::o;56528:558::-;56596:7;56616:20;56639:194;56801:31;56819:11;56801:9;:31::i;:::-;56639:122;56707:53;56717:42;56707:9;:53::i;:::-;56639;56670:21;56688:1;56670:9;:21::i;:::-;56647:7;;;56639:53;:30;:53;:::i;:::-;:67;:122;:67;:122;:::i;:194::-;56616:217;;56890:5;:24;56929:7;;56951:29;56969:9;56951;:29::i;:::-;56995:21;57031:12;57058:9;56890:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56890:188:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56890:188:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;56890:188:0;;;;;;;;;56883:195;;;56528:558;;;;:::o;62753:121::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;62836:21:::1;:30:::0;;-1:-1:-1;;62836:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62753:121::o;36329:316::-;36427:4;36444:39;36454:6;36462:9;36473:6;36481:1;36444:9;:39::i;:::-;36494:121;36503:6;36511:12;:10;:12::i;:::-;36525:89;36563:6;36525:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36525:19:0;;;;;;:11;:19;;;;;;36545:12;:10;:12::i;:::-;-1:-1:-1;;;;;36525:33:0;;;;;;;;;;;;-1:-1:-1;36525:33:0;;;:89;;:37;:89;:::i;:::-;36494:8;:121::i;:::-;-1:-1:-1;36633:4:0;36329:316;;;;;:::o;38209:253::-;38276:7;38315;;38304;:18;;38296:73;;;;-1:-1:-1;;;38296:73:0;;;;;;;;;38380:19;38402:10;:8;:10::i;:::-;38380:32;-1:-1:-1;38430:24:0;:7;38380:32;38430:24;:11;:24;:::i;35431:83::-;35497:9;;;;35431:83;:::o;32731:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32731:44:0;;:::o;38812:479::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;38894:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38886:60;;;;-1:-1:-1::0;;;38886:60:0::1;;;;;;;;;38962:9;38957:327;38981:9;:16:::0;38977:20;::::1;38957:327;;;39039:7;-1:-1:-1::0;;;;;39023:23:0::1;:9;39033:1;39023:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;39023:12:0::1;:23;39019:254;;;39082:9;39092:16:::0;;-1:-1:-1;;39092:20:0;;;39082:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;39067:9:::1;:12:::0;;-1:-1:-1;;;;;39082:31:0;;::::1;::::0;39077:1;;39067:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;39067:46:0::1;-1:-1:-1::0;;;;;39067:46:0;;::::1;;::::0;;39132:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;39171:11:::1;:20:::0;;;;:28;;-1:-1:-1;;39171:28:0::1;::::0;;39218:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39218:15:0;;;;;-1:-1:-1;;;;;;39218:15:0::1;::::0;;;;;39252:5:::1;;39019:254;38999:3;;38957:327;;;;38812:479:::0;:::o;54225:44::-;;;;:::o;36653:218::-;36741:4;36758:83;36767:12;:10;:12::i;:::-;36781:7;36790:50;36829:10;36790:11;:25;36802:12;:10;:12::i;:::-;-1:-1:-1;;;;;36790:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;36790:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;54841:26::-;;;;:::o;37379:377::-;37431:14;37448:12;:10;:12::i;:::-;-1:-1:-1;;;;;37480:19:0;;;;;;:11;:19;;;;;;37431:29;;-1:-1:-1;37480:19:0;;37479:20;37471:77;;;;-1:-1:-1;;;37471:77:0;;;;;;;;;37560:15;37584:19;37595:7;37584:10;:19::i;:::-;-1:-1:-1;;;;;;;;;37632:15:0;;;;;;:7;:15;;;;;;37559:44;;-1:-1:-1;37632:28:0;;:15;-1:-1:-1;37559:44:0;37632:19;:28::i;:::-;-1:-1:-1;;;;;37614:15:0;;;;;;:7;:15;;;;;:46;37681:7;;:20;;37693:7;37681:20;:11;:20;:::i;:::-;37671:7;:30;37725:10;;:23;;37740:7;37725:23;:14;:23;:::i;:::-;37712:10;:36;-1:-1:-1;;;37379:377:0:o;59389:187::-;59476:4;59493:53;59503:12;:10;:12::i;:::-;59517:9;59528:6;59536:9;59493;:53::i;40651:111::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;40720:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;40720:34:0::1;40750:4;40720:34;::::0;;40651:111::o;37764:437::-;37855:7;37894;;37883;:18;;37875:62;;;;-1:-1:-1;;;37875:62:0;;;;;;;;;37953:17;37948:246;;37988:15;38012:19;38023:7;38012:10;:19::i;:::-;-1:-1:-1;37987:44:0;;-1:-1:-1;38046:14:0;;-1:-1:-1;;;;;38046:14:0;37948:246;38095:23;38126:19;38137:7;38126:10;:19::i;:::-;-1:-1:-1;38093:52:0;;-1:-1:-1;38160:22:0;;-1:-1:-1;;;;;38160:22:0;55580:49;;;;:::o;54614:41::-;;;;;;:::o;38470:334::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;38553:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38552:21;38544:61;;;;-1:-1:-1::0;;;38544:61:0::1;;;;;;;;;-1:-1:-1::0;;;;;38620:16:0;::::1;38639:1;38620:16:::0;;;:7:::1;:16;::::0;;;;;:20;38616:109:::1;;-1:-1:-1::0;;;;;38696:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;38676:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;38657:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;38616:109:::1;-1:-1:-1::0;;;;;38735:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38735:27:0::1;38758:4;38735:27:::0;;::::1;::::0;;;38773:9:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;38773::0;;;;::::1;::::0;;-1:-1:-1;;;;;;38773:23:0::1;::::0;;::::1;::::0;;38470:334::o;45166:124::-;-1:-1:-1;;;;;45255:27:0;45231:4;45255:27;;;:18;:27;;;;;;;;;45166:124::o;56267:104::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;56339:14:::1;:24:::0;56267:104::o;56379:134::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;56467:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;56467:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;56379:134::o;54680:48::-;;;;:::o;55333:51::-;;;;:::o;57289:1062::-;32119:9;32132:10;32119:23;32111:53;;;;-1:-1:-1;;;32111:53:0;;;;;;;;;31127:1:::1;31731:7;;:19;;31723:63;;;;-1:-1:-1::0;;;31723:63:0::1;;;;;;;;;31127:1;31864:7;:18:::0;57385:10:::2;57362:34;::::0;;;:22:::2;:34;::::0;;;;;57400:15:::2;-1:-1:-1::0;57362:53:0::2;57354:99;;;;-1:-1:-1::0;;;57354:99:0::2;;;;;;;;;57497:1;57472:21;57482:10;57472:9;:21::i;:::-;:26;;57464:75;;;;-1:-1:-1::0;;;57464:75:0::2;;;;;;;;;57552:14;57569:30;57588:10;57569:18;:30::i;:::-;57552:47;;57655:15;;57645:6;:25;57641:357;;57701:21;57725:13;:6:::0;57736:1:::2;57725:13;:10;:13;:::i;:::-;57780:14;::::0;57772:56:::2;::::0;57701:37;;-1:-1:-1;57754:12:0::2;::::0;-1:-1:-1;;;;;57780:14:0;;::::2;::::0;57701:37;;57772:56:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;57753:75:0;;;57851:7;57843:76;;;;-1:-1:-1::0;;;57843:76:0::2;;;;;;;;;57961:25;57972:13;:6:::0;57983:1:::2;57972:13;:10;:13;:::i;:::-;57961:6:::0;;:25:::2;:10;:25;:::i;:::-;57952:34;;57641:357;;;58101:21;:19;:21::i;:::-;58069:10;58046:34;::::0;;;:22:::2;:34;::::0;;;;;;58083:15:::2;:39:::0;;;::::2;58046:76:::0;;;;58138;::::2;::::0;::::2;::::0;58069:10;58171:6;;58083:39;58138:76:::2;;;;;;;;;;58228:9;58250:10;-1:-1:-1::0;;;;;58242:24:0::2;58275:6;58242:44;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;58227:59:0;;;58305:4;58297:46;;;;-1:-1:-1::0;;;58297:46:0::2;;;;;;;;;-1:-1:-1::0;;31083:1:0::1;32043:7;:22:::0;57289:1062::o;54928:32::-;;;;:::o;54473:57::-;;;;:::o;35625:198::-;-1:-1:-1;;;;;35715:20:0;;35691:7;35715:20;;;:11;:20;;;;;;;;35711:49;;;-1:-1:-1;;;;;;35744:16:0;;;;;;:7;:16;;;;;;35737:23;;35711:49;-1:-1:-1;;;;;35798:16:0;;;;;;:7;:16;;;;;;35778:37;;:19;:37::i;16205:148::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;16312:1:::1;16296:6:::0;;16275:40:::1;::::0;-1:-1:-1;;;;;16296:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16275:40:0;16312:1;;16275:40:::1;16343:1;16326:19:::0;;-1:-1:-1;;;;;;16326:19:0::1;::::0;;16205:148::o;54178:40::-;;;;:::o;56015:114::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;56098:6:::1;:23:::0;56015:114::o;33490:49::-;;;:::o;63384:130::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;63475:19:::1;:30:::0;63384:130::o;54336:37::-;;;;:::o;37156:120::-;-1:-1:-1;;;;;37248:20:0;37224:4;37248:20;;;:11;:20;;;;;;;;;37156:120::o;15569:79::-;15607:7;15634:6;-1:-1:-1;;;;;15634:6:0;15569:79;:::o;62539:133::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;62636:14:::1;:28:::0;;-1:-1:-1;;;;;;62636:28:0::1;-1:-1:-1::0;;;;;62636:28:0;;;::::1;::::0;;;::::1;::::0;;62539:133::o;55094:30::-;;;;:::o;40994:122::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;41080:13:::1;:28:::0;40994:122::o;61843:523::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;61948:15:::1;61966:7;61948:25:::0;::::1;61924:21;:49:::0;62003:6:::1;61984:16;:25:::0;;;62020:20:::1;:29:::0;62107:18:::1;62083:21;:42:::0;62136:29:::1;:47:::0;62194:20:::1;62210:3;62194:15;:20::i;:::-;62225:30;62250:4;62225:24;:30::i;:::-;62297:61;62314:4;62329:13;-1:-1:-1::0;;62297:8:0::1;:61::i;:::-;61843:523::o:0;54735:40::-;;;;:::o;35336:87::-;35408:7;35401:14;;;;;;;;-1:-1:-1;;35401:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35375:13;;35401:14;;35408:7;;35401:14;;35408:7;35401:14;;;;;;;;;;;;;;;;;;;;;;;;57094:187;57146:7;57189:21;;57170:15;:40;57166:69;;-1:-1:-1;57219:16:0;;57212:23;;57166:69;-1:-1:-1;57253:20:0;;57094:187;:::o;36879:269::-;36972:4;36989:129;36998:12;:10;:12::i;:::-;37012:7;37021:96;37060:15;37021:96;;;;;;;;;;;;;;;;;:11;:25;37033:12;:10;:12::i;:::-;-1:-1:-1;;;;;37021:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37021:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;17211:293::-;17263:14;;-1:-1:-1;;;;;17263:14:0;17281:10;17263:28;17255:76;;;;-1:-1:-1;;;17255:76:0;;;;;;;;;17356:9;;17350:3;:15;17342:60;;;;-1:-1:-1;;;17342:60:0;;;;;;;;;17447:14;;;17439:6;;17418:44;;-1:-1:-1;;;;;17447:14:0;;;;17439:6;;;;-1:-1:-1;;;;;;;;;;;17418:44:0;;17482:14;;;17473:23;;-1:-1:-1;;;;;;17473:23:0;-1:-1:-1;;;;;17482:14:0;;;17473:23;;;;;;17211:293::o;35831:170::-;35909:4;35926:45;35936:12;:10;:12::i;:::-;35950:9;35961:6;35969:1;35926:9;:45::i;32434:82::-;;;-1:-1:-1;;;;;32434:82:0;;:::o;54550:57::-;;;;;;;;;;;;;:::o;16760:89::-;16832:9;;16760:89;:::o;55021:27::-;;;;:::o;63108:258::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;63207:12:::1;63233:7;-1:-1:-1::0;;;;;63225:21:0::1;63255:6;63225:42;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;63206:61:0;;;63286:7;63278:76;;;;-1:-1:-1::0;;;63278:76:0::1;;;;;;;;;15851:1;63108:258:::0;;:::o;41124:171::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;41201:21:::1;:32:::0;;-1:-1:-1;;41201:32:0::1;::::0;::::1;;;::::0;;41249:38:::1;::::0;::::1;::::0;::::1;::::0;41201:32;;41249:38:::1;;;;;;;;;;41124:171:::0;:::o;33546:36::-;;;:::o;62892:206::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;62986:14:::1;:12;:14::i;:::-;63011:53;63037:4;63044:10;63056:7;63011:17;:53::i;:::-;63075:15;:13;:15::i;55864:136::-:0;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;55956:36:::1;55986:5;55956:25;55968:12;55956:7;;:11;;:25;;;;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;55941:12;:51:::0;-1:-1:-1;55864:136:0:o;16925:214::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;17006:6:::1;::::0;;;16989:23;;-1:-1:-1;;;;;;16989:23:0;;::::1;-1:-1:-1::0;;;;;17006:6:0;::::1;16989:23;::::0;;;17023:19:::1;::::0;;17065:3:::1;:10:::0;::::1;17053:9;:22:::0;17091:40:::1;::::0;17006:6;;-1:-1:-1;;;;;;;;;;;17091:40:0;17006:6;;17091:40:::1;16925:214:::0;:::o;36009:143::-;-1:-1:-1;;;;;36117:18:0;;;36090:7;36117:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36009:143::o;56141:114::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;56224:6:::1;:23:::0;56141:114::o;40770:110::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;40837:27:0::1;40867:5;40837:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;40837:35:0::1;::::0;;40770:110::o;16508:244::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;-1:-1:-1;;;;;16597:22:0;::::1;16589:73;;;;-1:-1:-1::0;;;16589:73:0::1;;;;;;;;;16699:6;::::0;;16678:38:::1;::::0;-1:-1:-1;;;;;16678:38:0;;::::1;::::0;16699:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16678:38:0;::::1;16727:6;:17:::0;;-1:-1:-1;;;;;;16727:17:0::1;-1:-1:-1::0;;;;;16727:17:0;;;::::1;::::0;;;::::1;::::0;;16508:244::o;51397:184::-;15791:12;:10;:12::i;:::-;15781:6;;-1:-1:-1;;;;;15781:6:0;;;:22;;;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;;;51473:7:::1;::::0;51467:14:::1;::::0;;;:5:::1;:14;::::0;;;;:22:::1;;::::0;51461:3:::1;:28;:61:::0;::::1;;;-1:-1:-1::0;51499:7:0::1;::::0;51493:14:::1;::::0;;;:5:::1;:14;::::0;;;;:20:::1;;::::0;::::1;;:29;51461:61;51457:117;;;51543:15;:13;:15::i;54788:41::-:0;;;;;;:::o;54276:39::-;;;;:::o;55697:25::-;;;-1:-1:-1;;;;;55697:25:0;;:::o;4836:471::-;4894:7;5139:6;5135:47;;-1:-1:-1;5169:1:0;5162:8;;5135:47;5206:5;;;5210:1;5206;:5;:1;5230:5;;;;;:10;5222:56;;;;-1:-1:-1;;;5222:56:0;;;;;;;;;5298:1;4836:471;-1:-1:-1;;;4836:471:0:o;5783:132::-;5841:7;5868:39;5872:1;5875;5868:39;;;;;;;;;;;;;;;;;:3;:39::i;7975:106::-;8063:10;7975:106;:::o;45298:337::-;-1:-1:-1;;;;;45391:19:0;;45383:68;;;;-1:-1:-1;;;45383:68:0;;;;;;;;;-1:-1:-1;;;;;45470:21:0;;45462:68;;;;-1:-1:-1;;;45462:68:0;;;;;;;;;-1:-1:-1;;;;;45543:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;45595:32;;;;;45573:6;;45595:32;;;;;;;;;;45298:337;;;:::o;3946:136::-;4004:7;4031:43;4035:1;4038;4031:43;;;;;;;;;;;;;;;;;:3;:43::i;45643:917::-;-1:-1:-1;;;;;45789:18:0;;45781:68;;;;-1:-1:-1;;;45781:68:0;;;;;;;;;-1:-1:-1;;;;;45868:16:0;;45860:64;;;;-1:-1:-1;;;45860:64:0;;;;;;;;;45952:1;45943:6;:10;45935:64;;;;-1:-1:-1;;;45935:64:0;;;;;;;;;46012:42;46030:4;46036:2;46040:6;46048:5;46012:17;:42::i;:::-;46096:24;46111:4;46117:2;46096:14;:24::i;:::-;-1:-1:-1;;;;;46314:24:0;;46194:12;46314:24;;;:18;:24;;;;;;46209:4;;46314:24;;;:50;;-1:-1:-1;;;;;;46342:22:0;;;;;;:18;:22;;;;;;;;46314:50;:75;;;-1:-1:-1;46368:21:0;;;;46314:75;46310:123;;;-1:-1:-1;46416:5:0;46310:123;46511:41;46526:4;46532:2;46536:6;46544:7;46511:14;:41::i;:::-;45643:917;;;;;:::o;4385:192::-;4471:7;4507:12;4499:6;;;;4491:29;;;;-1:-1:-1;;;4491:29:0;;;;;;;;;;-1:-1:-1;;;4543:5:0;;;4385:192::o;42760:164::-;42802:7;42823:15;42840;42859:19;:17;:19::i;:::-;42822:56;;-1:-1:-1;42822:56:0;-1:-1:-1;42896:20:0;42822:56;;42896:20;:11;:20;:::i;:::-;42889:27;;;;42760:164;:::o;3482:181::-;3540:7;3572:5;;;3596:6;;;;3588:46;;;;-1:-1:-1;;;3588:46:0;;;;;;;;41553:419;41612:7;41621;41630;41639;41648;41657;41678:23;41703:12;41717:18;41739:20;41751:7;41739:11;:20::i;:::-;41677:82;;;;;;41771:15;41788:23;41813:12;41829:50;41841:7;41850:4;41856:10;41868;:8;:10::i;:::-;41829:11;:50::i;:::-;41770:109;;;;-1:-1:-1;41770:109:0;;-1:-1:-1;41930:15:0;;-1:-1:-1;41947:4:0;;-1:-1:-1;41953:10:0;;-1:-1:-1;41553:419:0;;-1:-1:-1;;;;;41553:419:0:o;44555:382::-;44602:7;;:12;:34;;;;-1:-1:-1;44618:13:0;;:18;44602:34;44598:47;;;44638:7;;44598:47;44675:7;;;44657:15;:25;44717:13;;;44693:21;:37;44763:11;;;44741:19;:33;44804:8;;;44785:16;:27;-1:-1:-1;44831:11:0;;;;44853:17;;;;44881:15;;;44907:12;44555:382::o;47562:1205::-;47661:15;47678:23;47703:12;47717:23;47742:12;47756:18;47778:19;47789:7;47778:10;:19::i;:::-;47660:137;;;;;;;;;;;;47818:18;47844:1;47839:4;:6;;;;;;;-1:-1:-1;47879:1:0;47874:6;;47856:15;47922:44;47839:6;47922:28;:15;47874:6;47922:19;:28::i;:44::-;-1:-1:-1;;;;;48005:15:0;;;;;;:7;:15;;;;;;47891:75;;-1:-1:-1;48005:28:0;;48025:7;48005:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;47987:15:0;;;;;;;:7;:15;;;;;;:46;;;;48065:18;;;;;;;:44;;48088:20;48065:44;:22;:44;:::i;:::-;-1:-1:-1;;;;;48044:18:0;;;;;;:7;:18;;;;;:65;48120:26;48135:10;48120:14;:26::i;:::-;48157:23;48169:4;48175;48157:11;:23::i;:::-;48204:12;;48201:470;;48232:14;48274:11;-1:-1:-1;;;;;48264:21:0;:6;-1:-1:-1;;;;;48264:21:0;;48261:203;;;-1:-1:-1;48313:9:0;48261:203;;;48359:11;-1:-1:-1;;;;;48346:24:0;:9;-1:-1:-1;;;;;48346:24:0;;48343:121;;;-1:-1:-1;48398:6:0;48343:121;;;-1:-1:-1;48454:10:0;48343:121;48497:58;48518:7;48527:10;48539:7;;48548:6;48497:20;:58::i;:::-;48570:89;48588:4;48603:42;48648:7;48657:1;48570:9;:89::i;:::-;48201:470;;-1:-1:-1;;;;;48686:73:0;;;;;;;48714:44;48747:10;48714:28;:15;48734:7;48714:28;:19;:28;:::i;:44::-;48686:73;;;;;;;;;;;;;;;47562:1205;;;;;;;;;;;;:::o;44945:213::-;44999:15;;44989:7;:25;45041:21;;45025:13;:37;45087:16;;45073:11;:30;;;45114:8;:27;44945:213::o;50309:1076::-;50399:7;;50380:16;50456:14;;;:5;:14;;;;;:19;;;;50500:23;;;;;50494:3;:29;:63;;;;-1:-1:-1;50527:15:0;;;;:5;:15;;;;;:21;;;;;:30;50494:63;50490:888;;;50600:15;;;;:5;:15;;;;;;:21;;:28;;-1:-1:-1;;50600:28:0;50624:4;50600:28;;;50697:7;;50691:14;;;;:21;;;-1:-1:-1;;;;;50691:21:0;;50758:28;50782:3;50758:19;:11;50774:2;50758:19;:15;:19;:::i;:28::-;:30;50755:287;;;50816:66;50834:4;50841:7;50850:28;50874:3;50850:19;:11;50866:2;50850:19;:15;:19;:::i;:28::-;50880:1;50816:9;:66::i;:::-;50909:110;50927:4;50942:42;50987:28;51011:3;50987:19;:11;51003:2;50987:19;:15;:19;:::i;50909:110::-;51085:10;:20;;-1:-1:-1;;;;;;51085:20:0;-1:-1:-1;;;;;51085:20:0;;;;;51161:7;:9;;-1:-1:-1;51161:9:0;;;;;;51128:10;;;;-1:-1:-1;51193:15:0;;;:5;:15;;;;;51221:3;51193:31;;;;51281:6;;51128:10;;51085:20;51273:15;;51221:3;51273:7;:15::i;:::-;51247;;;;:5;:15;;;;;:23;;:41;51334:28;51358:3;51334:19;:11;51350:2;51334:19;:15;:19;:::i;:28::-;51311:15;;;;:5;:15;;;;;:20;;:51;-1:-1:-1;50309:1076:0;;:::o;6411:278::-;6497:7;6532:12;6525:5;6517:28;;;;-1:-1:-1;;;6517:28:0;;;;;;;;;;;6556:9;6572:1;6568;:5;;;;;;;6411:278;-1:-1:-1;;;;;6411:278:0:o;58835:546::-;-1:-1:-1;;;;;59004:26:0;;;;;;:20;:26;;;;;;;;:35;;;:110;;-1:-1:-1;;;;;;59081:24:0;;;;;;:20;:24;;;;;;;;:33;59004:110;58986:388;;;59178:21;;59170:5;:29;:81;;;;;59222:29;;59203:15;:48;;59170:81;59166:197;;;59290:12;;59280:6;:22;;59272:75;;;;-1:-1:-1;;;59272:75:0;;;;;;;;;58835:546;;;;:::o;59584:2245::-;59935:28;59966:24;59984:4;59966:9;:24::i;:::-;59935:55;;60031:12;;60007:20;:36;60003:104;;-1:-1:-1;60083:12:0;;60003:104;60161:20;;60213:16;;60137:44;;;;;60213:16;;;;;60212:17;:40;;;;;60242:10;60212:40;:72;;;;;60273:11;-1:-1:-1;;;;;60265:19:0;:4;-1:-1:-1;;;;;60265:19:0;;;60212:72;:106;;;;-1:-1:-1;60297:21:0;;;;60212:106;:173;;;;-1:-1:-1;;;;;;60333:21:0;;60349:4;60333:21;:51;;;;;60372:11;-1:-1:-1;;;;;60358:26:0;:2;-1:-1:-1;;;;;60358:26:0;;60333:51;60331:54;60212:173;60194:1628;;;60529:20;;;-1:-1:-1;60653:17:0;60673:27;60529:20;60698:1;60673:27;:24;:27;:::i;:::-;60653:47;-1:-1:-1;60715:13:0;60731:42;60771:1;60731:35;:20;60653:47;60731:35;:24;:35;:::i;:42::-;60715:58;-1:-1:-1;60788:18:0;60809:31;:20;60715:58;60809:31;:24;:31;:::i;:::-;60788:52;-1:-1:-1;60857:30:0;60890:20;:9;60904:5;60890:20;:13;:20;:::i;:::-;61039:70;;-1:-1:-1;;;61039:70:0;;60857:53;;-1:-1:-1;60952:21:0;;61039:5;;:22;;:70;;61070:13;;60857:53;;61039:70;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;61039:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;61039:70:0;;;;61461:20;61484:41;61510:14;61484:21;:25;;:41;;;;:::i;:::-;61461:64;-1:-1:-1;61542:31:0;61576:19;61461:64;61593:1;61576:19;:16;:19;:::i;:::-;61542:53;;61653:5;:18;61680:13;61696:7;:5;:7::i;:::-;61705:10;61717:23;61653:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;61653:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;61653:88:0;;;;61763:47;61778:5;61785:12;61799:10;61763:47;;;;;;;;;;;;;;;;;60194:1628;;;;;;;59584:2245;;;;:::o;46641:912::-;46754:7;46749:41;;46776:14;:12;:14::i;:::-;46834:47;46863:9;46874:6;46834:28;:47::i;:::-;-1:-1:-1;;;;;46898:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;46922:22:0;;;;;;:11;:22;;;;;;;;46921:23;46898:46;46894:597;;;46961:48;46983:6;46991:9;47002:6;46961:21;:48::i;:::-;46894:597;;;-1:-1:-1;;;;;47032:19:0;;;;;;:11;:19;;;;;;;;47031:20;:46;;;;-1:-1:-1;;;;;;47055:22:0;;;;;;:11;:22;;;;;;;;47031:46;47027:464;;;47094:46;47114:6;47122:9;47133:6;47094:19;:46::i;47027:464::-;-1:-1:-1;;;;;47163:19:0;;;;;;:11;:19;;;;;;;;47162:20;:47;;;;-1:-1:-1;;;;;;47187:22:0;;;;;;:11;:22;;;;;;;;47186:23;47162:47;47158:333;;;47226:44;47244:6;47252:9;47263:6;47226:17;:44::i;47158:333::-;-1:-1:-1;;;;;47292:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47315:22:0;;;;;;:11;:22;;;;;;;;47292:45;47288:203;;;47354:48;47376:6;47384:9;47395:6;47354:21;:48::i;47288:203::-;47435:44;47453:6;47461:9;47472:6;47435:17;:44::i;:::-;47508:7;47503:42;;47530:15;:13;:15::i;42932:556::-;43030:7;;43066;;42983;;;;;43084:289;43108:9;:16;43104:20;;43084:289;;;43174:7;43150;:21;43158:9;43168:1;43158:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43158:12:0;43150:21;;;;;;;;;;;;;:31;;:66;;;43209:7;43185;:21;43193:9;43203:1;43193:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43193:12:0;43185:21;;;;;;;;;;;;;:31;43150:66;43146:97;;;43226:7;;43235;;43218:25;;;;;;;;;43146:97;43268:34;43280:7;:21;43288:9;43298:1;43288:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43288:12:0;43280:21;;;;;;;;;;;;;43268:7;;:34;:11;:34;:::i;:::-;43258:44;;43327:34;43339:7;:21;43347:9;43357:1;43347:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43347:12:0;43339:21;;;;;;;;;;;;;43327:7;;:34;:11;:34;:::i;:::-;43317:44;-1:-1:-1;43126:3:0;;43084:289;;;-1:-1:-1;43409:7:0;;43397;;:20;;;:11;:20;:::i;:::-;43387:7;:30;43383:61;;;43427:7;;43436;;43419:25;;;;;;;;43383:61;43463:7;;-1:-1:-1;43472:7:0;-1:-1:-1;42932:556:0;;;:::o;41983:330::-;42043:7;42052;42061;42081:12;42096:24;42112:7;42096:15;:24::i;:::-;42081:39;;42131:18;42152:30;42174:7;42152:21;:30::i;:::-;42131:51;-1:-1:-1;42193:23:0;42219:33;42131:51;42219:17;:7;42231:4;42219:17;:11;:17;:::i;:33::-;42193:59;42288:4;;-1:-1:-1;42294:10:0;;-1:-1:-1;41983:330:0;;-1:-1:-1;;;41983:330:0:o;42321:429::-;42436:7;;;;42492:24;:7;42504:11;42492:24;:11;:24;:::i;:::-;42474:42;-1:-1:-1;42527:12:0;42542:21;:4;42551:11;42542:21;:8;:21;:::i;:::-;42527:36;-1:-1:-1;42574:18:0;42595:27;:10;42610:11;42595:27;:14;:27;:::i;:::-;42574:48;-1:-1:-1;42633:23:0;42659:33;42574:48;42659:17;:7;42671:4;42659:17;:11;:17;:::i;:33::-;42711:7;;;;-1:-1:-1;42737:4:0;;-1:-1:-1;42321:429:0;;-1:-1:-1;;;;;;;42321:429:0:o;43496:355::-;43559:19;43581:10;:8;:10::i;:::-;43559:32;-1:-1:-1;43602:18:0;43623:27;:10;43559:32;43623:27;:14;:27;:::i;:::-;43702:4;43686:22;;;;:7;:22;;;;;;43602:48;;-1:-1:-1;43686:38:0;;43602:48;43686:38;:26;:38;:::i;:::-;43677:4;43661:22;;;;:7;:22;;;;;;;;:63;;;;43739:11;:26;;;;;;43735:108;;;43821:4;43805:22;;;;:7;:22;;;;;;:38;;43832:10;43805:38;:26;:38;:::i;:::-;43796:4;43780:22;;;;:7;:22;;;;;:63;43496:355;;;:::o;41395:147::-;41473:7;;:17;;41485:4;41473:17;:11;:17;:::i;:::-;41463:7;:27;41514:10;;:20;;41529:4;41514:20;:14;:20;:::i;:::-;41501:10;:33;-1:-1:-1;;41395:147:0:o;48779:1518::-;49011:11;;;;:5;:11;;;;;:19;;;49005:3;:25;:55;;;;-1:-1:-1;49034:11:0;;;;:5;:11;;;;;:17;;;;;:26;49005:55;49001:111;;;49081:15;:13;:15::i;:::-;49139:7;;49132:14;;49244:12;49259:3;49244:18;;49337:16;49392:14;;49377:11;:29;49374:708;;49434:11;;;;:5;:11;;;;;:19;;;49427:26;;:62;;;;-1:-1:-1;49487:1:0;49457:11;;;:5;:11;;;;;:18;;;-1:-1:-1;;;;;49457:18:0;:32;49427:62;49423:275;;;49519:58;49572:4;49520:46;49559:6;;49538:14;;49522:11;49521:32;;;;;;;49520:46;:38;:46;:::i;:::-;49519:52;:58;:52;:58;:::i;:::-;49508:69;;49423:275;;;49678:11;;;;:5;:11;;;;;:19;;;49665:6;;49644:14;;49625:73;;49678:19;49626:46;;49628:11;49644:14;49627:32;;;49625:73;49614:84;;49423:275;49783:6;;49782:18;;49795:4;49782:18;:12;:18;:::i;:::-;49771:8;:29;49767:158;;;49820:11;;;;:5;:11;;;;;:19;;:30;;;49767:158;;;49909:6;;:16;;49920:4;49909:16;:10;:16;:::i;:::-;49887:11;;;;:5;:11;;;;;:19;;:38;49767:158;49994:11;;;;:5;:11;;;;;:18;;;-1:-1:-1;;;;;49994:29:0;;;:18;;:29;49991:79;;50042:11;;;;:5;:11;;;;;:18;;:28;;-1:-1:-1;;;;;;50042:28:0;-1:-1:-1;;;;;50042:28:0;;;;;49991:79;50254:11;;;;:5;:11;;;;;:16;;;:35;;50275:13;50254:35;:20;:35;:::i;:::-;50235:11;;;;:5;:11;;;;;;:16;;:54;;;;-1:-1:-1;;;;;48779:1518:0:o;58359:468::-;58451:31;58485:20;58495:9;58485;:20::i;:::-;58451:54;;58516:29;58548:21;:19;:21::i;:::-;58768:19;;58654:165;;-1:-1:-1;;;58654:165:0;;58516:53;;-1:-1:-1;58654:5:0;;:25;;:165;;58694:23;;58516:53;;58802:6;;58654:165;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58654:165:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58654:165:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;58654:165:0;;;;;;;;;-1:-1:-1;;;;;58618:33:0;;;;;;;:22;:33;;;;;;;:201;;;;58582:237;;;-1:-1:-1;;;58359:468:0:o;52885:1240::-;52988:15;53005:23;53030:12;53044:23;53069:12;53083:18;53105:19;53116:7;53105:10;:19::i;:::-;52987:137;;;;;;;;;;;;53137:18;53163:1;53158:4;:6;;;;;;;-1:-1:-1;53198:1:0;53193:6;;53175:15;53241:44;53158:6;53241:28;:15;53193:6;53241:19;:28::i;:44::-;-1:-1:-1;;;;;53324:15:0;;;;;;:7;:15;;;;;;53210:75;;-1:-1:-1;53324:28:0;;53344:7;53324:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;53306:15:0;;;;;;:7;:15;;;;;;;;:46;;;;53381:7;:15;;;;:28;;53401:7;53381:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;53363:15:0;;;;;;;:7;:15;;;;;;:46;;;;53441:18;;;;;;;:44;;53464:20;53441:44;:22;:44;:::i;:::-;-1:-1:-1;;;;;53420:18:0;;;;;;:7;:18;;;;;:65;53496:26;53511:10;53496:14;:26::i;:::-;53533:23;53545:4;53551;53533:11;:23::i;:::-;53580:9;;53577:467;;53605:14;53647:11;-1:-1:-1;;;;;53637:21:0;:6;-1:-1:-1;;;;;53637:21:0;;53634:203;;;-1:-1:-1;53686:9:0;53634:203;;;53732:11;-1:-1:-1;;;;;53719:24:0;:9;-1:-1:-1;;;;;53719:24:0;;53716:121;;;-1:-1:-1;53771:6:0;53716:121;;;-1:-1:-1;53827:10:0;53716:121;53870:58;53891:7;53900:10;53912:7;;53921:6;53870:20;:58::i;:::-;53943:89;53961:4;53976:42;54021:7;54030:1;53943:9;:89::i;:::-;53577:467;;54090:9;-1:-1:-1;;;;;54073:44:0;54082:6;-1:-1:-1;;;;;54073:44:0;;54101:15;54073:44;;;;;;;51589:1288;51690:15;51707:23;51732:12;51746:23;51771:12;51785:18;51807:19;51818:7;51807:10;:19::i;:::-;51689:137;;;;;;;;;;;;51857:18;51883:1;51878:4;:6;;;;;;;-1:-1:-1;51918:1:0;51913:6;;51895:15;51961:44;51878:6;51961:28;:15;51913:6;51961:19;:28::i;:44::-;-1:-1:-1;;;;;52044:15:0;;;;;;:7;:15;;;;;;51930:75;;-1:-1:-1;52044:28:0;;52064:7;52044:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;52026:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;52104:18;;;;;:7;:18;;;;;:39;;52127:15;52104:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;52083:18:0;;;;;;:7;:18;;;;;;;;:60;;;;52175:7;:18;;;;:44;;52198:20;52175:44;:22;:44;:::i;39301:1342::-;39404:15;39421:23;39446:12;39460:23;39485:12;39499:18;39521:19;39532:7;39521:10;:19::i;:::-;39403:137;;;;;;;;;;;;39560:18;39586:1;39581:4;:6;;;;;;;-1:-1:-1;39621:1:0;39616:6;;39598:15;39664:44;39581:6;39664:28;:15;39616:6;39664:19;:28::i;:44::-;-1:-1:-1;;;;;39747:15:0;;;;;;:7;:15;;;;;;39633:75;;-1:-1:-1;39747:28:0;;39767:7;39747:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;39729:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39804:7;:15;;;;:28;;39824:7;39804:28;:19;:28;:::i;43859:156::-;43923:7;43950:57;43989:7;43950:20;43962:7;;43950;:11;;:20;;;;:::i;44023:168::-;44093:7;44120:63;44165:7;44120:26;44132:13;;44120:7;:11;;:26;;;;:::i;704:241:-1:-;;808:2;796:9;787:7;783:23;779:32;776:2;;;-1:-1;;814:12;776:2;85:6;72:20;97:33;124:5;97:33;;1216:382;;;1345:2;1333:9;1324:7;1320:23;1316:32;1313:2;;;-1:-1;;1351:12;1313:2;230:6;217:20;242:41;277:5;242:41;;;1403:71;1511:2;1550:22;;;;493:20;;-1:-1;;;1307:291;1605:366;;;1726:2;1714:9;1705:7;1701:23;1697:32;1694:2;;;-1:-1;;1732:12;1694:2;85:6;72:20;97:33;124:5;97:33;;;1784:63;-1:-1;1884:2;1923:22;;72:20;97:33;72:20;97:33;;;1892:63;;;;1688:283;;;;;;1978:491;;;;2116:2;2104:9;2095:7;2091:23;2087:32;2084:2;;;-1:-1;;2122:12;2084:2;85:6;72:20;97:33;124:5;97:33;;;2174:63;-1:-1;2274:2;2313:22;;72:20;97:33;72:20;97:33;;;2078:391;;2282:63;;-1:-1;;;2382:2;2421:22;;;;493:20;;2078:391;2476:360;;;2594:2;2582:9;2573:7;2569:23;2565:32;2562:2;;;-1:-1;;2600:12;2562:2;85:6;72:20;97:33;124:5;97:33;;;2652:63;-1:-1;2752:2;2788:22;;359:20;30331:13;;30324:21;32057:32;;32047:2;;-1:-1;;32093:12;2843:366;;;2964:2;2952:9;2943:7;2939:23;2935:32;2932:2;;;-1:-1;;2970:12;3216:235;;3317:2;3305:9;3296:7;3292:23;3288:32;3285:2;;;-1:-1;;3323:12;3285:2;372:6;359:20;384:30;408:5;384:30;;3458:241;;3562:2;3550:9;3541:7;3537:23;3533:32;3530:2;;;-1:-1;;3568:12;3530:2;-1:-1;493:20;;3524:175;-1:-1;3524:175;3706:263;;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;-1:-1;;3827:12;3789:2;-1:-1;641:13;;3783:186;-1:-1;3783:186;3976:360;;;4094:2;4082:9;4073:7;4069:23;4065:32;4062:2;;;-1:-1;;4100:12;4062:2;506:6;493:20;4152:63;;4252:2;4292:9;4288:22;359:20;384:30;408:5;384:30;;14670:222;-1:-1;;;;;30419:54;;;;4579:45;;14797:2;14782:18;;14768:124;15160:460;-1:-1;;;;;30419:54;;;;4422:58;;15523:2;15508:18;;13993:37;;;;15606:2;15591:18;;13993:37;15351:2;15336:18;;15322:298;15627:596;-1:-1;;;;;30419:54;;;4579:45;;30419:54;;;;16027:2;16012:18;;4579:45;16118:2;16103:18;;13993:37;16209:2;16194:18;;13993:37;;;;15846:3;15831:19;;15817:406;16230:357;-1:-1;;;;;30419:54;;;;4579:45;;16573:2;16558:18;;13993:37;16393:2;16378:18;;16364:223;16594:210;30331:13;;30324:21;4949:34;;16715:2;16700:18;;16686:118;17094:310;;17241:2;;17262:17;17255:47;5327:5;29695:12;30005:6;17241:2;17230:9;17226:18;29993:19;-1:-1;31428:101;31442:6;31439:1;31436:13;31428:101;;;31509:11;;;;;31503:18;31490:11;;;30033:14;31490:11;31483:39;31457:10;;31428:101;;;31544:6;31541:1;31538:13;31535:2;;;-1:-1;30033:14;31600:6;17230:9;31591:16;;31584:27;31535:2;-1:-1;31716:7;31700:14;-1:-1;;31696:28;5485:39;;;;30033:14;5485:39;;17212:192;-1:-1;;;17212:192;17411:416;17611:2;17625:47;;;5761:2;17596:18;;;29993:19;5797:34;30033:14;;;5777:55;-1:-1;;;5852:12;;;5845:25;5889:12;;;17582:245;17834:416;18034:2;18048:47;;;6140:2;18019:18;;;29993:19;6176:34;30033:14;;;6156:55;-1:-1;;;6231:12;;;6224:29;6272:12;;;18005:245;18257:416;18457:2;18471:47;;;6523:2;18442:18;;;29993:19;6559:34;30033:14;;;6539:55;-1:-1;;;6614:12;;;6607:28;6654:12;;;18428:245;18680:416;18880:2;18894:47;;;6905:2;18865:18;;;29993:19;6941:34;30033:14;;;6921:55;7010:26;6996:12;;;6989:48;7056:12;;;18851:245;19103:416;19303:2;19317:47;;;7307:2;19288:18;;;29993:19;7343:34;30033:14;;;7323:55;-1:-1;;;7398:12;;;7391:28;7438:12;;;19274:245;19526:416;19726:2;19740:47;;;7689:2;19711:18;;;29993:19;7725:34;30033:14;;;7705:55;-1:-1;;;7780:12;;;7773:34;7826:12;;;19697:245;19949:416;20149:2;20163:47;;;8077:2;20134:18;;;29993:19;8113:34;30033:14;;;8093:55;-1:-1;;;8168:12;;;8161:30;8210:12;;;20120:245;20372:416;20572:2;20586:47;;;8461:2;20557:18;;;29993:19;8497:29;30033:14;;;8477:50;8546:12;;;20543:245;20795:416;20995:2;21009:47;;;8797:2;20980:18;;;29993:19;8833:29;30033:14;;;8813:50;8882:12;;;20966:245;21218:416;21418:2;21432:47;;;9133:2;21403:18;;;29993:19;9169:33;30033:14;;;9149:54;9222:12;;;21389:245;21641:416;21841:2;21855:47;;;9473:2;21826:18;;;29993:19;9509:34;30033:14;;;9489:55;-1:-1;;;9564:12;;;9557:32;9608:12;;;21812:245;22064:416;22264:2;22278:47;;;9859:2;22249:18;;;29993:19;-1:-1;;;30033:14;;;9875:40;9934:12;;;22235:245;22487:416;22687:2;22701:47;;;10185:2;22672:18;;;29993:19;10221:34;30033:14;;;10201:55;-1:-1;;;10276:12;;;10269:25;10313:12;;;22658:245;22910:416;23110:2;23124:47;;;23095:18;;;29993:19;10600:34;30033:14;;;10580:55;10654:12;;;23081:245;23333:416;23533:2;23547:47;;;10905:2;23518:18;;;29993:19;10941:34;30033:14;;;10921:55;-1:-1;;;10996:12;;;10989:33;11041:12;;;23504:245;23756:416;23956:2;23970:47;;;11292:2;23941:18;;;29993:19;11328:34;30033:14;;;11308:55;-1:-1;;;11383:12;;;11376:27;11422:12;;;23927:245;24179:416;24379:2;24393:47;;;11978:2;24364:18;;;29993:19;12014:31;30033:14;;;11994:52;12065:12;;;24350:245;24602:416;24802:2;24816:47;;;12316:2;24787:18;;;29993:19;12352:33;30033:14;;;12332:54;12405:12;;;24773:245;25025:416;25225:2;25239:47;;;12656:2;25210:18;;;29993:19;12692:33;30033:14;;;12672:54;12745:12;;;25196:245;25448:416;25648:2;25662:47;;;12996:2;25633:18;;;29993:19;13032:34;30033:14;;;13012:55;-1:-1;;;13087:12;;;13080:36;13135:12;;;25619:245;25871:416;26071:2;26085:47;;;13386:2;26056:18;;;29993:19;13422:34;30033:14;;;13402:55;-1:-1;;;13477:12;;;13470:26;13515:12;;;26042:245;26294:416;26494:2;26508:47;;;13766:2;26479:18;;;29993:19;13802:34;30033:14;;;13782:55;-1:-1;;;13857:12;;;13850:27;13896:12;;;26465:245;26717:222;13993:37;;;26844:2;26829:18;;26815:124;26946:656;13993:37;;;27344:2;27329:18;;13993:37;;;;30331:13;;30324:21;27421:2;27406:18;;4949:34;27504:2;27489:18;;13993:37;-1:-1;;;;;30419:54;27587:3;27572:19;;4579:45;27179:3;27164:19;;27150:452;27609:444;13993:37;;;27956:2;27941:18;;13993:37;;;;28039:2;28024:18;;13993:37;27792:2;27777:18;;27763:290;28060:596;13993:37;;;28460:2;28445:18;;13993:37;;;;28551:2;28536:18;;13993:37;28642:2;28627:18;;13993:37;28279:3;28264:19;;28250:406;28663:716;13993:37;;;29091:2;29076:18;;13993:37;;;;29182:2;29167:18;;13993:37;;;;29273:2;29258:18;;13993:37;-1:-1;;;;;30419:54;29364:3;29349:19;;4579:45;28910:3;28895:19;;28881:498;29386:214;30635:4;30624:16;;;;14237:35;;29509:2;29494:18;;29480:120;31737:117;-1:-1;;;;;30419:54;;31796:35;;31786:2;;31845:1;;31835:12;31786:2;31780:74;;32001:111;32082:5;30331:13;30324:21;32060:5;32057:32;32047:2;;32103:1;;32093:12
Swarm Source
ipfs://bcccb488668c37fcb336c0e97b27118aa997671e5fe9f179dca2946e716a6587
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,174 | 0.0143 | $45.24 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.