Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
14598705 | 811 days ago | 0.1652096 ETH | ||||
14598639 | 811 days ago | 0.00128883 ETH | ||||
14598639 | 811 days ago | 0.00208469 ETH | ||||
14598416 | 811 days ago | 0.00132902 ETH | ||||
14597470 | 811 days ago | 0.00138166 ETH | ||||
14597012 | 811 days ago | 0.00138168 ETH | ||||
14596930 | 811 days ago | 0.00150734 ETH | ||||
14596930 | 811 days ago | 0.00129981 ETH | ||||
14596930 | 811 days ago | 0.07798356 ETH | ||||
14596930 | 811 days ago | 0.00098888 ETH | ||||
14595638 | 811 days ago | 0.00105314 ETH | ||||
14595547 | 811 days ago | 0.00114491 ETH | ||||
14595527 | 811 days ago | 0.00115156 ETH | ||||
14594890 | 812 days ago | 0.00120403 ETH | ||||
14594835 | 812 days ago | 0.00124503 ETH | ||||
14594738 | 812 days ago | 0.00130759 ETH | ||||
14594684 | 812 days ago | 0.0013129 ETH | ||||
14594570 | 812 days ago | 0.00134386 ETH | ||||
14594570 | 812 days ago | 0.10825104 ETH | ||||
14594420 | 812 days ago | 0.00326096 ETH | ||||
14594420 | 812 days ago | 0.0017786 ETH | ||||
14594420 | 812 days ago | 0.0017786 ETH | ||||
14594420 | 812 days ago | 0.00094065 ETH | ||||
14594420 | 812 days ago | 0.00094065 ETH | ||||
14594420 | 812 days ago | 0.00094065 ETH |
Loading...
Loading
Contract Name:
DividendTracker
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-15 */ pragma solidity ^0.8.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { 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); } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != - 1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? - a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } /** * @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) { function _msgSender() internal view virtual returns (address) { 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } contract CrypTIP is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private botWallets; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private isExchangeWallet; mapping (address => bool) private _isExcludedFromRewards; string private _name = "CrypTIP"; string private _symbol = "CTIP"; uint8 private _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10 ** _decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool isTaxFreeTransfer = false; uint256 public _maxBuyAmount = 5000000 * 10** _decimals; uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH uint public ethSellAmount = 1000000000000000000; //1 ETH address public buyBackAddress = 0x800C3C9b2b132543917cbB5a54A6E99d47e39A7B; address public marketingAddress = 0x72B75111d243Cba98C8746cE261E390366616aA9; address public devAddress = 0x16ce829696166C382e1Dbbb5A1E23e4203Bd06D1; address public deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 public gasForProcessing = 50000; event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor); event SendDividends(uint256 EthAmount); struct Distribution { uint256 devTeam; uint256 marketing; uint256 dividend; uint256 buyBack; } struct TaxFees { uint256 reflectionBuyFee; uint256 liquidityBuyFee; uint256 sellReflectionFee; uint256 sellLiquidityFee; uint256 largeSellFee; } bool private doTakeFees; bool private isSellTxn; TaxFees public taxFees; Distribution public distribution; DividendTracker private dividendTracker; constructor () { _rOwned[_msgSender()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[buyBackAddress] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[devAddress] = true; _isExcludedFromRewards[marketingAddress] = true; _isExcludedFromRewards[_msgSender()] = true; _isExcludedFromRewards[owner()] = true; _isExcludedFromRewards[buyBackAddress] = true; _isExcludedFromRewards[devAddress] = true; //multisig addresses _isExcludedFromRewards[0x7a38eD4B61F5484B28E75505dD019C94A1537fed] = true; _isExcludedFromRewards[0xa6C8e281dC35eC14082A8FBe542DF40E1AC81eeD] = true; _isExcludedFromRewards[0xc633D6733b26fdf9f2209a91994F236291aE91B2] = true; taxFees = TaxFees(0,8,0,12,10); distribution = Distribution(30, 20, 30, 20); 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) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); 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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: 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, "ERC20: decreased allowance below zero")); return true; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function airDrops(address[] calldata newholders, uint256[] calldata amounts) external { uint256 iterator = 0; require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee"); require(newholders.length == amounts.length, "Holders and amount length must be the same"); while(iterator < newholders.length){ _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false); iterator += 1; } } 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 excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner { addRemoveFee(addresses, isExcludeFromFee); } function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner { _addRemoveExchange(addresses, isAddExchange); } function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner { addRemoveRewards(addresses, isExcluded); } function isExcludedFromRewards(address addr) public view returns(bool) { return _isExcludedFromRewards[addr]; } function addRemoveRewards(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromRewards[addr] = flag; } } function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner { ethSellAmount = ethSellAmount_; ethPriceToSwap = ethPriceToSwap_; } function createV2Pair() external onlyOwner { require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set"); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _isExcludedFromRewards[uniswapV2Pair] = true; } function _addRemoveExchange(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; isExchangeWallet[addr] = flag; } } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() { _maxBuyAmount = maxBuyAmount * 10**9; } function setTaxFees(uint256 reflectionFee, uint256 liquidityFee, uint256 sellReflectionFee, uint256 sellLiquidityFee, uint256 superSellOffFee) external onlyOwner { taxFees.reflectionBuyFee = reflectionFee; taxFees.liquidityBuyFee = liquidityFee; taxFees.sellLiquidityFee = sellLiquidityFee; taxFees.sellReflectionFee = sellReflectionFee; taxFees.largeSellFee = superSellOffFee; } function setDistribution(uint256 dividend, uint256 devTeam, uint256 marketing, uint256 buyBack) external onlyOwner { distribution.dividend = dividend; distribution.devTeam = devTeam; distribution.marketing = marketing; distribution.buyBack = buyBack; } function setWalletAddresses(address devAddr, address buyBack, address marketingAddr) external onlyOwner { devAddress = devAddr; buyBackAddress = buyBack; marketingAddress = marketingAddr; } function isAddressBlocked(address addr) public view returns (bool) { return botWallets[addr]; } function blockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, true); } function unblockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, false); } function blockUnblockAddress(address[] memory addresses, bool doBlock) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if(doBlock) { botWallets[addr] = true; } else { delete botWallets[addr]; } } } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } 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; 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); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { uint256 reflectionFee = 0; if(doTakeFees) { reflectionFee = taxFees.reflectionBuyFee; if(isSellTxn) { reflectionFee = taxFees.sellReflectionFee; } } return _amount.mul(reflectionFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { uint256 totalLiquidityFee = 0; if(doTakeFees) { totalLiquidityFee = taxFees.liquidityBuyFee; if(isSellTxn) { totalLiquidityFee = taxFees.sellLiquidityFee; uint ethPrice = getEthPrice(_amount); if(ethPrice >= ethSellAmount) { totalLiquidityFee = totalLiquidityFee.add(taxFees.largeSellFee); } } } return _amount.mul(totalLiquidityFee).div(10**2); } function getEthPrice(uint tokenAmount) public view returns (uint) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); return uniswapV2Router.getAmountsOut(tokenAmount, path)[1]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner { isTaxFreeTransfer = enableDisable; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set"); bool isSell = false; bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); //block the bots, but allow them to transfer to dead wallet if they are blocked if(from != owner() && to != owner() && to != deadWallet) { require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens"); } if(from == uniswapV2Pair || isExchangeWallet[from]) { require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount."); } if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell //only tax if tokens are going back to Uniswap isSell = true; sellTaxTokens(); // dividendTracker.calculateDividendDistribution(); } if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to] && isTaxFreeTransfer) { takeFees = false; } _tokenTransfer(from, to, amount, takeFees, isSell); } function sellTaxTokens() private { uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > 0) { uint ethPrice = getEthPrice(contractTokenBalance); if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) { //send eth to wallets marketing and dev distributeShares(contractTokenBalance); } } } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value"); gasForProcessing = newValue; } function distributeShares(uint256 balanceToShareTokens) private lockTheSwap { swapTokensForEth(balanceToShareTokens); uint256 distributionEth = address(this).balance; uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100); uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100); uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100); uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100); payable(marketingAddress).transfer(marketingShare); sendEthDividends(dividendShare); payable(devAddress).transfer(devTeamShare); payable(buyBackAddress).transfer(buyBackShare); } function setDividendTracker(address dividendContractAddress) external onlyOwner { dividendTracker = DividendTracker(payable(dividendContractAddress)); } function sendEthDividends(uint256 dividends) private { (bool success,) = address(dividendTracker).call{value : dividends}(""); if (success) { emit SendDividends(dividends); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell) private { doTakeFees = takeFees; isSellTxn = isSell; _transferStandard(sender, recipient, amount); try dividendTracker.setTokenBalance(sender) {} catch{} try dividendTracker.setTokenBalance(recipient) {} catch{} try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin); }catch {} } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } contract IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } Map private map; function get(address key) public view returns (uint) { return map.values[key]; } function keyExists(address key) public view returns(bool) { return (getIndexOfKey(key) != -1); } function getIndexOfKey(address key) public view returns (int) { if (!map.inserted[key]) { return - 1; } return int(map.indexOf[key]); } function getKeyAtIndex(uint index) public view returns (address) { return map.keys[index]; } function size() public view returns (uint) { return map.keys.length; } function set(address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } contract DividendTracker is IERC20, Context, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2 ** 128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "CrypTIPTracker"; string private _symbol = "CTIPTRACKER"; uint8 private _decimals = 9; uint public processedEthFromContract = 0; IterableMapping private tokenHoldersMap = new IterableMapping(); address[] keys; uint256 public minimumTokenBalanceForDividends = 1000000 * 10 ** _decimals; CrypTIP private crypTIP; bool public doCalculation = false; event updateBalance(address addr, uint256 amount); event DividendsDistributed(address indexed from,uint256 weiAmount); event DividendWithdrawn(address indexed to,uint256 weiAmount); uint256 public lastProcessedIndex; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait = 3600; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() { emit Transfer(address(0), _msgSender(), 0); } 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 _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address, uint256) public pure returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function transferFrom(address, address, uint256) public pure override returns (bool) { require(false, "No transfers allowed in dividend tracker"); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); 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, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function setTokenBalance(address account) external { uint256 crypTIPBalance = crypTIP.balanceOf(account); if(!crypTIP.isExcludedFromRewards(account)) { if (crypTIPBalance >= minimumTokenBalanceForDividends) { _setBalance(account, crypTIPBalance); tokenHoldersMap.set(account, crypTIPBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } } else { if(balanceOf(account) > 0) { _setBalance(account, 0); tokenHoldersMap.remove(account); } } processAccount(payable(account), true); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe()); } receive() external payable { distributeDividends(); } function setCrypTIPContract(address contractAddr) external onlyOwner { crypTIP = CrypTIP(payable(contractAddr)); } function totalClaimedDividends(address account) external view returns (uint256){ return withdrawnDividends[account]; } function excludeFromDividends(address account) external onlyOwner { require(!crypTIP.isExcludedFromRewards(account), "Account already excluded from dividends"); _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function distributeDividends() public payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}(""); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view returns (uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner { minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals); } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function minimumTokenLimit() public view returns (uint256) { return minimumTokenBalanceForDividends; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.size(); } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = - 1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ? tokenHoldersMap.size().sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.size(); if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.size()) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex); if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccountByDeployer(address payable account, bool automatic) external onlyOwner { processAccount(account, automatic); } function processAccount(address payable account, bool automatic) private returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } //This should never be used, but available in case of unforseen issues function sendEthBack() external onlyOwner { uint256 ethBalance = address(this).balance; payable(owner()).transfer(ethBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doCalculation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processedEthFromContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEthBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setCrypTIPContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokenBalForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalClaimedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280600e81526020017f43727970544950547261636b65720000000000000000000000000000000000008152506008908051906020019062000051929190620002c3565b506040518060400160405280600b81526020017f43544950545241434b4552000000000000000000000000000000000000000000815250600990805190602001906200009f929190620002c3565b506009600a60006101000a81548160ff021916908360ff1602179055506000600b55604051620000cf9062000354565b604051809103906000f080158015620000ec573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a6200014b91906200051b565b620f42406200015b91906200056c565b600e556000600f60146101000a81548160ff021916908315150217905550610e106012553480156200018c57600080fd5b5060006200019f620002bb60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200024d620002bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051620002ad91906200061a565b60405180910390a36200069b565b600033905090565b828054620002d19062000666565b90600052602060002090601f016020900481019282620002f5576000855562000341565b82601f106200031057805160ff191683800117855562000341565b8280016001018555821562000341579182015b828111156200034057825182559160200191906001019062000323565b5b50905062000350919062000362565b5090565b610b0880620049bd83390190565b5b808211156200037d57600081600090555060010162000363565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200040f57808604811115620003e757620003e662000381565b5b6001851615620003f75780820291505b80810290506200040785620003b0565b9450620003c7565b94509492505050565b6000826200042a5760019050620004fd565b816200043a5760009050620004fd565b81600181146200045357600281146200045e5762000494565b6001915050620004fd565b60ff84111562000473576200047262000381565b5b8360020a9150848211156200048d576200048c62000381565b5b50620004fd565b5060208310610133831016604e8410600b8410161715620004ce5782820a905083811115620004c857620004c762000381565b5b620004fd565b620004dd8484846001620003bd565b92509050818404811115620004f757620004f662000381565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005288262000504565b915062000535836200050e565b9250620005647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000418565b905092915050565b6000620005798262000504565b9150620005868362000504565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005c257620005c162000381565b5b828202905092915050565b6000819050919050565b6000819050919050565b600062000602620005fc620005f684620005cd565b620005d7565b62000504565b9050919050565b6200061481620005e1565b82525050565b600060208201905062000631600083018462000609565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067f57607f821691505b60208210810362000695576200069462000637565b5b50919050565b61431280620006ab6000396000f3fe60806040526004361061023f5760003560e01c8063730270b51161012e578063aafd847a116100ab578063e98030c71161006f578063e98030c7146108b9578063f2fde38b146108e2578063f93f6c7a1461090b578063fbcbc0f114610934578063ffb2c479146109785761024e565b8063aafd847a146107d2578063be10b6141461080f578063dd62ed3e1461083a578063e0fb0f3514610877578063e7841ec01461088e5761024e565b806395d89b41116100f257806395d89b41146106c5578063a457c2d7146106f0578063a75514031461072d578063a8b9d24014610758578063a9059cbb146107955761024e565b8063730270b5146105cc57806385a6b3ae1461060957806389774282146106345780638da5cb5b1461065d57806391b89fba146106885761024e565b806331e79db0116101bc57806365e2ccb21161018057806365e2ccb21461050b5780636a474002146105365780636f2789ec1461054d57806370a0823114610578578063715018a6146105b55761024e565b806331e79db01461042857806339509351146104515780633974d3b11461048e5780633f83d72c146104b75780635ebf4db9146104e25761024e565b8063226cfa3d11610203578063226cfa3d1461031b57806323b872dd1461035857806327ce0147146103955780633009a609146103d2578063313ce567146103fd5761024e565b806303c833021461025357806306fdde031461025d578063095ea7b31461028857806309bbedde146102c557806318160ddd146102f05761024e565b3661024e5761024c6109b7565b005b600080fd5b61025b6109b7565b005b34801561026957600080fd5b50610272610a90565b60405161027f91906131bf565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa919061327a565b610b22565b6040516102bc91906132d5565b60405180910390f35b3480156102d157600080fd5b506102da610b40565b6040516102e791906132ff565b60405180910390f35b3480156102fc57600080fd5b50610305610bd8565b60405161031291906132ff565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061331a565b610be2565b60405161034f91906132ff565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613347565b610bfa565b60405161038c91906132d5565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061331a565b610c47565b6040516103c991906132ff565b60405180910390f35b3480156103de57600080fd5b506103e7610cea565b6040516103f491906132ff565b60405180910390f35b34801561040957600080fd5b50610412610cf0565b60405161041f91906133b6565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061331a565b610d07565b005b34801561045d57600080fd5b506104786004803603810190610473919061327a565b610f56565b60405161048591906132d5565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b0919061331a565b611009565b005b3480156104c357600080fd5b506104cc611349565b6040516104d991906132d5565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906133d1565b61135c565b005b34801561051757600080fd5b50610520611421565b60405161052d91906132ff565b60405180910390f35b34801561054257600080fd5b5061054b61142b565b005b34801561055957600080fd5b50610562611437565b60405161056f91906132ff565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a919061331a565b61143d565b6040516105ac91906132ff565b60405180910390f35b3480156105c157600080fd5b506105ca611486565b005b3480156105d857600080fd5b506105f360048036038101906105ee919061331a565b6115d9565b60405161060091906132ff565b60405180910390f35b34801561061557600080fd5b5061061e611622565b60405161062b91906132ff565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190613468565b611628565b005b34801561066957600080fd5b506106726116cc565b60405161067f91906134b7565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061331a565b6116f5565b6040516106bc91906132ff565b60405180910390f35b3480156106d157600080fd5b506106da611707565b6040516106e791906131bf565b60405180910390f35b3480156106fc57600080fd5b506107176004803603810190610712919061327a565b611799565b60405161072491906132d5565b60405180910390f35b34801561073957600080fd5b50610742611866565b60405161074f91906132ff565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a919061331a565b61186c565b60405161078c91906132ff565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b7919061327a565b6118cf565b6040516107c991906132d5565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061331a565b61191b565b60405161080691906132ff565b60405180910390f35b34801561081b57600080fd5b50610824611964565b60405161083191906132ff565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906134d2565b61196a565b60405161086e91906132ff565b60405180910390f35b34801561088357600080fd5b5061088c6119f1565b005b34801561089a57600080fd5b506108a3611adc565b6040516108b091906132ff565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906133d1565b611ae6565b005b3480156108ee57600080fd5b506109096004803603810190610904919061331a565b611c4d565b005b34801561091757600080fd5b50610932600480360381019061092d919061331a565b611e0e565b005b34801561094057600080fd5b5061095b6004803603810190610956919061331a565b611ee7565b60405161096f98979695949392919061352b565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906133d1565b6121f5565b6040516109ae939291906135a9565b60405180910390f35b60006109c1610bd8565b116109cb57600080fd5b6000341115610a8e57610a1e6109df610bd8565b610a03700100000000000000000000000000000000346124f090919063ffffffff16565b610a0d919061363e565b60015461256a90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a6a91906132ff565b60405180910390a2610a873460045461256a90919063ffffffff16565b6004819055505b565b606060088054610a9f9061369e565b80601f0160208091040260200160405190810160405280929190818152602001828054610acb9061369e565b8015610b185780601f10610aed57610100808354040283529160200191610b18565b820191906000526020600020905b815481529060010190602001808311610afb57829003601f168201915b5050505050905090565b6000610b36610b2f6125c8565b84846125d0565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd391906136e4565b905090565b6000600754905090565b60116020528060005260406000206000915090505481565b600080610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390613783565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610cd9610cd4600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc6610cc1610cb08861143d565b6001546124f090919063ffffffff16565b612799565b6127b690919063ffffffff16565b612801565b610ce3919061363e565b9050919050565b60105481565b6000600a60009054906101000a900460ff16905090565b610d0f6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d93906137ef565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273826040518263ffffffff1660e01b8152600401610df791906134b7565b602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190613824565b15610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906138c3565b60405180910390fd5b610e83816000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610ede91906134b7565b600060405180830381600087803b158015610ef857600080fd5b505af1158015610f0c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6000610fff610f636125c8565b84610ffa8560066000610f746125c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b6125d0565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161106691906134b7565b602060405180830381865afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a791906136e4565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161110491906134b7565b602060405180830381865afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190613824565b61128e57600e5481106111f05761115c8282612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016111b99291906138e3565b600060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b50505050611289565b6111fb826000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161125691906134b7565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b505050505b611339565b60006112998361143d565b1115611338576112aa826000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161130591906134b7565b600060405180830381600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050505b5b611344826001612885565b505050565b600f60149054906101000a900460ff1681565b6113646125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e8906137ef565b60405180910390fd5b600a60009054906101000a900460ff16600a61140d9190613a3f565b816114189190613a8a565b600e8190555050565b6000600e54905090565b61143433612947565b50565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148e6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611512906137ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b6116306125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906137ef565b60405180910390fd5b6116c78282612885565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117008261186c565b9050919050565b6060600980546117169061369e565b80601f01602080910402602001604051908101604052809291908181526020018280546117429061369e565b801561178f5780601f106117645761010080835404028352916020019161178f565b820191906000526020600020905b81548152906001019060200180831161177257829003601f168201915b5050505050905090565b600061185c6117a66125c8565b84611857856040518060600160405280602581526020016142b860259139600660006117d06125c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6c9092919063ffffffff16565b6125d0565b6001905092915050565b600b5481565b60006118c8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ba84610c47565b612bd090919063ffffffff16565b9050919050565b600080611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890613783565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119f96125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906137ef565b60405180910390fd5b6000479050611a936116cc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ad8573d6000803e3d6000fd5b5050565b6000601054905090565b611aee6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906137ef565b60405180910390fd5b610e108110158015611b905750620151808111155b611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613b56565b60405180910390fd5b6012548103611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613be8565b60405180910390fd5b601254817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060128190555050565b611c556125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd9906137ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613c7a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e166125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a906137ef565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b8152600401611f5191906134b7565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f929190613cc6565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506000871261214757601054871115611fe557611fde60105488612c1a90919063ffffffff16565b9550612146565b6000601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b91906136e4565b1161208757600061212d565b61212c601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211e91906136e4565b612bd090919063ffffffff16565b5b905061214281896127b690919063ffffffff16565b9650505b5b6121508861186c565b945061215b88610c47565b9350601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600083116121ae5760006121c4565b6121c36012548461256a90919063ffffffff16565b5b91504282116121d45760006121e8565b6121e74283612bd090919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136e4565b9050600081036122a857600080601054935093509350506124e9565b600060105490506000805a90506000805b89841080156122c757508582105b156124d05784806122d790613cf3565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236b91906136e4565b851061237657600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016123d391906132ff565b602060405180830381865afa1580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190613d50565b905061245e601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c65565b156124835761246e816001612885565b1561248257818061247e90613cf3565b9250505b5b828061248e90613cf3565b93505060005a9050808511156124c6576124c36124b48287612bd090919063ffffffff16565b8761256a90919063ffffffff16565b95505b80945050506122b9565b8460108190555081816010549850985098505050505050505b9193909250565b60008083036125025760009050612564565b600082846125109190613a8a565b905082848261251f919061363e565b1461255f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255690613def565b60405180910390fd5b809150505b92915050565b60008082846125799190613e0f565b9050838110156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590613eb1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690613f43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590613fd5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161278c91906132ff565b60405180910390a3505050565b60008082905060008112156127ad57600080fd5b80915050919050565b60008082846127c59190613ff5565b9050600083121580156127d85750838112155b806127ee57506000831280156127ed57508381125b5b6127f757600080fd5b8091505092915050565b60008082121561281057600080fd5b819050919050565b60006128238361143d565b9050808211156128545760006128428284612bd090919063ffffffff16565b905061284e8482612c98565b50612880565b8082101561287f5760006128718383612bd090919063ffffffff16565b905061287d8482612ed2565b505b5b505050565b60008061289184612947565b9050600081111561293b5742601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf0928360405161292991906132ff565b60405180910390a36001915050612941565b60009150505b92915050565b6000806129538361186c565b90506000811115612b61576129b081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612a3991906132ff565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612a6b906140ba565b600060405180830381858888f193505050503d8060008114612aa9576040519150601f19603f3d011682016040523d82523d6000602084013e612aae565b606091505b5050905080612b5757612b0982600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd090919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612b67565b8192505050612b67565b60009150505b919050565b6000838311158290612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab91906131bf565b60405180910390fd5b5060008385612bc391906140cf565b9050809150509392505050565b6000612c1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b6c565b905092915050565b6000808284612c299190614103565b905060008312158015612c3c5750838113155b80612c525750600083128015612c5157508381135b5b612c5b57600080fd5b8091505092915050565b600042821115612c785760009050612c93565b601254612c8e8342612bd090919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe906141e3565b60405180910390fd5b612d1c8160075461256a90919063ffffffff16565b600781905550612d7481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e1591906132ff565b60405180910390a3612e8b612e3d612e38836001546124f090919063ffffffff16565b612799565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890614275565b60405180910390fd5b612fad8160405180606001604052806022815260200161429660229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6c9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300581600754612bd090919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306991906132ff565b60405180910390a36130df61309161308c836001546124f090919063ffffffff16565b612799565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613160578082015181840152602081019050613145565b8381111561316f576000848401525b50505050565b6000601f19601f8301169050919050565b600061319182613126565b61319b8185613131565b93506131ab818560208601613142565b6131b481613175565b840191505092915050565b600060208201905081810360008301526131d98184613186565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613211826131e6565b9050919050565b61322181613206565b811461322c57600080fd5b50565b60008135905061323e81613218565b92915050565b6000819050919050565b61325781613244565b811461326257600080fd5b50565b6000813590506132748161324e565b92915050565b60008060408385031215613291576132906131e1565b5b600061329f8582860161322f565b92505060206132b085828601613265565b9150509250929050565b60008115159050919050565b6132cf816132ba565b82525050565b60006020820190506132ea60008301846132c6565b92915050565b6132f981613244565b82525050565b600060208201905061331460008301846132f0565b92915050565b6000602082840312156133305761332f6131e1565b5b600061333e8482850161322f565b91505092915050565b6000806000606084860312156133605761335f6131e1565b5b600061336e8682870161322f565b935050602061337f8682870161322f565b925050604061339086828701613265565b9150509250925092565b600060ff82169050919050565b6133b08161339a565b82525050565b60006020820190506133cb60008301846133a7565b92915050565b6000602082840312156133e7576133e66131e1565b5b60006133f584828501613265565b91505092915050565b6000613409826131e6565b9050919050565b613419816133fe565b811461342457600080fd5b50565b60008135905061343681613410565b92915050565b613445816132ba565b811461345057600080fd5b50565b6000813590506134628161343c565b92915050565b6000806040838503121561347f5761347e6131e1565b5b600061348d85828601613427565b925050602061349e85828601613453565b9150509250929050565b6134b181613206565b82525050565b60006020820190506134cc60008301846134a8565b92915050565b600080604083850312156134e9576134e86131e1565b5b60006134f78582860161322f565b92505060206135088582860161322f565b9150509250929050565b6000819050919050565b61352581613512565b82525050565b600061010082019050613541600083018b6134a8565b61354e602083018a61351c565b61355b604083018961351c565b61356860608301886132f0565b61357560808301876132f0565b61358260a08301866132f0565b61358f60c08301856132f0565b61359c60e08301846132f0565b9998505050505050505050565b60006060820190506135be60008301866132f0565b6135cb60208301856132f0565b6135d860408301846132f0565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061364982613244565b915061365483613244565b925082613664576136636135e0565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136b657607f821691505b6020821081036136c9576136c861366f565b5b50919050565b6000815190506136de8161324e565b92915050565b6000602082840312156136fa576136f96131e1565b5b6000613708848285016136cf565b91505092915050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b600061376d602883613131565b915061377882613711565b604082019050919050565b6000602082019050818103600083015261379c81613760565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137d9602083613131565b91506137e4826137a3565b602082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b60008151905061381e8161343c565b92915050565b60006020828403121561383a576138396131e1565b5b60006138488482850161380f565b91505092915050565b7f4163636f756e7420616c7265616479206578636c756465642066726f6d20646960008201527f766964656e647300000000000000000000000000000000000000000000000000602082015250565b60006138ad602783613131565b91506138b882613851565b604082019050919050565b600060208201905081810360008301526138dc816138a0565b9050919050565b60006040820190506138f860008301856134a8565b61390560208301846132f0565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156139635780860481111561393f5761393e61360f565b5b600185161561394e5780820291505b808102905061395c8561390c565b9450613923565b94509492505050565b60008261397c5760019050613a38565b8161398a5760009050613a38565b81600181146139a057600281146139aa576139d9565b6001915050613a38565b60ff8411156139bc576139bb61360f565b5b8360020a9150848211156139d3576139d261360f565b5b50613a38565b5060208310610133831016604e8410600b8410161715613a0e5782820a905083811115613a0957613a0861360f565b5b613a38565b613a1b8484846001613919565b92509050818404811115613a3257613a3161360f565b5b81810290505b9392505050565b6000613a4a82613244565b9150613a558361339a565b9250613a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461396c565b905092915050565b6000613a9582613244565b9150613aa083613244565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ad957613ad861360f565b5b828202905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613b40603383613131565b9150613b4b82613ae4565b604082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613bd2602583613131565b9150613bdd82613b76565b604082019050919050565b60006020820190508181036000830152613c0181613bc5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c64602683613131565b9150613c6f82613c08565b604082019050919050565b60006020820190508181036000830152613c9381613c57565b9050919050565b613ca381613512565b8114613cae57600080fd5b50565b600081519050613cc081613c9a565b92915050565b600060208284031215613cdc57613cdb6131e1565b5b6000613cea84828501613cb1565b91505092915050565b6000613cfe82613244565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3057613d2f61360f565b5b600182019050919050565b600081519050613d4a81613218565b92915050565b600060208284031215613d6657613d656131e1565b5b6000613d7484828501613d3b565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dd9602183613131565b9150613de482613d7d565b604082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b6000613e1a82613244565b9150613e2583613244565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e5a57613e5961360f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e9b601b83613131565b9150613ea682613e65565b602082019050919050565b60006020820190508181036000830152613eca81613e8e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f2d602483613131565b9150613f3882613ed1565b604082019050919050565b60006020820190508181036000830152613f5c81613f20565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbf602283613131565b9150613fca82613f63565b604082019050919050565b60006020820190508181036000830152613fee81613fb2565b9050919050565b600061400082613512565b915061400b83613512565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156140465761404561360f565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561407e5761407d61360f565b5b828201905092915050565b600081905092915050565b50565b60006140a4600083614089565b91506140af82614094565b600082019050919050565b60006140c582614097565b9150819050919050565b60006140da82613244565b91506140e583613244565b9250828210156140f8576140f761360f565b5b828203905092915050565b600061410e82613512565b915061411983613512565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156141545761415361360f565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561418c5761418b61360f565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006141cd601f83613131565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061425f602183613131565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e1d069838b3bf4c41f08366c81c727a4fe3ed9397035328cb89a7ffea21b52364736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220150fcee5d03f7231c182a16f1b92d312b661ae592a5e3a0ac5068ef6cad37e8264736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c8063730270b51161012e578063aafd847a116100ab578063e98030c71161006f578063e98030c7146108b9578063f2fde38b146108e2578063f93f6c7a1461090b578063fbcbc0f114610934578063ffb2c479146109785761024e565b8063aafd847a146107d2578063be10b6141461080f578063dd62ed3e1461083a578063e0fb0f3514610877578063e7841ec01461088e5761024e565b806395d89b41116100f257806395d89b41146106c5578063a457c2d7146106f0578063a75514031461072d578063a8b9d24014610758578063a9059cbb146107955761024e565b8063730270b5146105cc57806385a6b3ae1461060957806389774282146106345780638da5cb5b1461065d57806391b89fba146106885761024e565b806331e79db0116101bc57806365e2ccb21161018057806365e2ccb21461050b5780636a474002146105365780636f2789ec1461054d57806370a0823114610578578063715018a6146105b55761024e565b806331e79db01461042857806339509351146104515780633974d3b11461048e5780633f83d72c146104b75780635ebf4db9146104e25761024e565b8063226cfa3d11610203578063226cfa3d1461031b57806323b872dd1461035857806327ce0147146103955780633009a609146103d2578063313ce567146103fd5761024e565b806303c833021461025357806306fdde031461025d578063095ea7b31461028857806309bbedde146102c557806318160ddd146102f05761024e565b3661024e5761024c6109b7565b005b600080fd5b61025b6109b7565b005b34801561026957600080fd5b50610272610a90565b60405161027f91906131bf565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa919061327a565b610b22565b6040516102bc91906132d5565b60405180910390f35b3480156102d157600080fd5b506102da610b40565b6040516102e791906132ff565b60405180910390f35b3480156102fc57600080fd5b50610305610bd8565b60405161031291906132ff565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061331a565b610be2565b60405161034f91906132ff565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613347565b610bfa565b60405161038c91906132d5565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061331a565b610c47565b6040516103c991906132ff565b60405180910390f35b3480156103de57600080fd5b506103e7610cea565b6040516103f491906132ff565b60405180910390f35b34801561040957600080fd5b50610412610cf0565b60405161041f91906133b6565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061331a565b610d07565b005b34801561045d57600080fd5b506104786004803603810190610473919061327a565b610f56565b60405161048591906132d5565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b0919061331a565b611009565b005b3480156104c357600080fd5b506104cc611349565b6040516104d991906132d5565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906133d1565b61135c565b005b34801561051757600080fd5b50610520611421565b60405161052d91906132ff565b60405180910390f35b34801561054257600080fd5b5061054b61142b565b005b34801561055957600080fd5b50610562611437565b60405161056f91906132ff565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a919061331a565b61143d565b6040516105ac91906132ff565b60405180910390f35b3480156105c157600080fd5b506105ca611486565b005b3480156105d857600080fd5b506105f360048036038101906105ee919061331a565b6115d9565b60405161060091906132ff565b60405180910390f35b34801561061557600080fd5b5061061e611622565b60405161062b91906132ff565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190613468565b611628565b005b34801561066957600080fd5b506106726116cc565b60405161067f91906134b7565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061331a565b6116f5565b6040516106bc91906132ff565b60405180910390f35b3480156106d157600080fd5b506106da611707565b6040516106e791906131bf565b60405180910390f35b3480156106fc57600080fd5b506107176004803603810190610712919061327a565b611799565b60405161072491906132d5565b60405180910390f35b34801561073957600080fd5b50610742611866565b60405161074f91906132ff565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a919061331a565b61186c565b60405161078c91906132ff565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b7919061327a565b6118cf565b6040516107c991906132d5565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061331a565b61191b565b60405161080691906132ff565b60405180910390f35b34801561081b57600080fd5b50610824611964565b60405161083191906132ff565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c91906134d2565b61196a565b60405161086e91906132ff565b60405180910390f35b34801561088357600080fd5b5061088c6119f1565b005b34801561089a57600080fd5b506108a3611adc565b6040516108b091906132ff565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906133d1565b611ae6565b005b3480156108ee57600080fd5b506109096004803603810190610904919061331a565b611c4d565b005b34801561091757600080fd5b50610932600480360381019061092d919061331a565b611e0e565b005b34801561094057600080fd5b5061095b6004803603810190610956919061331a565b611ee7565b60405161096f98979695949392919061352b565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a91906133d1565b6121f5565b6040516109ae939291906135a9565b60405180910390f35b60006109c1610bd8565b116109cb57600080fd5b6000341115610a8e57610a1e6109df610bd8565b610a03700100000000000000000000000000000000346124f090919063ffffffff16565b610a0d919061363e565b60015461256a90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a6a91906132ff565b60405180910390a2610a873460045461256a90919063ffffffff16565b6004819055505b565b606060088054610a9f9061369e565b80601f0160208091040260200160405190810160405280929190818152602001828054610acb9061369e565b8015610b185780601f10610aed57610100808354040283529160200191610b18565b820191906000526020600020905b815481529060010190602001808311610afb57829003601f168201915b5050505050905090565b6000610b36610b2f6125c8565b84846125d0565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd391906136e4565b905090565b6000600754905090565b60116020528060005260406000206000915090505481565b600080610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3390613783565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610cd9610cd4600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cc6610cc1610cb08861143d565b6001546124f090919063ffffffff16565b612799565b6127b690919063ffffffff16565b612801565b610ce3919061363e565b9050919050565b60105481565b6000600a60009054906101000a900460ff16905090565b610d0f6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d93906137ef565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273826040518263ffffffff1660e01b8152600401610df791906134b7565b602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190613824565b15610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906138c3565b60405180910390fd5b610e83816000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610ede91906134b7565b600060405180830381600087803b158015610ef857600080fd5b505af1158015610f0c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b6000610fff610f636125c8565b84610ffa8560066000610f746125c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b6125d0565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161106691906134b7565b602060405180830381865afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a791906136e4565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b815260040161110491906134b7565b602060405180830381865afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190613824565b61128e57600e5481106111f05761115c8282612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016111b99291906138e3565b600060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b50505050611289565b6111fb826000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161125691906134b7565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b505050505b611339565b60006112998361143d565b1115611338576112aa826000612818565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161130591906134b7565b600060405180830381600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050505b5b611344826001612885565b505050565b600f60149054906101000a900460ff1681565b6113646125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e8906137ef565b60405180910390fd5b600a60009054906101000a900460ff16600a61140d9190613a3f565b816114189190613a8a565b600e8190555050565b6000600e54905090565b61143433612947565b50565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148e6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611512906137ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b6116306125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906137ef565b60405180910390fd5b6116c78282612885565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117008261186c565b9050919050565b6060600980546117169061369e565b80601f01602080910402602001604051908101604052809291908181526020018280546117429061369e565b801561178f5780601f106117645761010080835404028352916020019161178f565b820191906000526020600020905b81548152906001019060200180831161177257829003601f168201915b5050505050905090565b600061185c6117a66125c8565b84611857856040518060600160405280602581526020016142b860259139600660006117d06125c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6c9092919063ffffffff16565b6125d0565b6001905092915050565b600b5481565b60006118c8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ba84610c47565b612bd090919063ffffffff16565b9050919050565b600080611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890613783565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119f96125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906137ef565b60405180910390fd5b6000479050611a936116cc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ad8573d6000803e3d6000fd5b5050565b6000601054905090565b611aee6125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906137ef565b60405180910390fd5b610e108110158015611b905750620151808111155b611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613b56565b60405180910390fd5b6012548103611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a90613be8565b60405180910390fd5b601254817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060128190555050565b611c556125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd9906137ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613c7a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e166125c8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a906137ef565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b8152600401611f5191906134b7565b602060405180830381865afa158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f929190613cc6565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506000871261214757601054871115611fe557611fde60105488612c1a90919063ffffffff16565b9550612146565b6000601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b91906136e4565b1161208757600061212d565b61212c601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211e91906136e4565b612bd090919063ffffffff16565b5b905061214281896127b690919063ffffffff16565b9650505b5b6121508861186c565b945061215b88610c47565b9350601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600083116121ae5760006121c4565b6121c36012548461256a90919063ffffffff16565b5b91504282116121d45760006121e8565b6121e74283612bd090919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c91906136e4565b9050600081036122a857600080601054935093509350506124e9565b600060105490506000805a90506000805b89841080156122c757508582105b156124d05784806122d790613cf3565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236b91906136e4565b851061237657600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016123d391906132ff565b602060405180830381865afa1580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190613d50565b905061245e601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c65565b156124835761246e816001612885565b1561248257818061247e90613cf3565b9250505b5b828061248e90613cf3565b93505060005a9050808511156124c6576124c36124b48287612bd090919063ffffffff16565b8761256a90919063ffffffff16565b95505b80945050506122b9565b8460108190555081816010549850985098505050505050505b9193909250565b60008083036125025760009050612564565b600082846125109190613a8a565b905082848261251f919061363e565b1461255f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255690613def565b60405180910390fd5b809150505b92915050565b60008082846125799190613e0f565b9050838110156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590613eb1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263690613f43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590613fd5565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161278c91906132ff565b60405180910390a3505050565b60008082905060008112156127ad57600080fd5b80915050919050565b60008082846127c59190613ff5565b9050600083121580156127d85750838112155b806127ee57506000831280156127ed57508381125b5b6127f757600080fd5b8091505092915050565b60008082121561281057600080fd5b819050919050565b60006128238361143d565b9050808211156128545760006128428284612bd090919063ffffffff16565b905061284e8482612c98565b50612880565b8082101561287f5760006128718383612bd090919063ffffffff16565b905061287d8482612ed2565b505b5b505050565b60008061289184612947565b9050600081111561293b5742601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf0928360405161292991906132ff565b60405180910390a36001915050612941565b60009150505b92915050565b6000806129538361186c565b90506000811115612b61576129b081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612a3991906132ff565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612a6b906140ba565b600060405180830381858888f193505050503d8060008114612aa9576040519150601f19603f3d011682016040523d82523d6000602084013e612aae565b606091505b5050905080612b5757612b0982600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd090919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612b67565b8192505050612b67565b60009150505b919050565b6000838311158290612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab91906131bf565b60405180910390fd5b5060008385612bc391906140cf565b9050809150509392505050565b6000612c1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b6c565b905092915050565b6000808284612c299190614103565b905060008312158015612c3c5750838113155b80612c525750600083128015612c5157508381135b5b612c5b57600080fd5b8091505092915050565b600042821115612c785760009050612c93565b601254612c8e8342612bd090919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe906141e3565b60405180910390fd5b612d1c8160075461256a90919063ffffffff16565b600781905550612d7481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256a90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e1591906132ff565b60405180910390a3612e8b612e3d612e38836001546124f090919063ffffffff16565b612799565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890614275565b60405180910390fd5b612fad8160405180606001604052806022815260200161429660229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b6c9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300581600754612bd090919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306991906132ff565b60405180910390a36130df61309161308c836001546124f090919063ffffffff16565b612799565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613160578082015181840152602081019050613145565b8381111561316f576000848401525b50505050565b6000601f19601f8301169050919050565b600061319182613126565b61319b8185613131565b93506131ab818560208601613142565b6131b481613175565b840191505092915050565b600060208201905081810360008301526131d98184613186565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613211826131e6565b9050919050565b61322181613206565b811461322c57600080fd5b50565b60008135905061323e81613218565b92915050565b6000819050919050565b61325781613244565b811461326257600080fd5b50565b6000813590506132748161324e565b92915050565b60008060408385031215613291576132906131e1565b5b600061329f8582860161322f565b92505060206132b085828601613265565b9150509250929050565b60008115159050919050565b6132cf816132ba565b82525050565b60006020820190506132ea60008301846132c6565b92915050565b6132f981613244565b82525050565b600060208201905061331460008301846132f0565b92915050565b6000602082840312156133305761332f6131e1565b5b600061333e8482850161322f565b91505092915050565b6000806000606084860312156133605761335f6131e1565b5b600061336e8682870161322f565b935050602061337f8682870161322f565b925050604061339086828701613265565b9150509250925092565b600060ff82169050919050565b6133b08161339a565b82525050565b60006020820190506133cb60008301846133a7565b92915050565b6000602082840312156133e7576133e66131e1565b5b60006133f584828501613265565b91505092915050565b6000613409826131e6565b9050919050565b613419816133fe565b811461342457600080fd5b50565b60008135905061343681613410565b92915050565b613445816132ba565b811461345057600080fd5b50565b6000813590506134628161343c565b92915050565b6000806040838503121561347f5761347e6131e1565b5b600061348d85828601613427565b925050602061349e85828601613453565b9150509250929050565b6134b181613206565b82525050565b60006020820190506134cc60008301846134a8565b92915050565b600080604083850312156134e9576134e86131e1565b5b60006134f78582860161322f565b92505060206135088582860161322f565b9150509250929050565b6000819050919050565b61352581613512565b82525050565b600061010082019050613541600083018b6134a8565b61354e602083018a61351c565b61355b604083018961351c565b61356860608301886132f0565b61357560808301876132f0565b61358260a08301866132f0565b61358f60c08301856132f0565b61359c60e08301846132f0565b9998505050505050505050565b60006060820190506135be60008301866132f0565b6135cb60208301856132f0565b6135d860408301846132f0565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061364982613244565b915061365483613244565b925082613664576136636135e0565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136b657607f821691505b6020821081036136c9576136c861366f565b5b50919050565b6000815190506136de8161324e565b92915050565b6000602082840312156136fa576136f96131e1565b5b6000613708848285016136cf565b91505092915050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b600061376d602883613131565b915061377882613711565b604082019050919050565b6000602082019050818103600083015261379c81613760565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137d9602083613131565b91506137e4826137a3565b602082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b60008151905061381e8161343c565b92915050565b60006020828403121561383a576138396131e1565b5b60006138488482850161380f565b91505092915050565b7f4163636f756e7420616c7265616479206578636c756465642066726f6d20646960008201527f766964656e647300000000000000000000000000000000000000000000000000602082015250565b60006138ad602783613131565b91506138b882613851565b604082019050919050565b600060208201905081810360008301526138dc816138a0565b9050919050565b60006040820190506138f860008301856134a8565b61390560208301846132f0565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156139635780860481111561393f5761393e61360f565b5b600185161561394e5780820291505b808102905061395c8561390c565b9450613923565b94509492505050565b60008261397c5760019050613a38565b8161398a5760009050613a38565b81600181146139a057600281146139aa576139d9565b6001915050613a38565b60ff8411156139bc576139bb61360f565b5b8360020a9150848211156139d3576139d261360f565b5b50613a38565b5060208310610133831016604e8410600b8410161715613a0e5782820a905083811115613a0957613a0861360f565b5b613a38565b613a1b8484846001613919565b92509050818404811115613a3257613a3161360f565b5b81810290505b9392505050565b6000613a4a82613244565b9150613a558361339a565b9250613a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461396c565b905092915050565b6000613a9582613244565b9150613aa083613244565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ad957613ad861360f565b5b828202905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613b40603383613131565b9150613b4b82613ae4565b604082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613bd2602583613131565b9150613bdd82613b76565b604082019050919050565b60006020820190508181036000830152613c0181613bc5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c64602683613131565b9150613c6f82613c08565b604082019050919050565b60006020820190508181036000830152613c9381613c57565b9050919050565b613ca381613512565b8114613cae57600080fd5b50565b600081519050613cc081613c9a565b92915050565b600060208284031215613cdc57613cdb6131e1565b5b6000613cea84828501613cb1565b91505092915050565b6000613cfe82613244565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3057613d2f61360f565b5b600182019050919050565b600081519050613d4a81613218565b92915050565b600060208284031215613d6657613d656131e1565b5b6000613d7484828501613d3b565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dd9602183613131565b9150613de482613d7d565b604082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b6000613e1a82613244565b9150613e2583613244565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e5a57613e5961360f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e9b601b83613131565b9150613ea682613e65565b602082019050919050565b60006020820190508181036000830152613eca81613e8e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f2d602483613131565b9150613f3882613ed1565b604082019050919050565b60006020820190508181036000830152613f5c81613f20565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbf602283613131565b9150613fca82613f63565b604082019050919050565b60006020820190508181036000830152613fee81613fb2565b9050919050565b600061400082613512565b915061400b83613512565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156140465761404561360f565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561407e5761407d61360f565b5b828201905092915050565b600081905092915050565b50565b60006140a4600083614089565b91506140af82614094565b600082019050919050565b60006140c582614097565b9150819050919050565b60006140da82613244565b91506140e583613244565b9250828210156140f8576140f761360f565b5b828203905092915050565b600061410e82613512565b915061411983613512565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156141545761415361360f565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561418c5761418b61360f565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006141cd601f83613131565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061425f602183613131565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e1d069838b3bf4c41f08366c81c727a4fe3ed9397035328cb89a7ffea21b52364736f6c634300080d0033
Deployed Bytecode Sourcemap
40072:13031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45578:21;:19;:21::i;:::-;40072:13031;;;;;46196:428;;;:::i;:::-;;41739:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42770:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48967:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42016:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41336:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42427:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47885:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41296:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41925:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45891:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42947:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43795:733;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41057:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48140:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48843:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46632:106;;;;;;;;;;;;;:::i;:::-;;41392:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42122:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;45751:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40472:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52356:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47446:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41830:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43173:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40807:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47576:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42257:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47750:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40945:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42619:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52947:151;;;;;;;;;;;;;:::i;:::-;;48726:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48346:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45615:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49090:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;51065:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;46196:428;46277:1;46261:13;:11;:13::i;:::-;:17;46253:26;;;;;;46308:1;46296:9;:13;46292:325;;;46354:105;46431:13;:11;:13::i;:::-;46402:26;40275:8;46403:9;46402:15;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;46354:25;;:29;;:105;;;;:::i;:::-;46326:25;:133;;;;46500:10;46479:43;;;46512:9;46479:43;;;;;;:::i;:::-;;;;;;;;46565:40;46595:9;46565:25;;:29;;:40;;;;:::i;:::-;46537:25;:68;;;;46292:325;46196:428::o;41739:83::-;41776:13;41809:5;41802:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41739:83;:::o;42770:169::-;42853:4;42870:39;42879:12;:10;:12::i;:::-;42893:7;42902:6;42870:8;:39::i;:::-;42927:4;42920:11;;42770:169;;;;:::o;48967:115::-;49025:7;49052:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49045:29;;48967:115;:::o;42016:100::-;42069:7;42096:12;;42089:19;;42016:100;:::o;41336:49::-;;;;;;;;;;;;;;;;;:::o;42427:184::-;42506:4;42531:5;42523:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42599:4;42592:11;;42427:184;;;;;:::o;47885:247::-;47954:7;40275:8;47981:131;:115;48059:28;:36;48088:6;48059:36;;;;;;;;;;;;;;;;47981:63;:48;48011:17;48021:6;48011:9;:17::i;:::-;47981:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;47974:150;;47885:247;;;:::o;41296:33::-;;;;:::o;41925:83::-;41966:5;41991:9;;;;;;;;;;;41984:16;;41925:83;:::o;45891:297::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45977:7:::1;;;;;;;;;;;:29;;;46007:7;45977:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45976:39;45968:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;46070:23;46082:7;46091:1;46070:11;:23::i;:::-;46104:15;;;;;;;;;;;:22;;;46127:7;46104:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46172:7;46151:29;;;;;;;;;;;;45891:297:::0;:::o;42947:218::-;43035:4;43052:83;43061:12;:10;:12::i;:::-;43075:7;43084:50;43123:10;43084:11;:25;43096:12;:10;:12::i;:::-;43084:25;;;;;;;;;;;;;;;:34;43110:7;43084:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;43052:8;:83::i;:::-;43153:4;43146:11;;42947:218;;;;:::o;43795:733::-;43857:22;43882:7;;;;;;;;;;;:17;;;43900:7;43882:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43857:51;;43923:7;;;;;;;;;;;:29;;;43953:7;43923:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43919:553;;44000:31;;43982:14;:49;43978:316;;44052:36;44064:7;44073:14;44052:11;:36::i;:::-;44107:15;;;;;;;;;;;:19;;;44127:7;44136:14;44107:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43978:316;;;44205:23;44217:7;44226:1;44205:11;:23::i;:::-;44247:15;;;;;;;;;;;:22;;;44270:7;44247:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43978:316;43919:553;;;44350:1;44329:18;44339:7;44329:9;:18::i;:::-;:22;44326:135;;;44372:23;44384:7;44393:1;44372:11;:23::i;:::-;44414:15;;;;;;;;;;;:22;;;44437:7;44414:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44326:135;43919:553;44482:38;44505:7;44515:4;44482:14;:38::i;:::-;;43846:682;43795:733;:::o;41057:33::-;;;;;;;;;;;;;:::o;48140:198::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48320:9:::1;;;;;;;;;;;48314:2;:15;;;;:::i;:::-;48284:26;:46;;;;:::i;:::-;48250:31;:80;;;;48140:198:::0;:::o;48843:116::-;48893:7;48920:31;;48913:38;;48843:116;:::o;46632:106::-;46686:44;46718:10;46686:23;:44::i;:::-;;46632:106::o;41392:31::-;;;;:::o;42122:127::-;42196:7;42223:9;:18;42233:7;42223:18;;;;;;;;;;;;;;;;42216:25;;42122:127;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;45751:132::-;45822:7;45848:18;:27;45867:7;45848:27;;;;;;;;;;;;;;;;45841:34;;45751:132;;;:::o;40472:40::-;;;;:::o;52356:147::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52461:34:::1;52476:7;52485:9;52461:14;:34::i;:::-;;52356:147:::0;;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;47446:122::-;47503:7;47530:30;47553:6;47530:22;:30::i;:::-;47523:37;;47446:122;;;:::o;41830:87::-;41869:13;41902:7;41895:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41830:87;:::o;43173:269::-;43266:4;43283:129;43292:12;:10;:12::i;:::-;43306:7;43315:96;43354:15;43315:96;;;;;;;;;;;;;;;;;:11;:25;43327:12;:10;:12::i;:::-;43315:25;;;;;;;;;;;;;;;:34;43341:7;43315:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;43283:8;:129::i;:::-;43430:4;43423:11;;43173:269;;;;:::o;40807:40::-;;;;:::o;47576:166::-;47645:7;47672:62;47707:18;:26;47726:6;47707:26;;;;;;;;;;;;;;;;47672:30;47695:6;47672:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;47665:69;;47576:166;;;:::o;42257:162::-;42314:4;42339:5;42331:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42407:4;42400:11;;42257:162;;;;:::o;47750:127::-;47816:7;47843:18;:26;47862:6;47843:26;;;;;;;;;;;;;;;;47836:33;;47750:127;;;:::o;40945:75::-;;;;:::o;42619:143::-;42700:7;42727:11;:18;42739:5;42727:18;;;;;;;;;;;;;;;:27;42746:7;42727:27;;;;;;;;;;;;;;;;42720:34;;42619:143;;;;:::o;52947:151::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53000:18:::1;53021:21;53000:42;;53061:7;:5;:7::i;:::-;53053:25;;:37;53079:10;53053:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52989:109;52947:151::o:0;48726:109::-;48782:7;48809:18;;48802:25;;48726:109;:::o;48346:372::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48447:4:::1;48431:12;:20;;:45;;;;;48471:5;48455:12;:21;;48431:45;48423:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;48567:9;;48551:12;:25:::0;48543:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48665:9;;48651:12;48634:41;;;;;;;;;;48698:12;48686:9;:24;;;;48346:372:::0;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;45615:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45721:12:::1;45695:7;;:40;;;;;;;;;;;;;;;;;;45615:128:::0;:::o;49090:1270::-;49149:15;49166:12;49180:31;49222:29;49253:22;49277:21;49309;49332:38;49393:8;49383:18;;49420:15;;;;;;;;;;;:29;;;49450:7;49420:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49412:46;;49496:3;49469:30;;49523:1;49514:5;:10;49510:473;;49562:18;;49553:5;49545:35;49541:431;;;49628:37;49645:18;;49628:5;:9;;:37;;;;:::i;:::-;49601:64;;49541:431;;;49719:32;49779:18;;49754:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;49866:1;49754:113;;;49817:46;49844:18;;49817:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;49754:113;49719:148;;49913:43;49930:24;49913:5;:9;;:43;;;;:::i;:::-;49886:70;;49700:272;49541:431;49510:473;50017:31;50040:7;50017:22;:31::i;:::-;49993:55;;50076:31;50099:7;50076:22;:31::i;:::-;50059:48;;50134:14;:23;50149:7;50134:23;;;;;;;;;;;;;;;;50118:39;;50200:1;50184:13;:17;:52;;50235:1;50184:52;;;50204:28;50222:9;;50204:13;:17;;:28;;;;:::i;:::-;50184:52;50168:68;;50296:15;50280:13;:31;:72;;50351:1;50280:72;;;50314:34;50332:15;50314:13;:17;;:34;;;;:::i;:::-;50280:72;50247:105;;49090:1270;;;;;;;;;:::o;51065:1283::-;51111:7;51120;51129;51149:28;51180:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51149:53;;51243:1;51219:20;:25;51215:91;;51269:1;51272;51275:18;;51261:33;;;;;;;;;51215:91;51316:27;51346:18;;51316:48;;51375:15;51405;51423:9;51405:27;;51443:18;51476:14;51505:727;51522:3;51512:7;:13;:50;;;;;51542:20;51529:10;:33;51512:50;51505:727;;;51579:21;;;;;:::i;:::-;;;;51642:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51619:19;:45;51615:109;;51707:1;51685:23;;51615:109;51738:15;51756;;;;;;;;;;;:29;;;51786:19;51756:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51738:68;;51825:37;51838:14;:23;51853:7;51838:23;;;;;;;;;;;;;;;;51825:12;:37::i;:::-;51821:172;;;51887:38;51910:7;51920:4;51887:14;:38::i;:::-;51883:95;;;51950:8;;;;;:::i;:::-;;;;51883:95;51821:172;52007:12;;;;;:::i;:::-;;;;52034:18;52055:9;52034:30;;52093:10;52083:7;:20;52079:107;;;52134:36;52146:23;52158:10;52146:7;:11;;:23;;;;:::i;:::-;52134:7;:11;;:36;;;;:::i;:::-;52124:46;;52079:107;52210:10;52200:20;;51564:668;;51505:727;;;52263:19;52242:18;:40;;;;52301:10;52313:6;52321:18;;52293:47;;;;;;;;;;;;51065:1283;;;;;;:::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;43450:337::-;43560:1;43543:19;;:5;:19;;;43535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43641:1;43622:21;;:7;:21;;;43614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43725:6;43695:11;:18;43707:5;43695:18;;;;;;;;;;;;;;;:27;43714:7;43695:27;;;;;;;;;;;;;;;:36;;;;43763:7;43747:32;;43756:5;43747:32;;;43772:6;43747:32;;;;;;:::i;:::-;;;;;;;;43450:337;;;:::o;4032:148::-;4088:6;4107:8;4125:1;4107:20;;4151:1;4146;:6;;4138:15;;;;;;4171:1;4164:8;;;4032:148;;;:::o;3548:176::-;3604:6;3623:8;3638:1;3634;:5;;;;:::i;:::-;3623:16;;3664:1;3659;:6;;:16;;;;;3674:1;3669;:6;;3659:16;3658:38;;;;3685:1;3681;:5;:14;;;;;3694:1;3690;:5;3681:14;3658:38;3650:47;;;;;;3715:1;3708:8;;;3548:176;;;;:::o;3870:127::-;3926:7;3959:1;3954;:6;;3946:15;;;;;;3987:1;3972:17;;3870:127;;;:::o;50608:449::-;50686:22;50711:18;50721:7;50711:9;:18::i;:::-;50686:43;;50757:14;50744:10;:27;50740:310;;;50788:18;50809:30;50824:14;50809:10;:14;;:30;;;;:::i;:::-;50788:51;;50854:26;50860:7;50869:10;50854:5;:26::i;:::-;50773:119;50740:310;;;50915:14;50902:10;:27;50898:152;;;50946:18;50967:30;50986:10;50967:14;:18;;:30;;;;:::i;:::-;50946:51;;51012:26;51018:7;51027:10;51012:5;:26::i;:::-;50931:119;50898:152;50740:310;50675:382;50608:449;;:::o;52511:352::-;52593:4;52610:14;52627:32;52651:7;52627:23;:32::i;:::-;52610:49;;52683:1;52674:6;:10;52670:163;;;52727:15;52701:14;:23;52716:7;52701:23;;;;;;;;;;;;;;;:41;;;;52785:9;52762:33;;52768:7;52762:33;;;52777:6;52762:33;;;;;;:::i;:::-;;;;;;;;52817:4;52810:11;;;;;52670:163;52850:5;52843:12;;;52511:352;;;;;:::o;46746:692::-;46819:7;46839:29;46871:28;46894:4;46871:22;:28::i;:::-;46839:60;;46938:1;46914:21;:25;46910:502;;;46983:51;47012:21;46983:18;:24;47002:4;46983:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;46956:18;:24;46975:4;46956:24;;;;;;;;;;;;;;;:78;;;;47072:4;47054:46;;;47078:21;47054:46;;;;;;:::i;:::-;;;;;;;;47116:12;47133:4;:9;;47151:21;47180:4;47133:56;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47115:74;;;47209:7;47204:154;;47264:51;47293:21;47264:18;:24;47283:4;47264:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;47237:18;:24;47256:4;47237:24;;;;;;;;;;;;;;;:78;;;;47341:1;47334:8;;;;;;47204:154;47379:21;47372:28;;;;;;46910:502;47429:1;47422:8;;;46746:692;;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;3364:176::-;3420:6;3439:8;3454:1;3450;:5;;;;:::i;:::-;3439:16;;3480:1;3475;:6;;:16;;;;;3490:1;3485;:6;;3475:16;3474:38;;;;3501:1;3497;:5;:14;;;;;3510:1;3506;:5;3497:14;3474:38;3466:47;;;;;;3531:1;3524:8;;;3364:176;;;;:::o;50368:232::-;50435:4;50472:15;50456:13;:31;50452:76;;;50511:5;50504:12;;;;50452:76;50583:9;;50545:34;50565:13;50545:15;:19;;:34;;;;:::i;:::-;:47;;50538:54;;50368:232;;;;:::o;44536:472::-;44639:1;44620:21;;:7;:21;;;44612:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44703:24;44720:6;44703:12;;:16;;:24;;;;:::i;:::-;44688:12;:39;;;;44759:30;44782:6;44759:9;:18;44769:7;44759:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;44738:9;:18;44748:7;44738:18;;;;;;;;;;;;;;;:51;;;;44826:7;44805:37;;44822:1;44805:37;;;44835:6;44805:37;;;;;;:::i;:::-;;;;;;;;44893:107;44945:54;44946:37;44976:6;44946:25;;:29;;:37;;;;:::i;:::-;44945:52;:54::i;:::-;44893:28;:37;44922:7;44893:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;44853:28;:37;44882:7;44853:37;;;;;;;;;;;;;;;:147;;;;44536:472;;:::o;45016:516::-;45119:1;45100:21;;:7;:21;;;45092:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45193:68;45216:6;45193:68;;;;;;;;;;;;;;;;;:9;:18;45203:7;45193:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;45172:9;:18;45182:7;45172:18;;;;;;;;;;;;;;;:89;;;;45287:24;45304:6;45287:12;;:16;;:24;;;;:::i;:::-;45272:12;:39;;;;45353:1;45327:37;;45336:7;45327:37;;;45357:6;45327:37;;;;;;:::i;:::-;;;;;;;;45417:107;45469:54;45470:37;45500:6;45470:25;;:29;;:37;;;;:::i;:::-;45469:52;:54::i;:::-;45417:28;:37;45446:7;45417:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;45377:28;:37;45406:7;45377:37;;;;;;;;;;;;;;;:147;;;;45016:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:329::-;5295:6;5344:2;5332:9;5323:7;5319:23;5315:32;5312:119;;;5350:79;;:::i;:::-;5312:119;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5236:329;;;;:::o;5571:104::-;5616:7;5645:24;5663:5;5645:24;:::i;:::-;5634:35;;5571:104;;;:::o;5681:138::-;5762:32;5788:5;5762:32;:::i;:::-;5755:5;5752:43;5742:71;;5809:1;5806;5799:12;5742:71;5681:138;:::o;5825:155::-;5879:5;5917:6;5904:20;5895:29;;5933:41;5968:5;5933:41;:::i;:::-;5825:155;;;;:::o;5986:116::-;6056:21;6071:5;6056:21;:::i;:::-;6049:5;6046:32;6036:60;;6092:1;6089;6082:12;6036:60;5986:116;:::o;6108:133::-;6151:5;6189:6;6176:20;6167:29;;6205:30;6229:5;6205:30;:::i;:::-;6108:133;;;;:::o;6247:484::-;6320:6;6328;6377:2;6365:9;6356:7;6352:23;6348:32;6345:119;;;6383:79;;:::i;:::-;6345:119;6503:1;6528:61;6581:7;6572:6;6561:9;6557:22;6528:61;:::i;:::-;6518:71;;6474:125;6638:2;6664:50;6706:7;6697:6;6686:9;6682:22;6664:50;:::i;:::-;6654:60;;6609:115;6247:484;;;;;:::o;6737:118::-;6824:24;6842:5;6824:24;:::i;:::-;6819:3;6812:37;6737:118;;:::o;6861:222::-;6954:4;6992:2;6981:9;6977:18;6969:26;;7005:71;7073:1;7062:9;7058:17;7049:6;7005:71;:::i;:::-;6861:222;;;;:::o;7089:474::-;7157:6;7165;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:53;7410:7;7401:6;7390:9;7386:22;7365:53;:::i;:::-;7355:63;;7311:117;7467:2;7493:53;7538:7;7529:6;7518:9;7514:22;7493:53;:::i;:::-;7483:63;;7438:118;7089:474;;;;;:::o;7569:76::-;7605:7;7634:5;7623:16;;7569:76;;;:::o;7651:115::-;7736:23;7753:5;7736:23;:::i;:::-;7731:3;7724:36;7651:115;;:::o;7772:989::-;8057:4;8095:3;8084:9;8080:19;8072:27;;8109:71;8177:1;8166:9;8162:17;8153:6;8109:71;:::i;:::-;8190:70;8256:2;8245:9;8241:18;8232:6;8190:70;:::i;:::-;8270;8336:2;8325:9;8321:18;8312:6;8270:70;:::i;:::-;8350:72;8418:2;8407:9;8403:18;8394:6;8350:72;:::i;:::-;8432:73;8500:3;8489:9;8485:19;8476:6;8432:73;:::i;:::-;8515;8583:3;8572:9;8568:19;8559:6;8515:73;:::i;:::-;8598;8666:3;8655:9;8651:19;8642:6;8598:73;:::i;:::-;8681;8749:3;8738:9;8734:19;8725:6;8681:73;:::i;:::-;7772:989;;;;;;;;;;;:::o;8767:442::-;8916:4;8954:2;8943:9;8939:18;8931:26;;8967:71;9035:1;9024:9;9020:17;9011:6;8967:71;:::i;:::-;9048:72;9116:2;9105:9;9101:18;9092:6;9048:72;:::i;:::-;9130;9198:2;9187:9;9183:18;9174:6;9130:72;:::i;:::-;8767:442;;;;;;:::o;9215:180::-;9263:77;9260:1;9253:88;9360:4;9357:1;9350:15;9384:4;9381:1;9374:15;9401:180;9449:77;9446:1;9439:88;9546:4;9543:1;9536:15;9570:4;9567:1;9560:15;9587:185;9627:1;9644:20;9662:1;9644:20;:::i;:::-;9639:25;;9678:20;9696:1;9678:20;:::i;:::-;9673:25;;9717:1;9707:35;;9722:18;;:::i;:::-;9707:35;9764:1;9761;9757:9;9752:14;;9587:185;;;;:::o;9778:180::-;9826:77;9823:1;9816:88;9923:4;9920:1;9913:15;9947:4;9944:1;9937:15;9964:320;10008:6;10045:1;10039:4;10035:12;10025:22;;10092:1;10086:4;10082:12;10113:18;10103:81;;10169:4;10161:6;10157:17;10147:27;;10103:81;10231:2;10223:6;10220:14;10200:18;10197:38;10194:84;;10250:18;;:::i;:::-;10194:84;10015:269;9964:320;;;:::o;10290:143::-;10347:5;10378:6;10372:13;10363:22;;10394:33;10421:5;10394:33;:::i;:::-;10290:143;;;;:::o;10439:351::-;10509:6;10558:2;10546:9;10537:7;10533:23;10529:32;10526:119;;;10564:79;;:::i;:::-;10526:119;10684:1;10709:64;10765:7;10756:6;10745:9;10741:22;10709:64;:::i;:::-;10699:74;;10655:128;10439:351;;;;:::o;10796:227::-;10936:34;10932:1;10924:6;10920:14;10913:58;11005:10;11000:2;10992:6;10988:15;10981:35;10796:227;:::o;11029:366::-;11171:3;11192:67;11256:2;11251:3;11192:67;:::i;:::-;11185:74;;11268:93;11357:3;11268:93;:::i;:::-;11386:2;11381:3;11377:12;11370:19;;11029:366;;;:::o;11401:419::-;11567:4;11605:2;11594:9;11590:18;11582:26;;11654:9;11648:4;11644:20;11640:1;11629:9;11625:17;11618:47;11682:131;11808:4;11682:131;:::i;:::-;11674:139;;11401:419;;;:::o;11826:182::-;11966:34;11962:1;11954:6;11950:14;11943:58;11826:182;:::o;12014:366::-;12156:3;12177:67;12241:2;12236:3;12177:67;:::i;:::-;12170:74;;12253:93;12342:3;12253:93;:::i;:::-;12371:2;12366:3;12362:12;12355:19;;12014:366;;;:::o;12386:419::-;12552:4;12590:2;12579:9;12575:18;12567:26;;12639:9;12633:4;12629:20;12625:1;12614:9;12610:17;12603:47;12667:131;12793:4;12667:131;:::i;:::-;12659:139;;12386:419;;;:::o;12811:137::-;12865:5;12896:6;12890:13;12881:22;;12912:30;12936:5;12912:30;:::i;:::-;12811:137;;;;:::o;12954:345::-;13021:6;13070:2;13058:9;13049:7;13045:23;13041:32;13038:119;;;13076:79;;:::i;:::-;13038:119;13196:1;13221:61;13274:7;13265:6;13254:9;13250:22;13221:61;:::i;:::-;13211:71;;13167:125;12954:345;;;;:::o;13305:226::-;13445:34;13441:1;13433:6;13429:14;13422:58;13514:9;13509:2;13501:6;13497:15;13490:34;13305:226;:::o;13537:366::-;13679:3;13700:67;13764:2;13759:3;13700:67;:::i;:::-;13693:74;;13776:93;13865:3;13776:93;:::i;:::-;13894:2;13889:3;13885:12;13878:19;;13537:366;;;:::o;13909:419::-;14075:4;14113:2;14102:9;14098:18;14090:26;;14162:9;14156:4;14152:20;14148:1;14137:9;14133:17;14126:47;14190:131;14316:4;14190:131;:::i;:::-;14182:139;;13909:419;;;:::o;14334:332::-;14455:4;14493:2;14482:9;14478:18;14470:26;;14506:71;14574:1;14563:9;14559:17;14550:6;14506:71;:::i;:::-;14587:72;14655:2;14644:9;14640:18;14631:6;14587:72;:::i;:::-;14334:332;;;;;:::o;14672:102::-;14714:8;14761:5;14758:1;14754:13;14733:34;;14672:102;;;:::o;14780:848::-;14841:5;14848:4;14872:6;14863:15;;14896:5;14887:14;;14910:712;14931:1;14921:8;14918:15;14910:712;;;15026:4;15021:3;15017:14;15011:4;15008:24;15005:50;;;15035:18;;:::i;:::-;15005:50;15085:1;15075:8;15071:16;15068:451;;;15500:4;15493:5;15489:16;15480:25;;15068:451;15550:4;15544;15540:15;15532:23;;15580:32;15603:8;15580:32;:::i;:::-;15568:44;;14910:712;;;14780:848;;;;;;;:::o;15634:1073::-;15688:5;15879:8;15869:40;;15900:1;15891:10;;15902:5;;15869:40;15928:4;15918:36;;15945:1;15936:10;;15947:5;;15918:36;16014:4;16062:1;16057:27;;;;16098:1;16093:191;;;;16007:277;;16057:27;16075:1;16066:10;;16077:5;;;16093:191;16138:3;16128:8;16125:17;16122:43;;;16145:18;;:::i;:::-;16122:43;16194:8;16191:1;16187:16;16178:25;;16229:3;16222:5;16219:14;16216:40;;;16236:18;;:::i;:::-;16216:40;16269:5;;;16007:277;;16393:2;16383:8;16380:16;16374:3;16368:4;16365:13;16361:36;16343:2;16333:8;16330:16;16325:2;16319:4;16316:12;16312:35;16296:111;16293:246;;;16449:8;16443:4;16439:19;16430:28;;16484:3;16477:5;16474:14;16471:40;;;16491:18;;:::i;:::-;16471:40;16524:5;;16293:246;16564:42;16602:3;16592:8;16586:4;16583:1;16564:42;:::i;:::-;16549:57;;;;16638:4;16633:3;16629:14;16622:5;16619:25;16616:51;;;16647:18;;:::i;:::-;16616:51;16696:4;16689:5;16685:16;16676:25;;15634:1073;;;;;;:::o;16713:281::-;16771:5;16795:23;16813:4;16795:23;:::i;:::-;16787:31;;16839:25;16855:8;16839:25;:::i;:::-;16827:37;;16883:104;16920:66;16910:8;16904:4;16883:104;:::i;:::-;16874:113;;16713:281;;;;:::o;17000:348::-;17040:7;17063:20;17081:1;17063:20;:::i;:::-;17058:25;;17097:20;17115:1;17097:20;:::i;:::-;17092:25;;17285:1;17217:66;17213:74;17210:1;17207:81;17202:1;17195:9;17188:17;17184:105;17181:131;;;17292:18;;:::i;:::-;17181:131;17340:1;17337;17333:9;17322:20;;17000:348;;;;:::o;17354:238::-;17494:34;17490:1;17482:6;17478:14;17471:58;17563:21;17558:2;17550:6;17546:15;17539:46;17354:238;:::o;17598:366::-;17740:3;17761:67;17825:2;17820:3;17761:67;:::i;:::-;17754:74;;17837:93;17926:3;17837:93;:::i;:::-;17955:2;17950:3;17946:12;17939:19;;17598:366;;;:::o;17970:419::-;18136:4;18174:2;18163:9;18159:18;18151:26;;18223:9;18217:4;18213:20;18209:1;18198:9;18194:17;18187:47;18251:131;18377:4;18251:131;:::i;:::-;18243:139;;17970:419;;;:::o;18395:224::-;18535:34;18531:1;18523:6;18519:14;18512:58;18604:7;18599:2;18591:6;18587:15;18580:32;18395:224;:::o;18625:366::-;18767:3;18788:67;18852:2;18847:3;18788:67;:::i;:::-;18781:74;;18864:93;18953:3;18864:93;:::i;:::-;18982:2;18977:3;18973:12;18966:19;;18625:366;;;:::o;18997:419::-;19163:4;19201:2;19190:9;19186:18;19178:26;;19250:9;19244:4;19240:20;19236:1;19225:9;19221:17;19214:47;19278:131;19404:4;19278:131;:::i;:::-;19270:139;;18997:419;;;:::o;19422:225::-;19562:34;19558:1;19550:6;19546:14;19539:58;19631:8;19626:2;19618:6;19614:15;19607:33;19422:225;:::o;19653:366::-;19795:3;19816:67;19880:2;19875:3;19816:67;:::i;:::-;19809:74;;19892:93;19981:3;19892:93;:::i;:::-;20010:2;20005:3;20001:12;19994:19;;19653:366;;;:::o;20025:419::-;20191:4;20229:2;20218:9;20214:18;20206:26;;20278:9;20272:4;20268:20;20264:1;20253:9;20249:17;20242:47;20306:131;20432:4;20306:131;:::i;:::-;20298:139;;20025:419;;;:::o;20450:120::-;20522:23;20539:5;20522:23;:::i;:::-;20515:5;20512:34;20502:62;;20560:1;20557;20550:12;20502:62;20450:120;:::o;20576:141::-;20632:5;20663:6;20657:13;20648:22;;20679:32;20705:5;20679:32;:::i;:::-;20576:141;;;;:::o;20723:349::-;20792:6;20841:2;20829:9;20820:7;20816:23;20812:32;20809:119;;;20847:79;;:::i;:::-;20809:119;20967:1;20992:63;21047:7;21038:6;21027:9;21023:22;20992:63;:::i;:::-;20982:73;;20938:127;20723:349;;;;:::o;21078:233::-;21117:3;21140:24;21158:5;21140:24;:::i;:::-;21131:33;;21186:66;21179:5;21176:77;21173:103;;21256:18;;:::i;:::-;21173:103;21303:1;21296:5;21292:13;21285:20;;21078:233;;;:::o;21317:143::-;21374:5;21405:6;21399:13;21390:22;;21421:33;21448:5;21421:33;:::i;:::-;21317:143;;;;:::o;21466:351::-;21536:6;21585:2;21573:9;21564:7;21560:23;21556:32;21553:119;;;21591:79;;:::i;:::-;21553:119;21711:1;21736:64;21792:7;21783:6;21772:9;21768:22;21736:64;:::i;:::-;21726:74;;21682:128;21466:351;;;;:::o;21823:220::-;21963:34;21959:1;21951:6;21947:14;21940:58;22032:3;22027:2;22019:6;22015:15;22008:28;21823:220;:::o;22049:366::-;22191:3;22212:67;22276:2;22271:3;22212:67;:::i;:::-;22205:74;;22288:93;22377:3;22288:93;:::i;:::-;22406:2;22401:3;22397:12;22390:19;;22049:366;;;:::o;22421:419::-;22587:4;22625:2;22614:9;22610:18;22602:26;;22674:9;22668:4;22664:20;22660:1;22649:9;22645:17;22638:47;22702:131;22828:4;22702:131;:::i;:::-;22694:139;;22421:419;;;:::o;22846:305::-;22886:3;22905:20;22923:1;22905:20;:::i;:::-;22900:25;;22939:20;22957:1;22939:20;:::i;:::-;22934:25;;23093:1;23025:66;23021:74;23018:1;23015:81;23012:107;;;23099:18;;:::i;:::-;23012:107;23143:1;23140;23136:9;23129:16;;22846:305;;;;:::o;23157:177::-;23297:29;23293:1;23285:6;23281:14;23274:53;23157:177;:::o;23340:366::-;23482:3;23503:67;23567:2;23562:3;23503:67;:::i;:::-;23496:74;;23579:93;23668:3;23579:93;:::i;:::-;23697:2;23692:3;23688:12;23681:19;;23340:366;;;:::o;23712:419::-;23878:4;23916:2;23905:9;23901:18;23893:26;;23965:9;23959:4;23955:20;23951:1;23940:9;23936:17;23929:47;23993:131;24119:4;23993:131;:::i;:::-;23985:139;;23712:419;;;:::o;24137:223::-;24277:34;24273:1;24265:6;24261:14;24254:58;24346:6;24341:2;24333:6;24329:15;24322:31;24137:223;:::o;24366:366::-;24508:3;24529:67;24593:2;24588:3;24529:67;:::i;:::-;24522:74;;24605:93;24694:3;24605:93;:::i;:::-;24723:2;24718:3;24714:12;24707:19;;24366:366;;;:::o;24738:419::-;24904:4;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24738:419;;;:::o;25163:221::-;25303:34;25299:1;25291:6;25287:14;25280:58;25372:4;25367:2;25359:6;25355:15;25348:29;25163:221;:::o;25390:366::-;25532:3;25553:67;25617:2;25612:3;25553:67;:::i;:::-;25546:74;;25629:93;25718:3;25629:93;:::i;:::-;25747:2;25742:3;25738:12;25731:19;;25390:366;;;:::o;25762:419::-;25928:4;25966:2;25955:9;25951:18;25943:26;;26015:9;26009:4;26005:20;26001:1;25990:9;25986:17;25979:47;26043:131;26169:4;26043:131;:::i;:::-;26035:139;;25762:419;;;:::o;26187:525::-;26226:3;26245:19;26262:1;26245:19;:::i;:::-;26240:24;;26278:19;26295:1;26278:19;:::i;:::-;26273:24;;26466:1;26398:66;26394:74;26391:1;26387:82;26382:1;26379;26375:9;26368:17;26364:106;26361:132;;;26473:18;;:::i;:::-;26361:132;26653:1;26585:66;26581:74;26578:1;26574:82;26570:1;26567;26563:9;26559:98;26556:124;;;26660:18;;:::i;:::-;26556:124;26704:1;26701;26697:9;26690:16;;26187:525;;;;:::o;26718:147::-;26819:11;26856:3;26841:18;;26718:147;;;;:::o;26871:114::-;;:::o;26991:398::-;27150:3;27171:83;27252:1;27247:3;27171:83;:::i;:::-;27164:90;;27263:93;27352:3;27263:93;:::i;:::-;27381:1;27376:3;27372:11;27365:18;;26991:398;;;:::o;27395:379::-;27579:3;27601:147;27744:3;27601:147;:::i;:::-;27594:154;;27765:3;27758:10;;27395:379;;;:::o;27780:191::-;27820:4;27840:20;27858:1;27840:20;:::i;:::-;27835:25;;27874:20;27892:1;27874:20;:::i;:::-;27869:25;;27913:1;27910;27907:8;27904:34;;;27918:18;;:::i;:::-;27904:34;27963:1;27960;27956:9;27948:17;;27780:191;;;;:::o;27977:527::-;28016:4;28036:19;28053:1;28036:19;:::i;:::-;28031:24;;28069:19;28086:1;28069:19;:::i;:::-;28064:24;;28258:1;28190:66;28186:74;28183:1;28179:82;28174:1;28171;28167:9;28160:17;28156:106;28153:132;;;28265:18;;:::i;:::-;28153:132;28444:1;28376:66;28372:74;28369:1;28365:82;28361:1;28358;28354:9;28350:98;28347:124;;;28451:18;;:::i;:::-;28347:124;28496:1;28493;28489:9;28481:17;;27977:527;;;;:::o;28510:181::-;28650:33;28646:1;28638:6;28634:14;28627:57;28510:181;:::o;28697:366::-;28839:3;28860:67;28924:2;28919:3;28860:67;:::i;:::-;28853:74;;28936:93;29025:3;28936:93;:::i;:::-;29054:2;29049:3;29045:12;29038:19;;28697:366;;;:::o;29069:419::-;29235:4;29273:2;29262:9;29258:18;29250:26;;29322:9;29316:4;29312:20;29308:1;29297:9;29293:17;29286:47;29350:131;29476:4;29350:131;:::i;:::-;29342:139;;29069:419;;;:::o;29494:220::-;29634:34;29630:1;29622:6;29618:14;29611:58;29703:3;29698:2;29690:6;29686:15;29679:28;29494:220;:::o;29720:366::-;29862:3;29883:67;29947:2;29942:3;29883:67;:::i;:::-;29876:74;;29959:93;30048:3;29959:93;:::i;:::-;30077:2;30072:3;30068:12;30061:19;;29720:366;;;:::o;30092:419::-;30258:4;30296:2;30285:9;30281:18;30273:26;;30345:9;30339:4;30335:20;30331:1;30320:9;30316:17;30309:47;30373:131;30499:4;30373:131;:::i;:::-;30365:139;;30092:419;;;:::o
Swarm Source
ipfs://150fcee5d03f7231c182a16f1b92d312b661ae592a5e3a0ac5068ef6cad37e82
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.