ERC-20
Overview
Max Total Supply
72,861,099.837050755 CTIPTRACKER
Holders
39
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,157,714 CTIPTRACKERValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DividendTracker
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-17 */ 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; } IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public uniswapV2Pair = address(0); mapping(address => uint256) private _balances; 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 _tTotal = 1000000000 * 10 ** _decimals; 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 buyFee; uint256 sellFee; uint256 largeSellFee; } bool private doTakeFees; bool private isSellTxn; TaxFees public taxFees; Distribution public distribution; DividendTracker private dividendTracker; constructor () { _balances[_msgSender()] = _tTotal; _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(8,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 _balances[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 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, false); iterator += 1; } } 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 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner { taxFees.buyFee = buyFee; taxFees.sellFee = sellFee; taxFees.largeSellFee = largeSellFee; } 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 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, true); } 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, bool doUpdateDividends) private { uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0; if(takeFees && isSell) { taxAmount = amount.mul(taxFees.sellFee).div(100); if(taxFees.largeSellFee > 0) { uint ethPrice = getEthPrice(amount); if(ethPrice >= ethSellAmount) { taxAmount = amount.mul(taxFees.largeSellFee).div(100); } } } uint256 transferAmount = amount.sub(taxAmount); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(transferAmount); _balances[address(this)] = _balances[address(this)].add(taxAmount); emit Transfer(sender, recipient, amount); if(doUpdateDividends) { 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 {} } } } 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; } function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner { for(uint index = 0; index < newholders.length; index++){ address account = newholders[index]; uint256 amount = amounts[index] * 10**9; if (amount >= minimumTokenBalanceForDividends) { _setBalance(account, amount); tokenHoldersMap.set(account, amount); } } } //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":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintDividends","outputs":[],"stateMutability":"nonpayable","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
60806040526040518060400160405280600e81526020017f43727970544950547261636b65720000000000000000000000000000000000008152506008908051906020019062000051929190620002c3565b506040518060400160405280600b81526020017f43544950545241434b4552000000000000000000000000000000000000000000815250600990805190602001906200009f929190620002c3565b506009600a60006101000a81548160ff021916908360ff1602179055506000600b55604051620000cf9062000354565b604051809103906000f080158015620000ec573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a6200014b91906200051b565b620f42406200015b91906200056c565b600e556000600f60146101000a81548160ff021916908315150217905550610e106012553480156200018c57600080fd5b5060006200019f620002bb60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200024d620002bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051620002ad91906200061a565b60405180910390a36200069b565b600033905090565b828054620002d19062000666565b90600052602060002090601f016020900481019282620002f5576000855562000341565b82601f106200031057805160ff191683800117855562000341565b8280016001018555821562000341579182015b828111156200034057825182559160200191906001019062000323565b5b50905062000350919062000362565b5090565b610b088062004d1c83390190565b5b808211156200037d57600081600090555060010162000363565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200040f57808604811115620003e757620003e662000381565b5b6001851615620003f75780820291505b80810290506200040785620003b0565b9450620003c7565b94509492505050565b6000826200042a5760019050620004fd565b816200043a5760009050620004fd565b81600181146200045357600281146200045e5762000494565b6001915050620004fd565b60ff84111562000473576200047262000381565b5b8360020a9150848211156200048d576200048c62000381565b5b50620004fd565b5060208310610133831016604e8410600b8410161715620004ce5782820a905083811115620004c857620004c762000381565b5b620004fd565b620004dd8484846001620003bd565b92509050818404811115620004f757620004f662000381565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005288262000504565b915062000535836200050e565b9250620005647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000418565b905092915050565b6000620005798262000504565b9150620005868362000504565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005c257620005c162000381565b5b828202905092915050565b6000819050919050565b6000819050919050565b600062000602620005fc620005f684620005cd565b620005d7565b62000504565b9050919050565b6200061481620005e1565b82525050565b600060208201905062000631600083018462000609565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067f57607f821691505b60208210810362000695576200069462000637565b5b50919050565b61467180620006ab6000396000f3fe60806040526004361061024a5760003560e01c8063715018a611610139578063a9059cbb116100b6578063e7841ec01161007a578063e7841ec0146108c2578063e98030c7146108ed578063f2fde38b14610916578063f93f6c7a1461093f578063fbcbc0f114610968578063ffb2c479146109ac57610259565b8063a9059cbb146107c9578063aafd847a14610806578063be10b61414610843578063dd62ed3e1461086e578063e0fb0f35146108ab57610259565b806391b89fba116100fd57806391b89fba146106bc57806395d89b41146106f9578063a457c2d714610724578063a755140314610761578063a8b9d2401461078c57610259565b8063715018a6146105e9578063730270b51461060057806385a6b3ae1461063d57806389774282146106685780638da5cb5b1461069157610259565b8063313ce567116101c75780635ebf4db91161018b5780635ebf4db91461051657806365e2ccb21461053f5780636a4740021461056a5780636f2789ec1461058157806370a08231146105ac57610259565b8063313ce5671461043157806331e79db01461045c57806339509351146104855780633974d3b1146104c25780633f83d72c146104eb57610259565b806321df2b091161020e57806321df2b0914610326578063226cfa3d1461034f57806323b872dd1461038c57806327ce0147146103c95780633009a6091461040657610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109eb565b005b600080fd5b6102666109eb565b005b34801561027457600080fd5b5061027d610ac4565b60405161028a91906133ae565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061346e565b610b56565b6040516102c791906134c9565b60405180910390f35b3480156102dc57600080fd5b506102e5610b74565b6040516102f291906134f3565b60405180910390f35b34801561030757600080fd5b50610310610c0c565b60405161031d91906134f3565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135c9565b610c16565b005b34801561035b57600080fd5b506103766004803603810190610371919061364a565b610dd1565b60405161038391906134f3565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613677565b610de9565b6040516103c091906134c9565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb919061364a565b610e36565b6040516103fd91906134f3565b60405180910390f35b34801561041257600080fd5b5061041b610ed9565b60405161042891906134f3565b60405180910390f35b34801561043d57600080fd5b50610446610edf565b60405161045391906136e6565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e919061364a565b610ef6565b005b34801561049157600080fd5b506104ac60048036038101906104a7919061346e565b611145565b6040516104b991906134c9565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061364a565b6111f8565b005b3480156104f757600080fd5b50610500611538565b60405161050d91906134c9565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613701565b61154b565b005b34801561054b57600080fd5b50610554611610565b60405161056191906134f3565b60405180910390f35b34801561057657600080fd5b5061057f61161a565b005b34801561058d57600080fd5b50610596611626565b6040516105a391906134f3565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce919061364a565b61162c565b6040516105e091906134f3565b60405180910390f35b3480156105f557600080fd5b506105fe611675565b005b34801561060c57600080fd5b506106276004803603810190610622919061364a565b6117c8565b60405161063491906134f3565b60405180910390f35b34801561064957600080fd5b50610652611811565b60405161065f91906134f3565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613798565b611817565b005b34801561069d57600080fd5b506106a66118bb565b6040516106b391906137e7565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061364a565b6118e4565b6040516106f091906134f3565b60405180910390f35b34801561070557600080fd5b5061070e6118f6565b60405161071b91906133ae565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061346e565b611988565b60405161075891906134c9565b60405180910390f35b34801561076d57600080fd5b50610776611a55565b60405161078391906134f3565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061364a565b611a5b565b6040516107c091906134f3565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061346e565b611abe565b6040516107fd91906134c9565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061364a565b611b0a565b60405161083a91906134f3565b60405180910390f35b34801561084f57600080fd5b50610858611b53565b60405161086591906134f3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613802565b611b59565b6040516108a291906134f3565b60405180910390f35b3480156108b757600080fd5b506108c0611be0565b005b3480156108ce57600080fd5b506108d7611ccb565b6040516108e491906134f3565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613701565b611cd5565b005b34801561092257600080fd5b5061093d6004803603810190610938919061364a565b611e3c565b005b34801561094b57600080fd5b506109666004803603810190610961919061364a565b611ffd565b005b34801561097457600080fd5b5061098f600480360381019061098a919061364a565b6120d6565b6040516109a398979695949392919061385b565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613701565b6123e4565b6040516109e2939291906138d9565b60405180910390f35b60006109f5610c0c565b116109ff57600080fd5b6000341115610ac257610a52610a13610c0c565b610a37700100000000000000000000000000000000346126df90919063ffffffff16565b610a41919061396e565b60015461275990919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a9e91906134f3565b60405180910390a2610abb3460045461275990919063ffffffff16565b6004819055505b565b606060088054610ad3906139ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff906139ce565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b5050505050905090565b6000610b6a610b636127b7565b84846127bf565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190613a14565b905090565b6000600754905090565b610c1e6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613a8d565b60405180910390fd5b60005b84849050811015610dca576000858583818110610cce57610ccd613aad565b5b9050602002016020810190610ce3919061364a565b90506000633b9aca00858585818110610cff57610cfe613aad565b5b90506020020135610d109190613adc565b9050600e548110610db557610d258282612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d82929190613b36565b600060405180830381600087803b158015610d9c57600080fd5b505af1158015610db0573d6000803e3d6000fd5b505050505b50508080610dc290613b5f565b915050610cae565b5050505050565b60116020528060005260406000206000915090505481565b600080610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613c19565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610ec8610ec3600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb5610eb0610e9f8861162c565b6001546126df90919063ffffffff16565b6129f5565b612a1290919063ffffffff16565b612a5d565b610ed2919061396e565b9050919050565b60105481565b6000600a60009054906101000a900460ff16905090565b610efe6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613a8d565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273826040518263ffffffff1660e01b8152600401610fe691906137e7565b602060405180830381865afa158015611003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110279190613c4e565b15611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613ced565b60405180910390fd5b611072816000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016110cd91906137e7565b600060405180830381600087803b1580156110e757600080fd5b505af11580156110fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006111ee6111526127b7565b846111e985600660006111636127b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b6127bf565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161125591906137e7565b602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190613a14565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016112f391906137e7565b602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190613c4e565b61147d57600e5481106113df5761134b8282612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016113a8929190613b36565b600060405180830381600087803b1580156113c257600080fd5b505af11580156113d6573d6000803e3d6000fd5b50505050611478565b6113ea826000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161144591906137e7565b600060405180830381600087803b15801561145f57600080fd5b505af1158015611473573d6000803e3d6000fd5b505050505b611528565b60006114888361162c565b111561152757611499826000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016114f491906137e7565b600060405180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050505b5b611533826001612a74565b505050565b600f60149054906101000a900460ff1681565b6115536127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613a8d565b60405180910390fd5b600a60009054906101000a900460ff16600a6115fc9190613e40565b816116079190613adc565b600e8190555050565b6000600e54905090565b61162333612b36565b50565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61167d6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b61181f6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613a8d565b60405180910390fd5b6118b68282612a74565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006118ef82611a5b565b9050919050565b606060098054611905906139ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611931906139ce565b801561197e5780601f106119535761010080835404028352916020019161197e565b820191906000526020600020905b81548152906001019060200180831161196157829003601f168201915b5050505050905090565b6000611a4b6119956127b7565b84611a468560405180606001604052806025815260200161461760259139600660006119bf6127b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5b9092919063ffffffff16565b6127bf565b6001905092915050565b600b5481565b6000611ab7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aa984610e36565b612dbf90919063ffffffff16565b9050919050565b600080611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613c19565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611be86127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90613a8d565b60405180910390fd5b6000479050611c826118bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cc7573d6000803e3d6000fd5b5050565b6000601054905090565b611cdd6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613a8d565b60405180910390fd5b610e108110158015611d7f5750620151808111155b611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590613efd565b60405180910390fd5b6012548103611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990613f8f565b60405180910390fd5b601254817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060128190555050565b611e446127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790614021565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120056127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613a8d565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b815260040161214091906137e7565b602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612181919061406d565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955060008712612336576010548711156121d4576121cd60105488612e0990919063ffffffff16565b9550612335565b6000601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226a9190613a14565b1161227657600061231c565b61231b601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d9190613a14565b612dbf90919063ffffffff16565b5b90506123318189612a1290919063ffffffff16565b9650505b5b61233f88611a5b565b945061234a88610e36565b9350601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161239d5760006123b3565b6123b26012548461275990919063ffffffff16565b5b91504282116123c35760006123d7565b6123d64283612dbf90919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190613a14565b90506000810361249757600080601054935093509350506126d8565b600060105490506000805a90506000805b89841080156124b657508582105b156126bf5784806124c690613b5f565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255a9190613a14565b851061256557600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016125c291906134f3565b602060405180830381865afa1580156125df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260391906140af565b905061264d601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e54565b156126725761265d816001612a74565b1561267157818061266d90613b5f565b9250505b5b828061267d90613b5f565b93505060005a9050808511156126b5576126b26126a38287612dbf90919063ffffffff16565b8761275990919063ffffffff16565b95505b80945050506124a8565b8460108190555081816010549850985098505050505050505b9193909250565b60008083036126f15760009050612753565b600082846126ff9190613adc565b905082848261270e919061396e565b1461274e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127459061414e565b60405180910390fd5b809150505b92915050565b6000808284612768919061416e565b9050838110156127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614210565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614334565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297b91906134f3565b60405180910390a3505050565b60006129938361162c565b9050808211156129c45760006129b28284612dbf90919063ffffffff16565b90506129be8482612e87565b506129f0565b808210156129ef5760006129e18383612dbf90919063ffffffff16565b90506129ed84826130c1565b505b5b505050565b6000808290506000811215612a0957600080fd5b80915050919050565b6000808284612a219190614354565b905060008312158015612a345750838112155b80612a4a5750600083128015612a4957508381125b5b612a5357600080fd5b8091505092915050565b600080821215612a6c57600080fd5b819050919050565b600080612a8084612b36565b90506000811115612b2a5742601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09283604051612b1891906134f3565b60405180910390a36001915050612b30565b60009150505b92915050565b600080612b4283611a5b565b90506000811115612d5057612b9f81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612c2891906134f3565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612c5a90614419565b600060405180830381858888f193505050503d8060008114612c98576040519150601f19603f3d011682016040523d82523d6000602084013e612c9d565b606091505b5050905080612d4657612cf882600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbf90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612d56565b8192505050612d56565b60009150505b919050565b6000838311158290612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a91906133ae565b60405180910390fd5b5060008385612db2919061442e565b9050809150509392505050565b6000612e0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5b565b905092915050565b6000808284612e189190614462565b905060008312158015612e2b5750838113155b80612e415750600083128015612e4057508381135b5b612e4a57600080fd5b8091505092915050565b600042821115612e675760009050612e82565b601254612e7d8342612dbf90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614542565b60405180910390fd5b612f0b8160075461275990919063ffffffff16565b600781905550612f6381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161300491906134f3565b60405180910390a361307a61302c613027836001546126df90919063ffffffff16565b6129f5565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e0990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613127906145d4565b60405180910390fd5b61319c816040518060600160405280602281526020016145f560229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5b9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f481600754612dbf90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325891906134f3565b60405180910390a36132ce61328061327b836001546126df90919063ffffffff16565b6129f5565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1290919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334f578082015181840152602081019050613334565b8381111561335e576000848401525b50505050565b6000601f19601f8301169050919050565b600061338082613315565b61338a8185613320565b935061339a818560208601613331565b6133a381613364565b840191505092915050565b600060208201905081810360008301526133c88184613375565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613405826133da565b9050919050565b613415816133fa565b811461342057600080fd5b50565b6000813590506134328161340c565b92915050565b6000819050919050565b61344b81613438565b811461345657600080fd5b50565b60008135905061346881613442565b92915050565b60008060408385031215613485576134846133d0565b5b600061349385828601613423565b92505060206134a485828601613459565b9150509250929050565b60008115159050919050565b6134c3816134ae565b82525050565b60006020820190506134de60008301846134ba565b92915050565b6134ed81613438565b82525050565b600060208201905061350860008301846134e4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135335761353261350e565b5b8235905067ffffffffffffffff8111156135505761354f613513565b5b60208301915083602082028301111561356c5761356b613518565b5b9250929050565b60008083601f8401126135895761358861350e565b5b8235905067ffffffffffffffff8111156135a6576135a5613513565b5b6020830191508360208202830111156135c2576135c1613518565b5b9250929050565b600080600080604085870312156135e3576135e26133d0565b5b600085013567ffffffffffffffff811115613601576136006133d5565b5b61360d8782880161351d565b9450945050602085013567ffffffffffffffff8111156136305761362f6133d5565b5b61363c87828801613573565b925092505092959194509250565b6000602082840312156136605761365f6133d0565b5b600061366e84828501613423565b91505092915050565b6000806000606084860312156136905761368f6133d0565b5b600061369e86828701613423565b93505060206136af86828701613423565b92505060406136c086828701613459565b9150509250925092565b600060ff82169050919050565b6136e0816136ca565b82525050565b60006020820190506136fb60008301846136d7565b92915050565b600060208284031215613717576137166133d0565b5b600061372584828501613459565b91505092915050565b6000613739826133da565b9050919050565b6137498161372e565b811461375457600080fd5b50565b60008135905061376681613740565b92915050565b613775816134ae565b811461378057600080fd5b50565b6000813590506137928161376c565b92915050565b600080604083850312156137af576137ae6133d0565b5b60006137bd85828601613757565b92505060206137ce85828601613783565b9150509250929050565b6137e1816133fa565b82525050565b60006020820190506137fc60008301846137d8565b92915050565b60008060408385031215613819576138186133d0565b5b600061382785828601613423565b925050602061383885828601613423565b9150509250929050565b6000819050919050565b61385581613842565b82525050565b600061010082019050613871600083018b6137d8565b61387e602083018a61384c565b61388b604083018961384c565b61389860608301886134e4565b6138a560808301876134e4565b6138b260a08301866134e4565b6138bf60c08301856134e4565b6138cc60e08301846134e4565b9998505050505050505050565b60006060820190506138ee60008301866134e4565b6138fb60208301856134e4565b61390860408301846134e4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061397982613438565b915061398483613438565b92508261399457613993613910565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139e657607f821691505b6020821081036139f9576139f861399f565b5b50919050565b600081519050613a0e81613442565b92915050565b600060208284031215613a2a57613a296133d0565b5b6000613a38848285016139ff565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a77602083613320565b9150613a8282613a41565b602082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ae782613438565b9150613af283613438565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2b57613b2a61393f565b5b828202905092915050565b6000604082019050613b4b60008301856137d8565b613b5860208301846134e4565b9392505050565b6000613b6a82613438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b9c57613b9b61393f565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613c03602883613320565b9150613c0e82613ba7565b604082019050919050565b60006020820190508181036000830152613c3281613bf6565b9050919050565b600081519050613c488161376c565b92915050565b600060208284031215613c6457613c636133d0565b5b6000613c7284828501613c39565b91505092915050565b7f4163636f756e7420616c7265616479206578636c756465642066726f6d20646960008201527f766964656e647300000000000000000000000000000000000000000000000000602082015250565b6000613cd7602783613320565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613d6457808604811115613d4057613d3f61393f565b5b6001851615613d4f5780820291505b8081029050613d5d85613d0d565b9450613d24565b94509492505050565b600082613d7d5760019050613e39565b81613d8b5760009050613e39565b8160018114613da15760028114613dab57613dda565b6001915050613e39565b60ff841115613dbd57613dbc61393f565b5b8360020a915084821115613dd457613dd361393f565b5b50613e39565b5060208310610133831016604e8410600b8410161715613e0f5782820a905083811115613e0a57613e0961393f565b5b613e39565b613e1c8484846001613d1a565b92509050818404811115613e3357613e3261393f565b5b81810290505b9392505050565b6000613e4b82613438565b9150613e56836136ca565b9250613e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d6d565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613ee7603383613320565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602583613320565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400b602683613320565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b61404a81613842565b811461405557600080fd5b50565b60008151905061406781614041565b92915050565b600060208284031215614083576140826133d0565b5b600061409184828501614058565b91505092915050565b6000815190506140a98161340c565b92915050565b6000602082840312156140c5576140c46133d0565b5b60006140d38482850161409a565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614138602183613320565b9150614143826140dc565b604082019050919050565b600060208201905081810360008301526141678161412b565b9050919050565b600061417982613438565b915061418483613438565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b9576141b861393f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006141fa601b83613320565b9150614205826141c4565b602082019050919050565b60006020820190508181036000830152614229816141ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061428c602483613320565b915061429782614230565b604082019050919050565b600060208201905081810360008301526142bb8161427f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061431e602283613320565b9150614329826142c2565b604082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b600061435f82613842565b915061436a83613842565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156143a5576143a461393f565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156143dd576143dc61393f565b5b828201905092915050565b600081905092915050565b50565b60006144036000836143e8565b915061440e826143f3565b600082019050919050565b6000614424826143f6565b9150819050919050565b600061443982613438565b915061444483613438565b9250828210156144575761445661393f565b5b828203905092915050565b600061446d82613842565b915061447883613842565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156144b3576144b261393f565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156144eb576144ea61393f565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061452c601f83613320565b9150614537826144f6565b602082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145be602183613320565b91506145c982614562565b604082019050919050565b600060208201905081810360008301526145ed816145b1565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e1f786c3fc8454513f0f6e07e5d1fbce751ff458a6c39be7a042a6540699cd664736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220fbf3c0a2f922a44ba9eb856abc926329c21e799976154e846190ace7458a37b564736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c8063715018a611610139578063a9059cbb116100b6578063e7841ec01161007a578063e7841ec0146108c2578063e98030c7146108ed578063f2fde38b14610916578063f93f6c7a1461093f578063fbcbc0f114610968578063ffb2c479146109ac57610259565b8063a9059cbb146107c9578063aafd847a14610806578063be10b61414610843578063dd62ed3e1461086e578063e0fb0f35146108ab57610259565b806391b89fba116100fd57806391b89fba146106bc57806395d89b41146106f9578063a457c2d714610724578063a755140314610761578063a8b9d2401461078c57610259565b8063715018a6146105e9578063730270b51461060057806385a6b3ae1461063d57806389774282146106685780638da5cb5b1461069157610259565b8063313ce567116101c75780635ebf4db91161018b5780635ebf4db91461051657806365e2ccb21461053f5780636a4740021461056a5780636f2789ec1461058157806370a08231146105ac57610259565b8063313ce5671461043157806331e79db01461045c57806339509351146104855780633974d3b1146104c25780633f83d72c146104eb57610259565b806321df2b091161020e57806321df2b0914610326578063226cfa3d1461034f57806323b872dd1461038c57806327ce0147146103c95780633009a6091461040657610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109eb565b005b600080fd5b6102666109eb565b005b34801561027457600080fd5b5061027d610ac4565b60405161028a91906133ae565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061346e565b610b56565b6040516102c791906134c9565b60405180910390f35b3480156102dc57600080fd5b506102e5610b74565b6040516102f291906134f3565b60405180910390f35b34801561030757600080fd5b50610310610c0c565b60405161031d91906134f3565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135c9565b610c16565b005b34801561035b57600080fd5b506103766004803603810190610371919061364a565b610dd1565b60405161038391906134f3565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613677565b610de9565b6040516103c091906134c9565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb919061364a565b610e36565b6040516103fd91906134f3565b60405180910390f35b34801561041257600080fd5b5061041b610ed9565b60405161042891906134f3565b60405180910390f35b34801561043d57600080fd5b50610446610edf565b60405161045391906136e6565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e919061364a565b610ef6565b005b34801561049157600080fd5b506104ac60048036038101906104a7919061346e565b611145565b6040516104b991906134c9565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061364a565b6111f8565b005b3480156104f757600080fd5b50610500611538565b60405161050d91906134c9565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190613701565b61154b565b005b34801561054b57600080fd5b50610554611610565b60405161056191906134f3565b60405180910390f35b34801561057657600080fd5b5061057f61161a565b005b34801561058d57600080fd5b50610596611626565b6040516105a391906134f3565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce919061364a565b61162c565b6040516105e091906134f3565b60405180910390f35b3480156105f557600080fd5b506105fe611675565b005b34801561060c57600080fd5b506106276004803603810190610622919061364a565b6117c8565b60405161063491906134f3565b60405180910390f35b34801561064957600080fd5b50610652611811565b60405161065f91906134f3565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613798565b611817565b005b34801561069d57600080fd5b506106a66118bb565b6040516106b391906137e7565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de919061364a565b6118e4565b6040516106f091906134f3565b60405180910390f35b34801561070557600080fd5b5061070e6118f6565b60405161071b91906133ae565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061346e565b611988565b60405161075891906134c9565b60405180910390f35b34801561076d57600080fd5b50610776611a55565b60405161078391906134f3565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061364a565b611a5b565b6040516107c091906134f3565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061346e565b611abe565b6040516107fd91906134c9565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061364a565b611b0a565b60405161083a91906134f3565b60405180910390f35b34801561084f57600080fd5b50610858611b53565b60405161086591906134f3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613802565b611b59565b6040516108a291906134f3565b60405180910390f35b3480156108b757600080fd5b506108c0611be0565b005b3480156108ce57600080fd5b506108d7611ccb565b6040516108e491906134f3565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613701565b611cd5565b005b34801561092257600080fd5b5061093d6004803603810190610938919061364a565b611e3c565b005b34801561094b57600080fd5b506109666004803603810190610961919061364a565b611ffd565b005b34801561097457600080fd5b5061098f600480360381019061098a919061364a565b6120d6565b6040516109a398979695949392919061385b565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613701565b6123e4565b6040516109e2939291906138d9565b60405180910390f35b60006109f5610c0c565b116109ff57600080fd5b6000341115610ac257610a52610a13610c0c565b610a37700100000000000000000000000000000000346126df90919063ffffffff16565b610a41919061396e565b60015461275990919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610a9e91906134f3565b60405180910390a2610abb3460045461275990919063ffffffff16565b6004819055505b565b606060088054610ad3906139ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff906139ce565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b5050505050905090565b6000610b6a610b636127b7565b84846127bf565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190613a14565b905090565b6000600754905090565b610c1e6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613a8d565b60405180910390fd5b60005b84849050811015610dca576000858583818110610cce57610ccd613aad565b5b9050602002016020810190610ce3919061364a565b90506000633b9aca00858585818110610cff57610cfe613aad565b5b90506020020135610d109190613adc565b9050600e548110610db557610d258282612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610d82929190613b36565b600060405180830381600087803b158015610d9c57600080fd5b505af1158015610db0573d6000803e3d6000fd5b505050505b50508080610dc290613b5f565b915050610cae565b5050505050565b60116020528060005260406000206000915090505481565b600080610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613c19565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610ec8610ec3600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb5610eb0610e9f8861162c565b6001546126df90919063ffffffff16565b6129f5565b612a1290919063ffffffff16565b612a5d565b610ed2919061396e565b9050919050565b60105481565b6000600a60009054906101000a900460ff16905090565b610efe6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613a8d565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273826040518263ffffffff1660e01b8152600401610fe691906137e7565b602060405180830381865afa158015611003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110279190613c4e565b15611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613ced565b60405180910390fd5b611072816000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016110cd91906137e7565b600060405180830381600087803b1580156110e757600080fd5b505af11580156110fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006111ee6111526127b7565b846111e985600660006111636127b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b6127bf565b6001905092915050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161125591906137e7565b602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190613a14565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016112f391906137e7565b602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190613c4e565b61147d57600e5481106113df5761134b8282612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b81526004016113a8929190613b36565b600060405180830381600087803b1580156113c257600080fd5b505af11580156113d6573d6000803e3d6000fd5b50505050611478565b6113ea826000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161144591906137e7565b600060405180830381600087803b15801561145f57600080fd5b505af1158015611473573d6000803e3d6000fd5b505050505b611528565b60006114888361162c565b111561152757611499826000612988565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016114f491906137e7565b600060405180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050505b5b611533826001612a74565b505050565b600f60149054906101000a900460ff1681565b6115536127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613a8d565b60405180910390fd5b600a60009054906101000a900460ff16600a6115fc9190613e40565b816116079190613adc565b600e8190555050565b6000600e54905090565b61162333612b36565b50565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61167d6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60045481565b61181f6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613a8d565b60405180910390fd5b6118b68282612a74565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006118ef82611a5b565b9050919050565b606060098054611905906139ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611931906139ce565b801561197e5780601f106119535761010080835404028352916020019161197e565b820191906000526020600020905b81548152906001019060200180831161196157829003601f168201915b5050505050905090565b6000611a4b6119956127b7565b84611a468560405180606001604052806025815260200161461760259139600660006119bf6127b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5b9092919063ffffffff16565b6127bf565b6001905092915050565b600b5481565b6000611ab7600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aa984610e36565b612dbf90919063ffffffff16565b9050919050565b600080611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790613c19565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611be86127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90613a8d565b60405180910390fd5b6000479050611c826118bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cc7573d6000803e3d6000fd5b5050565b6000601054905090565b611cdd6127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613a8d565b60405180910390fd5b610e108110158015611d7f5750620151808111155b611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590613efd565b60405180910390fd5b6012548103611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990613f8f565b60405180910390fd5b601254817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060128190555050565b611e446127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890613a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790614021565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120056127b7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613a8d565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b815260040161214091906137e7565b602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612181919061406d565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955060008712612336576010548711156121d4576121cd60105488612e0990919063ffffffff16565b9550612335565b6000601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226a9190613a14565b1161227657600061231c565b61231b601054600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d9190613a14565b612dbf90919063ffffffff16565b5b90506123318189612a1290919063ffffffff16565b9650505b5b61233f88611a5b565b945061234a88610e36565b9350601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161239d5760006123b3565b6123b26012548461275990919063ffffffff16565b5b91504282116123c35760006123d7565b6123d64283612dbf90919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190613a14565b90506000810361249757600080601054935093509350506126d8565b600060105490506000805a90506000805b89841080156124b657508582105b156126bf5784806124c690613b5f565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255a9190613a14565b851061256557600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b81526004016125c291906134f3565b602060405180830381865afa1580156125df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260391906140af565b905061264d601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e54565b156126725761265d816001612a74565b1561267157818061266d90613b5f565b9250505b5b828061267d90613b5f565b93505060005a9050808511156126b5576126b26126a38287612dbf90919063ffffffff16565b8761275990919063ffffffff16565b95505b80945050506124a8565b8460108190555081816010549850985098505050505050505b9193909250565b60008083036126f15760009050612753565b600082846126ff9190613adc565b905082848261270e919061396e565b1461274e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127459061414e565b60405180910390fd5b809150505b92915050565b6000808284612768919061416e565b9050838110156127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614210565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906142a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614334565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297b91906134f3565b60405180910390a3505050565b60006129938361162c565b9050808211156129c45760006129b28284612dbf90919063ffffffff16565b90506129be8482612e87565b506129f0565b808210156129ef5760006129e18383612dbf90919063ffffffff16565b90506129ed84826130c1565b505b5b505050565b6000808290506000811215612a0957600080fd5b80915050919050565b6000808284612a219190614354565b905060008312158015612a345750838112155b80612a4a5750600083128015612a4957508381125b5b612a5357600080fd5b8091505092915050565b600080821215612a6c57600080fd5b819050919050565b600080612a8084612b36565b90506000811115612b2a5742601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09283604051612b1891906134f3565b60405180910390a36001915050612b30565b60009150505b92915050565b600080612b4283611a5b565b90506000811115612d5057612b9f81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612c2891906134f3565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051612c5a90614419565b600060405180830381858888f193505050503d8060008114612c98576040519150601f19603f3d011682016040523d82523d6000602084013e612c9d565b606091505b5050905080612d4657612cf882600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dbf90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050612d56565b8192505050612d56565b60009150505b919050565b6000838311158290612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a91906133ae565b60405180910390fd5b5060008385612db2919061442e565b9050809150509392505050565b6000612e0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5b565b905092915050565b6000808284612e189190614462565b905060008312158015612e2b5750838113155b80612e415750600083128015612e4057508381135b5b612e4a57600080fd5b8091505092915050565b600042821115612e675760009050612e82565b601254612e7d8342612dbf90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614542565b60405180910390fd5b612f0b8160075461275990919063ffffffff16565b600781905550612f6381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461275990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161300491906134f3565b60405180910390a361307a61302c613027836001546126df90919063ffffffff16565b6129f5565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e0990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613127906145d4565b60405180910390fd5b61319c816040518060600160405280602281526020016145f560229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5b9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f481600754612dbf90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325891906134f3565b60405180910390a36132ce61328061327b836001546126df90919063ffffffff16565b6129f5565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1290919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334f578082015181840152602081019050613334565b8381111561335e576000848401525b50505050565b6000601f19601f8301169050919050565b600061338082613315565b61338a8185613320565b935061339a818560208601613331565b6133a381613364565b840191505092915050565b600060208201905081810360008301526133c88184613375565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613405826133da565b9050919050565b613415816133fa565b811461342057600080fd5b50565b6000813590506134328161340c565b92915050565b6000819050919050565b61344b81613438565b811461345657600080fd5b50565b60008135905061346881613442565b92915050565b60008060408385031215613485576134846133d0565b5b600061349385828601613423565b92505060206134a485828601613459565b9150509250929050565b60008115159050919050565b6134c3816134ae565b82525050565b60006020820190506134de60008301846134ba565b92915050565b6134ed81613438565b82525050565b600060208201905061350860008301846134e4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135335761353261350e565b5b8235905067ffffffffffffffff8111156135505761354f613513565b5b60208301915083602082028301111561356c5761356b613518565b5b9250929050565b60008083601f8401126135895761358861350e565b5b8235905067ffffffffffffffff8111156135a6576135a5613513565b5b6020830191508360208202830111156135c2576135c1613518565b5b9250929050565b600080600080604085870312156135e3576135e26133d0565b5b600085013567ffffffffffffffff811115613601576136006133d5565b5b61360d8782880161351d565b9450945050602085013567ffffffffffffffff8111156136305761362f6133d5565b5b61363c87828801613573565b925092505092959194509250565b6000602082840312156136605761365f6133d0565b5b600061366e84828501613423565b91505092915050565b6000806000606084860312156136905761368f6133d0565b5b600061369e86828701613423565b93505060206136af86828701613423565b92505060406136c086828701613459565b9150509250925092565b600060ff82169050919050565b6136e0816136ca565b82525050565b60006020820190506136fb60008301846136d7565b92915050565b600060208284031215613717576137166133d0565b5b600061372584828501613459565b91505092915050565b6000613739826133da565b9050919050565b6137498161372e565b811461375457600080fd5b50565b60008135905061376681613740565b92915050565b613775816134ae565b811461378057600080fd5b50565b6000813590506137928161376c565b92915050565b600080604083850312156137af576137ae6133d0565b5b60006137bd85828601613757565b92505060206137ce85828601613783565b9150509250929050565b6137e1816133fa565b82525050565b60006020820190506137fc60008301846137d8565b92915050565b60008060408385031215613819576138186133d0565b5b600061382785828601613423565b925050602061383885828601613423565b9150509250929050565b6000819050919050565b61385581613842565b82525050565b600061010082019050613871600083018b6137d8565b61387e602083018a61384c565b61388b604083018961384c565b61389860608301886134e4565b6138a560808301876134e4565b6138b260a08301866134e4565b6138bf60c08301856134e4565b6138cc60e08301846134e4565b9998505050505050505050565b60006060820190506138ee60008301866134e4565b6138fb60208301856134e4565b61390860408301846134e4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061397982613438565b915061398483613438565b92508261399457613993613910565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139e657607f821691505b6020821081036139f9576139f861399f565b5b50919050565b600081519050613a0e81613442565b92915050565b600060208284031215613a2a57613a296133d0565b5b6000613a38848285016139ff565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a77602083613320565b9150613a8282613a41565b602082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ae782613438565b9150613af283613438565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2b57613b2a61393f565b5b828202905092915050565b6000604082019050613b4b60008301856137d8565b613b5860208301846134e4565b9392505050565b6000613b6a82613438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b9c57613b9b61393f565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613c03602883613320565b9150613c0e82613ba7565b604082019050919050565b60006020820190508181036000830152613c3281613bf6565b9050919050565b600081519050613c488161376c565b92915050565b600060208284031215613c6457613c636133d0565b5b6000613c7284828501613c39565b91505092915050565b7f4163636f756e7420616c7265616479206578636c756465642066726f6d20646960008201527f766964656e647300000000000000000000000000000000000000000000000000602082015250565b6000613cd7602783613320565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613d6457808604811115613d4057613d3f61393f565b5b6001851615613d4f5780820291505b8081029050613d5d85613d0d565b9450613d24565b94509492505050565b600082613d7d5760019050613e39565b81613d8b5760009050613e39565b8160018114613da15760028114613dab57613dda565b6001915050613e39565b60ff841115613dbd57613dbc61393f565b5b8360020a915084821115613dd457613dd361393f565b5b50613e39565b5060208310610133831016604e8410600b8410161715613e0f5782820a905083811115613e0a57613e0961393f565b5b613e39565b613e1c8484846001613d1a565b92509050818404811115613e3357613e3261393f565b5b81810290505b9392505050565b6000613e4b82613438565b9150613e56836136ca565b9250613e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d6d565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b6000613ee7603383613320565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602583613320565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400b602683613320565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b61404a81613842565b811461405557600080fd5b50565b60008151905061406781614041565b92915050565b600060208284031215614083576140826133d0565b5b600061409184828501614058565b91505092915050565b6000815190506140a98161340c565b92915050565b6000602082840312156140c5576140c46133d0565b5b60006140d38482850161409a565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614138602183613320565b9150614143826140dc565b604082019050919050565b600060208201905081810360008301526141678161412b565b9050919050565b600061417982613438565b915061418483613438565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b9576141b861393f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006141fa601b83613320565b9150614205826141c4565b602082019050919050565b60006020820190508181036000830152614229816141ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061428c602483613320565b915061429782614230565b604082019050919050565b600060208201905081810360008301526142bb8161427f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061431e602283613320565b9150614329826142c2565b604082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b600061435f82613842565b915061436a83613842565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038313600083121516156143a5576143a461393f565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156143dd576143dc61393f565b5b828201905092915050565b600081905092915050565b50565b60006144036000836143e8565b915061440e826143f3565b600082019050919050565b6000614424826143f6565b9150819050919050565b600061443982613438565b915061444483613438565b9250828210156144575761445661393f565b5b828203905092915050565b600061446d82613842565b915061447883613842565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156144b3576144b261393f565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156144eb576144ea61393f565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061452c601f83613320565b9150614537826144f6565b602082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145be602183613320565b91506145c982614562565b604082019050919050565b600060208201905081810360008301526145ed816145b1565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e1f786c3fc8454513f0f6e07e5d1fbce751ff458a6c39be7a042a6540699cd664736f6c634300080d0033
Deployed Bytecode Sourcemap
36436:13523:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41942:21;:19;:21::i;:::-;36436:13523;;;;;42560:428;;;:::i;:::-;;38103:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39134:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45331:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38380:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49236:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37700:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38791:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44249:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37660:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38289:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42255:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39311:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40159:733;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37421:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44504:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45207:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42996:106;;;;;;;;;;;;;:::i;:::-;;37756:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38486:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;42115:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36836:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48720:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43810:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39537:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37171:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43940:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38621:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44114:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37309:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38983:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49803:151;;;;;;;;;;;;;:::i;:::-;;45090:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44710:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41979:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45454:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;47429:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42560:428;42641:1;42625:13;:11;:13::i;:::-;:17;42617:26;;;;;;42672:1;42660:9;:13;42656:325;;;42718:105;42795:13;:11;:13::i;:::-;42766:26;36639:8;42767:9;42766:15;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;42718:25;;:29;;:105;;;;:::i;:::-;42690:25;:133;;;;42864:10;42843:43;;;42876:9;42843:43;;;;;;:::i;:::-;;;;;;;;42929:40;42959:9;42929:25;;:29;;:40;;;;:::i;:::-;42901:25;:68;;;;42656:325;42560:428::o;38103:83::-;38140:13;38173:5;38166:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38103:83;:::o;39134:169::-;39217:4;39234:39;39243:12;:10;:12::i;:::-;39257:7;39266:6;39234:8;:39::i;:::-;39291:4;39284:11;;39134:169;;;;:::o;45331:115::-;45389:7;45416:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45409:29;;45331:115;:::o;38380:100::-;38433:7;38460:12;;38453:19;;38380:100;:::o;49236:483::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49352:10:::1;49348:364;49376:10;;:17;;49368:5;:25;49348:364;;;49418:15;49436:10;;49447:5;49436:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49418:35;;49468:14;49502:5;49485:7;;49493:5;49485:14;;;;;;;:::i;:::-;;;;;;;;:22;;;;:::i;:::-;49468:39;;49536:31;;49526:6;:41;49522:165;;49588:28;49600:7;49609:6;49588:11;:28::i;:::-;49635:15;;;;;;;;;;;:19;;;49655:7;49664:6;49635:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49522:165;49403:309;;49395:7;;;;;:::i;:::-;;;;49348:364;;;;49236:483:::0;;;;:::o;37700:49::-;;;;;;;;;;;;;;;;;:::o;38791:184::-;38870:4;38895:5;38887:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38963:4;38956:11;;38791:184;;;;;:::o;44249:247::-;44318:7;36639:8;44345:131;:115;44423:28;:36;44452:6;44423:36;;;;;;;;;;;;;;;;44345:63;:48;44375:17;44385:6;44375:9;:17::i;:::-;44345:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;44338:150;;44249:247;;;:::o;37660:33::-;;;;:::o;38289:83::-;38330:5;38355:9;;;;;;;;;;;38348:16;;38289:83;:::o;42255:297::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42341:7:::1;;;;;;;;;;;:29;;;42371:7;42341:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42340:39;42332:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:23;42446:7;42455:1;42434:11;:23::i;:::-;42468:15;;;;;;;;;;;:22;;;42491:7;42468:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42536:7;42515:29;;;;;;;;;;;;42255:297:::0;:::o;39311:218::-;39399:4;39416:83;39425:12;:10;:12::i;:::-;39439:7;39448:50;39487:10;39448:11;:25;39460:12;:10;:12::i;:::-;39448:25;;;;;;;;;;;;;;;:34;39474:7;39448:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39416:8;:83::i;:::-;39517:4;39510:11;;39311:218;;;;:::o;40159:733::-;40221:22;40246:7;;;;;;;;;;;:17;;;40264:7;40246:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40221:51;;40287:7;;;;;;;;;;;:29;;;40317:7;40287:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40283:553;;40364:31;;40346:14;:49;40342:316;;40416:36;40428:7;40437:14;40416:11;:36::i;:::-;40471:15;;;;;;;;;;;:19;;;40491:7;40500:14;40471:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40342:316;;;40569:23;40581:7;40590:1;40569:11;:23::i;:::-;40611:15;;;;;;;;;;;:22;;;40634:7;40611:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40342:316;40283:553;;;40714:1;40693:18;40703:7;40693:9;:18::i;:::-;:22;40690:135;;;40736:23;40748:7;40757:1;40736:11;:23::i;:::-;40778:15;;;;;;;;;;;:22;;;40801:7;40778:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40690:135;40283:553;40846:38;40869:7;40879:4;40846:14;:38::i;:::-;;40210:682;40159:733;:::o;37421:33::-;;;;;;;;;;;;;:::o;44504:198::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44684:9:::1;;;;;;;;;;;44678:2;:15;;;;:::i;:::-;44648:26;:46;;;;:::i;:::-;44614:31;:80;;;;44504:198:::0;:::o;45207:116::-;45257:7;45284:31;;45277:38;;45207:116;:::o;42996:106::-;43050:44;43082:10;43050:23;:44::i;:::-;;42996:106::o;37756:31::-;;;;:::o;38486:127::-;38560:7;38587:9;:18;38597:7;38587:18;;;;;;;;;;;;;;;;38580:25;;38486: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;42115:132::-;42186:7;42212:18;:27;42231:7;42212:27;;;;;;;;;;;;;;;;42205:34;;42115:132;;;:::o;36836:40::-;;;;:::o;48720:147::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:34:::1;48840:7;48849:9;48825:14;:34::i;:::-;;48720:147:::0;;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;43810:122::-;43867:7;43894:30;43917:6;43894:22;:30::i;:::-;43887:37;;43810:122;;;:::o;38194:87::-;38233:13;38266:7;38259:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38194:87;:::o;39537:269::-;39630:4;39647:129;39656:12;:10;:12::i;:::-;39670:7;39679:96;39718:15;39679:96;;;;;;;;;;;;;;;;;:11;:25;39691:12;:10;:12::i;:::-;39679:25;;;;;;;;;;;;;;;:34;39705:7;39679:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;39647:8;:129::i;:::-;39794:4;39787:11;;39537:269;;;;:::o;37171:40::-;;;;:::o;43940:166::-;44009:7;44036:62;44071:18;:26;44090:6;44071:26;;;;;;;;;;;;;;;;44036:30;44059:6;44036:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;44029:69;;43940:166;;;:::o;38621:162::-;38678:4;38703:5;38695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38771:4;38764:11;;38621:162;;;;:::o;44114:127::-;44180:7;44207:18;:26;44226:6;44207:26;;;;;;;;;;;;;;;;44200:33;;44114:127;;;:::o;37309:75::-;;;;:::o;38983:143::-;39064:7;39091:11;:18;39103:5;39091:18;;;;;;;;;;;;;;;:27;39110:7;39091:27;;;;;;;;;;;;;;;;39084:34;;38983:143;;;;:::o;49803:151::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49856:18:::1;49877:21;49856:42;;49917:7;:5;:7::i;:::-;49909:25;;:37;49935:10;49909:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49845:109;49803:151::o:0;45090:109::-;45146:7;45173:18;;45166:25;;45090:109;:::o;44710:372::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44811:4:::1;44795:12;:20;;:45;;;;;44835:5;44819:12;:21;;44795:45;44787:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44931:9;;44915:12;:25:::0;44907:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45029:9;;45015:12;44998:41;;;;;;;;;;45062:12;45050:9;:24;;;;44710: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;41979:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42085:12:::1;42059:7;;:40;;;;;;;;;;;;;;;;;;41979:128:::0;:::o;45454:1270::-;45513:15;45530:12;45544:31;45586:29;45617:22;45641:21;45673;45696:38;45757:8;45747:18;;45784:15;;;;;;;;;;;:29;;;45814:7;45784:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45776:46;;45860:3;45833:30;;45887:1;45878:5;:10;45874:473;;45926:18;;45917:5;45909:35;45905:431;;;45992:37;46009:18;;45992:5;:9;;:37;;;;:::i;:::-;45965:64;;45905:431;;;46083:32;46143:18;;46118:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;46230:1;46118:113;;;46181:46;46208:18;;46181:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;46118:113;46083:148;;46277:43;46294:24;46277:5;:9;;:43;;;;:::i;:::-;46250:70;;46064:272;45905:431;45874:473;46381:31;46404:7;46381:22;:31::i;:::-;46357:55;;46440:31;46463:7;46440:22;:31::i;:::-;46423:48;;46498:14;:23;46513:7;46498:23;;;;;;;;;;;;;;;;46482:39;;46564:1;46548:13;:17;:52;;46599:1;46548:52;;;46568:28;46586:9;;46568:13;:17;;:28;;;;:::i;:::-;46548:52;46532:68;;46660:15;46644:13;:31;:72;;46715:1;46644:72;;;46678:34;46696:15;46678:13;:17;;:34;;;;:::i;:::-;46644:72;46611:105;;45454:1270;;;;;;;;;:::o;47429:1283::-;47475:7;47484;47493;47513:28;47544:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47513:53;;47607:1;47583:20;:25;47579:91;;47633:1;47636;47639:18;;47625:33;;;;;;;;;47579:91;47680:27;47710:18;;47680:48;;47739:15;47769;47787:9;47769:27;;47807:18;47840:14;47869:727;47886:3;47876:7;:13;:50;;;;;47906:20;47893:10;:33;47876:50;47869:727;;;47943:21;;;;;:::i;:::-;;;;48006:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47983:19;:45;47979:109;;48071:1;48049:23;;47979:109;48102:15;48120;;;;;;;;;;;:29;;;48150:19;48120:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48102:68;;48189:37;48202:14;:23;48217:7;48202:23;;;;;;;;;;;;;;;;48189:12;:37::i;:::-;48185:172;;;48251:38;48274:7;48284:4;48251:14;:38::i;:::-;48247:95;;;48314:8;;;;;:::i;:::-;;;;48247:95;48185:172;48371:12;;;;;:::i;:::-;;;;48398:18;48419:9;48398:30;;48457:10;48447:7;:20;48443:107;;;48498:36;48510:23;48522:10;48510:7;:11;;:23;;;;:::i;:::-;48498:7;:11;;:36;;;;:::i;:::-;48488:46;;48443:107;48574:10;48564:20;;47928:668;;47869:727;;;48627:19;48606:18;:40;;;;48665:10;48677:6;48685:18;;48657:47;;;;;;;;;;;;47429: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;39814:337::-;39924:1;39907:19;;:5;:19;;;39899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40005:1;39986:21;;:7;:21;;;39978:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40089:6;40059:11;:18;40071:5;40059:18;;;;;;;;;;;;;;;:27;40078:7;40059:27;;;;;;;;;;;;;;;:36;;;;40127:7;40111:32;;40120:5;40111:32;;;40136:6;40111:32;;;;;;:::i;:::-;;;;;;;;39814:337;;;:::o;46972:449::-;47050:22;47075:18;47085:7;47075:9;:18::i;:::-;47050:43;;47121:14;47108:10;:27;47104:310;;;47152:18;47173:30;47188:14;47173:10;:14;;:30;;;;:::i;:::-;47152:51;;47218:26;47224:7;47233:10;47218:5;:26::i;:::-;47137:119;47104:310;;;47279:14;47266:10;:27;47262:152;;;47310:18;47331:30;47350:10;47331:14;:18;;:30;;;;:::i;:::-;47310:51;;47376:26;47382:7;47391:10;47376:5;:26::i;:::-;47295:119;47262:152;47104:310;47039:382;46972:449;;:::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;48875:352::-;48957:4;48974:14;48991:32;49015:7;48991:23;:32::i;:::-;48974:49;;49047:1;49038:6;:10;49034:163;;;49091:15;49065:14;:23;49080:7;49065:23;;;;;;;;;;;;;;;:41;;;;49149:9;49126:33;;49132:7;49126:33;;;49141:6;49126:33;;;;;;:::i;:::-;;;;;;;;49181:4;49174:11;;;;;49034:163;49214:5;49207:12;;;48875:352;;;;;:::o;43110:692::-;43183:7;43203:29;43235:28;43258:4;43235:22;:28::i;:::-;43203:60;;43302:1;43278:21;:25;43274:502;;;43347:51;43376:21;43347:18;:24;43366:4;43347:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;43320:18;:24;43339:4;43320:24;;;;;;;;;;;;;;;:78;;;;43436:4;43418:46;;;43442:21;43418:46;;;;;;:::i;:::-;;;;;;;;43480:12;43497:4;:9;;43515:21;43544:4;43497:56;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43479:74;;;43573:7;43568:154;;43628:51;43657:21;43628:18;:24;43647:4;43628:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;43601:18;:24;43620:4;43601:24;;;;;;;;;;;;;;;:78;;;;43705:1;43698:8;;;;;;43568:154;43743:21;43736:28;;;;;;43274:502;43793:1;43786:8;;;43110: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;46732:232::-;46799:4;46836:15;46820:13;:31;46816:76;;;46875:5;46868:12;;;;46816:76;46947:9;;46909:34;46929:13;46909:15;:19;;:34;;;;:::i;:::-;:47;;46902:54;;46732:232;;;;:::o;40900:472::-;41003:1;40984:21;;:7;:21;;;40976:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41067:24;41084:6;41067:12;;:16;;:24;;;;:::i;:::-;41052:12;:39;;;;41123:30;41146:6;41123:9;:18;41133:7;41123:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;41102:9;:18;41112:7;41102:18;;;;;;;;;;;;;;;:51;;;;41190:7;41169:37;;41186:1;41169:37;;;41199:6;41169:37;;;;;;:::i;:::-;;;;;;;;41257:107;41309:54;41310:37;41340:6;41310:25;;:29;;:37;;;;:::i;:::-;41309:52;:54::i;:::-;41257:28;:37;41286:7;41257:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;41217:28;:37;41246:7;41217:37;;;;;;;;;;;;;;;:147;;;;40900:472;;:::o;41380:516::-;41483:1;41464:21;;:7;:21;;;41456:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41557:68;41580:6;41557:68;;;;;;;;;;;;;;;;;:9;:18;41567:7;41557:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;41536:9;:18;41546:7;41536:18;;;;;;;;;;;;;;;:89;;;;41651:24;41668:6;41651:12;;:16;;:24;;;;:::i;:::-;41636:12;:39;;;;41717:1;41691:37;;41700:7;41691:37;;;41721:6;41691:37;;;;;;:::i;:::-;;;;;;;;41781:107;41833:54;41834:37;41864:6;41834:25;;:29;;:37;;;;:::i;:::-;41833:52;:54::i;:::-;41781:28;:37;41810:7;41781:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;41741:28;:37;41770:7;41741:37;;;;;;;;;;;;;;;:147;;;;41380: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;1601:117;1710:1;1707;1700: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:117::-;3955:1;3952;3945:12;3969:117;4078:1;4075;4068:12;4092:117;4201:1;4198;4191:12;4232:568;4305:8;4315:6;4365:3;4358:4;4350:6;4346:17;4342:27;4332:122;;4373:79;;:::i;:::-;4332:122;4486:6;4473:20;4463:30;;4516:18;4508:6;4505:30;4502:117;;;4538:79;;:::i;:::-;4502:117;4652:4;4644:6;4640:17;4628:29;;4706:3;4698:4;4690:6;4686:17;4676:8;4672:32;4669:41;4666:128;;;4713:79;;:::i;:::-;4666:128;4232:568;;;;;:::o;4823:::-;4896:8;4906:6;4956:3;4949:4;4941:6;4937:17;4933:27;4923:122;;4964:79;;:::i;:::-;4923:122;5077:6;5064:20;5054:30;;5107:18;5099:6;5096:30;5093:117;;;5129:79;;:::i;:::-;5093:117;5243:4;5235:6;5231:17;5219:29;;5297:3;5289:4;5281:6;5277:17;5267:8;5263:32;5260:41;5257:128;;;5304:79;;:::i;:::-;5257:128;4823:568;;;;;:::o;5397:934::-;5519:6;5527;5535;5543;5592:2;5580:9;5571:7;5567:23;5563:32;5560:119;;;5598:79;;:::i;:::-;5560:119;5746:1;5735:9;5731:17;5718:31;5776:18;5768:6;5765:30;5762:117;;;5798:79;;:::i;:::-;5762:117;5911:80;5983:7;5974:6;5963:9;5959:22;5911:80;:::i;:::-;5893:98;;;;5689:312;6068:2;6057:9;6053:18;6040:32;6099:18;6091:6;6088:30;6085:117;;;6121:79;;:::i;:::-;6085:117;6234:80;6306:7;6297:6;6286:9;6282:22;6234:80;:::i;:::-;6216:98;;;;6011:313;5397:934;;;;;;;:::o;6337:329::-;6396:6;6445:2;6433:9;6424:7;6420:23;6416:32;6413:119;;;6451:79;;:::i;:::-;6413:119;6571:1;6596:53;6641:7;6632:6;6621:9;6617:22;6596:53;:::i;:::-;6586:63;;6542:117;6337:329;;;;:::o;6672:619::-;6749:6;6757;6765;6814:2;6802:9;6793:7;6789:23;6785:32;6782:119;;;6820:79;;:::i;:::-;6782:119;6940:1;6965:53;7010:7;7001:6;6990:9;6986:22;6965:53;:::i;:::-;6955:63;;6911:117;7067:2;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7038:118;7195:2;7221:53;7266:7;7257:6;7246:9;7242:22;7221:53;:::i;:::-;7211:63;;7166:118;6672:619;;;;;:::o;7297:86::-;7332:7;7372:4;7365:5;7361:16;7350:27;;7297:86;;;:::o;7389:112::-;7472:22;7488:5;7472:22;:::i;:::-;7467:3;7460:35;7389:112;;:::o;7507:214::-;7596:4;7634:2;7623:9;7619:18;7611:26;;7647:67;7711:1;7700:9;7696:17;7687:6;7647:67;:::i;:::-;7507:214;;;;:::o;7727:329::-;7786:6;7835:2;7823:9;7814:7;7810:23;7806:32;7803:119;;;7841:79;;:::i;:::-;7803:119;7961:1;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7932:117;7727:329;;;;:::o;8062:104::-;8107:7;8136:24;8154:5;8136:24;:::i;:::-;8125:35;;8062:104;;;:::o;8172:138::-;8253:32;8279:5;8253:32;:::i;:::-;8246:5;8243:43;8233:71;;8300:1;8297;8290:12;8233:71;8172:138;:::o;8316:155::-;8370:5;8408:6;8395:20;8386:29;;8424:41;8459:5;8424:41;:::i;:::-;8316:155;;;;:::o;8477:116::-;8547:21;8562:5;8547:21;:::i;:::-;8540:5;8537:32;8527:60;;8583:1;8580;8573:12;8527:60;8477:116;:::o;8599:133::-;8642:5;8680:6;8667:20;8658:29;;8696:30;8720:5;8696:30;:::i;:::-;8599:133;;;;:::o;8738:484::-;8811:6;8819;8868:2;8856:9;8847:7;8843:23;8839:32;8836:119;;;8874:79;;:::i;:::-;8836:119;8994:1;9019:61;9072:7;9063:6;9052:9;9048:22;9019:61;:::i;:::-;9009:71;;8965:125;9129:2;9155:50;9197:7;9188:6;9177:9;9173:22;9155:50;:::i;:::-;9145:60;;9100:115;8738:484;;;;;:::o;9228:118::-;9315:24;9333:5;9315:24;:::i;:::-;9310:3;9303:37;9228:118;;:::o;9352:222::-;9445:4;9483:2;9472:9;9468:18;9460:26;;9496:71;9564:1;9553:9;9549:17;9540:6;9496:71;:::i;:::-;9352:222;;;;:::o;9580:474::-;9648:6;9656;9705:2;9693:9;9684:7;9680:23;9676:32;9673:119;;;9711:79;;:::i;:::-;9673:119;9831:1;9856:53;9901:7;9892:6;9881:9;9877:22;9856:53;:::i;:::-;9846:63;;9802:117;9958:2;9984:53;10029:7;10020:6;10009:9;10005:22;9984:53;:::i;:::-;9974:63;;9929:118;9580:474;;;;;:::o;10060:76::-;10096:7;10125:5;10114:16;;10060:76;;;:::o;10142:115::-;10227:23;10244:5;10227:23;:::i;:::-;10222:3;10215:36;10142:115;;:::o;10263:989::-;10548:4;10586:3;10575:9;10571:19;10563:27;;10600:71;10668:1;10657:9;10653:17;10644:6;10600:71;:::i;:::-;10681:70;10747:2;10736:9;10732:18;10723:6;10681:70;:::i;:::-;10761;10827:2;10816:9;10812:18;10803:6;10761:70;:::i;:::-;10841:72;10909:2;10898:9;10894:18;10885:6;10841:72;:::i;:::-;10923:73;10991:3;10980:9;10976:19;10967:6;10923:73;:::i;:::-;11006;11074:3;11063:9;11059:19;11050:6;11006:73;:::i;:::-;11089;11157:3;11146:9;11142:19;11133:6;11089:73;:::i;:::-;11172;11240:3;11229:9;11225:19;11216:6;11172:73;:::i;:::-;10263:989;;;;;;;;;;;:::o;11258:442::-;11407:4;11445:2;11434:9;11430:18;11422:26;;11458:71;11526:1;11515:9;11511:17;11502:6;11458:71;:::i;:::-;11539:72;11607:2;11596:9;11592:18;11583:6;11539:72;:::i;:::-;11621;11689:2;11678:9;11674:18;11665:6;11621:72;:::i;:::-;11258:442;;;;;;:::o;11706:180::-;11754:77;11751:1;11744:88;11851:4;11848:1;11841:15;11875:4;11872:1;11865:15;11892:180;11940:77;11937:1;11930:88;12037:4;12034:1;12027:15;12061:4;12058:1;12051:15;12078:185;12118:1;12135:20;12153:1;12135:20;:::i;:::-;12130:25;;12169:20;12187:1;12169:20;:::i;:::-;12164:25;;12208:1;12198:35;;12213:18;;:::i;:::-;12198:35;12255:1;12252;12248:9;12243:14;;12078:185;;;;:::o;12269:180::-;12317:77;12314:1;12307:88;12414:4;12411:1;12404:15;12438:4;12435:1;12428:15;12455:320;12499:6;12536:1;12530:4;12526:12;12516:22;;12583:1;12577:4;12573:12;12604:18;12594:81;;12660:4;12652:6;12648:17;12638:27;;12594:81;12722:2;12714:6;12711:14;12691:18;12688:38;12685:84;;12741:18;;:::i;:::-;12685:84;12506:269;12455:320;;;:::o;12781:143::-;12838:5;12869:6;12863:13;12854:22;;12885:33;12912:5;12885:33;:::i;:::-;12781:143;;;;:::o;12930:351::-;13000:6;13049:2;13037:9;13028:7;13024:23;13020:32;13017:119;;;13055:79;;:::i;:::-;13017:119;13175:1;13200:64;13256:7;13247:6;13236:9;13232:22;13200:64;:::i;:::-;13190:74;;13146:128;12930:351;;;;:::o;13287:182::-;13427:34;13423:1;13415:6;13411:14;13404:58;13287:182;:::o;13475:366::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:419::-;14013:4;14051:2;14040:9;14036:18;14028:26;;14100:9;14094:4;14090:20;14086:1;14075:9;14071:17;14064:47;14128:131;14254:4;14128:131;:::i;:::-;14120:139;;13847:419;;;:::o;14272:180::-;14320:77;14317:1;14310:88;14417:4;14414:1;14407:15;14441:4;14438:1;14431:15;14458:348;14498:7;14521:20;14539:1;14521:20;:::i;:::-;14516:25;;14555:20;14573:1;14555:20;:::i;:::-;14550:25;;14743:1;14675:66;14671:74;14668:1;14665:81;14660:1;14653:9;14646:17;14642:105;14639:131;;;14750:18;;:::i;:::-;14639:131;14798:1;14795;14791:9;14780:20;;14458:348;;;;:::o;14812:332::-;14933:4;14971:2;14960:9;14956:18;14948:26;;14984:71;15052:1;15041:9;15037:17;15028:6;14984:71;:::i;:::-;15065:72;15133:2;15122:9;15118:18;15109:6;15065:72;:::i;:::-;14812:332;;;;;:::o;15150:233::-;15189:3;15212:24;15230:5;15212:24;:::i;:::-;15203:33;;15258:66;15251:5;15248:77;15245:103;;15328:18;;:::i;:::-;15245:103;15375:1;15368:5;15364:13;15357:20;;15150:233;;;:::o;15389:227::-;15529:34;15525:1;15517:6;15513:14;15506:58;15598:10;15593:2;15585:6;15581:15;15574:35;15389:227;:::o;15622:366::-;15764:3;15785:67;15849:2;15844:3;15785:67;:::i;:::-;15778:74;;15861:93;15950:3;15861:93;:::i;:::-;15979:2;15974:3;15970:12;15963:19;;15622:366;;;:::o;15994:419::-;16160:4;16198:2;16187:9;16183:18;16175:26;;16247:9;16241:4;16237:20;16233:1;16222:9;16218:17;16211:47;16275:131;16401:4;16275:131;:::i;:::-;16267:139;;15994:419;;;:::o;16419:137::-;16473:5;16504:6;16498:13;16489:22;;16520:30;16544:5;16520:30;:::i;:::-;16419:137;;;;:::o;16562:345::-;16629:6;16678:2;16666:9;16657:7;16653:23;16649:32;16646:119;;;16684:79;;:::i;:::-;16646:119;16804:1;16829:61;16882:7;16873:6;16862:9;16858:22;16829:61;:::i;:::-;16819:71;;16775:125;16562:345;;;;:::o;16913:226::-;17053:34;17049:1;17041:6;17037:14;17030:58;17122:9;17117:2;17109:6;17105:15;17098:34;16913:226;:::o;17145:366::-;17287:3;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17384:93;17473:3;17384:93;:::i;:::-;17502:2;17497:3;17493:12;17486:19;;17145:366;;;:::o;17517:419::-;17683:4;17721:2;17710:9;17706:18;17698:26;;17770:9;17764:4;17760:20;17756:1;17745:9;17741:17;17734:47;17798:131;17924:4;17798:131;:::i;:::-;17790:139;;17517:419;;;:::o;17942:102::-;17984:8;18031:5;18028:1;18024:13;18003:34;;17942:102;;;:::o;18050:848::-;18111:5;18118:4;18142:6;18133:15;;18166:5;18157:14;;18180:712;18201:1;18191:8;18188:15;18180:712;;;18296:4;18291:3;18287:14;18281:4;18278:24;18275:50;;;18305:18;;:::i;:::-;18275:50;18355:1;18345:8;18341:16;18338:451;;;18770:4;18763:5;18759:16;18750:25;;18338:451;18820:4;18814;18810:15;18802:23;;18850:32;18873:8;18850:32;:::i;:::-;18838:44;;18180:712;;;18050:848;;;;;;;:::o;18904:1073::-;18958:5;19149:8;19139:40;;19170:1;19161:10;;19172:5;;19139:40;19198:4;19188:36;;19215:1;19206:10;;19217:5;;19188:36;19284:4;19332:1;19327:27;;;;19368:1;19363:191;;;;19277:277;;19327:27;19345:1;19336:10;;19347:5;;;19363:191;19408:3;19398:8;19395:17;19392:43;;;19415:18;;:::i;:::-;19392:43;19464:8;19461:1;19457:16;19448:25;;19499:3;19492:5;19489:14;19486:40;;;19506:18;;:::i;:::-;19486:40;19539:5;;;19277:277;;19663:2;19653:8;19650:16;19644:3;19638:4;19635:13;19631:36;19613:2;19603:8;19600:16;19595:2;19589:4;19586:12;19582:35;19566:111;19563:246;;;19719:8;19713:4;19709:19;19700:28;;19754:3;19747:5;19744:14;19741:40;;;19761:18;;:::i;:::-;19741:40;19794:5;;19563:246;19834:42;19872:3;19862:8;19856:4;19853:1;19834:42;:::i;:::-;19819:57;;;;19908:4;19903:3;19899:14;19892:5;19889:25;19886:51;;;19917:18;;:::i;:::-;19886:51;19966:4;19959:5;19955:16;19946:25;;18904:1073;;;;;;:::o;19983:281::-;20041:5;20065:23;20083:4;20065:23;:::i;:::-;20057:31;;20109:25;20125:8;20109:25;:::i;:::-;20097:37;;20153:104;20190:66;20180:8;20174:4;20153:104;:::i;:::-;20144:113;;19983:281;;;;:::o;20270:238::-;20410:34;20406:1;20398:6;20394:14;20387:58;20479:21;20474:2;20466:6;20462:15;20455:46;20270:238;:::o;20514:366::-;20656:3;20677:67;20741:2;20736:3;20677:67;:::i;:::-;20670:74;;20753:93;20842:3;20753:93;:::i;:::-;20871:2;20866:3;20862:12;20855:19;;20514:366;;;:::o;20886:419::-;21052:4;21090:2;21079:9;21075:18;21067:26;;21139:9;21133:4;21129:20;21125:1;21114:9;21110:17;21103:47;21167:131;21293:4;21167:131;:::i;:::-;21159:139;;20886:419;;;:::o;21311:224::-;21451:34;21447:1;21439:6;21435:14;21428:58;21520:7;21515:2;21507:6;21503:15;21496:32;21311:224;:::o;21541:366::-;21683:3;21704:67;21768:2;21763:3;21704:67;:::i;:::-;21697:74;;21780:93;21869:3;21780:93;:::i;:::-;21898:2;21893:3;21889:12;21882:19;;21541:366;;;:::o;21913:419::-;22079:4;22117:2;22106:9;22102:18;22094:26;;22166:9;22160:4;22156:20;22152:1;22141:9;22137:17;22130:47;22194:131;22320:4;22194:131;:::i;:::-;22186:139;;21913:419;;;:::o;22338:225::-;22478:34;22474:1;22466:6;22462:14;22455:58;22547:8;22542:2;22534:6;22530:15;22523:33;22338:225;:::o;22569:366::-;22711:3;22732:67;22796:2;22791:3;22732:67;:::i;:::-;22725:74;;22808:93;22897:3;22808:93;:::i;:::-;22926:2;22921:3;22917:12;22910:19;;22569:366;;;:::o;22941:419::-;23107:4;23145:2;23134:9;23130:18;23122:26;;23194:9;23188:4;23184:20;23180:1;23169:9;23165:17;23158:47;23222:131;23348:4;23222:131;:::i;:::-;23214:139;;22941:419;;;:::o;23366:120::-;23438:23;23455:5;23438:23;:::i;:::-;23431:5;23428:34;23418:62;;23476:1;23473;23466:12;23418:62;23366:120;:::o;23492:141::-;23548:5;23579:6;23573:13;23564:22;;23595:32;23621:5;23595:32;:::i;:::-;23492:141;;;;:::o;23639:349::-;23708:6;23757:2;23745:9;23736:7;23732:23;23728:32;23725:119;;;23763:79;;:::i;:::-;23725:119;23883:1;23908:63;23963:7;23954:6;23943:9;23939:22;23908:63;:::i;:::-;23898:73;;23854:127;23639:349;;;;:::o;23994:143::-;24051:5;24082:6;24076:13;24067:22;;24098:33;24125:5;24098:33;:::i;:::-;23994:143;;;;:::o;24143:351::-;24213:6;24262:2;24250:9;24241:7;24237:23;24233:32;24230:119;;;24268:79;;:::i;:::-;24230:119;24388:1;24413:64;24469:7;24460:6;24449:9;24445:22;24413:64;:::i;:::-;24403:74;;24359:128;24143:351;;;;:::o;24500:220::-;24640:34;24636:1;24628:6;24624:14;24617:58;24709:3;24704:2;24696:6;24692:15;24685:28;24500:220;:::o;24726:366::-;24868:3;24889:67;24953:2;24948:3;24889:67;:::i;:::-;24882:74;;24965:93;25054:3;24965:93;:::i;:::-;25083:2;25078:3;25074:12;25067:19;;24726:366;;;:::o;25098:419::-;25264:4;25302:2;25291:9;25287:18;25279:26;;25351:9;25345:4;25341:20;25337:1;25326:9;25322:17;25315:47;25379:131;25505:4;25379:131;:::i;:::-;25371:139;;25098:419;;;:::o;25523:305::-;25563:3;25582:20;25600:1;25582:20;:::i;:::-;25577:25;;25616:20;25634:1;25616:20;:::i;:::-;25611:25;;25770:1;25702:66;25698:74;25695:1;25692:81;25689:107;;;25776:18;;:::i;:::-;25689:107;25820:1;25817;25813:9;25806:16;;25523:305;;;;:::o;25834:177::-;25974:29;25970:1;25962:6;25958:14;25951:53;25834:177;:::o;26017:366::-;26159:3;26180:67;26244:2;26239:3;26180:67;:::i;:::-;26173:74;;26256:93;26345:3;26256:93;:::i;:::-;26374:2;26369:3;26365:12;26358:19;;26017:366;;;:::o;26389:419::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:223::-;26954:34;26950:1;26942:6;26938:14;26931:58;27023:6;27018:2;27010:6;27006:15;26999:31;26814:223;:::o;27043:366::-;27185:3;27206:67;27270:2;27265:3;27206:67;:::i;:::-;27199:74;;27282:93;27371:3;27282:93;:::i;:::-;27400:2;27395:3;27391:12;27384:19;;27043:366;;;:::o;27415:419::-;27581:4;27619:2;27608:9;27604:18;27596:26;;27668:9;27662:4;27658:20;27654:1;27643:9;27639:17;27632:47;27696:131;27822:4;27696:131;:::i;:::-;27688:139;;27415:419;;;:::o;27840:221::-;27980:34;27976:1;27968:6;27964:14;27957:58;28049:4;28044:2;28036:6;28032:15;28025:29;27840:221;:::o;28067:366::-;28209:3;28230:67;28294:2;28289:3;28230:67;:::i;:::-;28223:74;;28306:93;28395:3;28306:93;:::i;:::-;28424:2;28419:3;28415:12;28408:19;;28067:366;;;:::o;28439:419::-;28605:4;28643:2;28632:9;28628:18;28620:26;;28692:9;28686:4;28682:20;28678:1;28667:9;28663:17;28656:47;28720:131;28846:4;28720:131;:::i;:::-;28712:139;;28439:419;;;:::o;28864:525::-;28903:3;28922:19;28939:1;28922:19;:::i;:::-;28917:24;;28955:19;28972:1;28955:19;:::i;:::-;28950:24;;29143:1;29075:66;29071:74;29068:1;29064:82;29059:1;29056;29052:9;29045:17;29041:106;29038:132;;;29150:18;;:::i;:::-;29038:132;29330:1;29262:66;29258:74;29255:1;29251:82;29247:1;29244;29240:9;29236:98;29233:124;;;29337:18;;:::i;:::-;29233:124;29381:1;29378;29374:9;29367:16;;28864:525;;;;:::o;29395:147::-;29496:11;29533:3;29518:18;;29395:147;;;;:::o;29548:114::-;;:::o;29668:398::-;29827:3;29848:83;29929:1;29924:3;29848:83;:::i;:::-;29841:90;;29940:93;30029:3;29940:93;:::i;:::-;30058:1;30053:3;30049:11;30042:18;;29668:398;;;:::o;30072:379::-;30256:3;30278:147;30421:3;30278:147;:::i;:::-;30271:154;;30442:3;30435:10;;30072:379;;;:::o;30457:191::-;30497:4;30517:20;30535:1;30517:20;:::i;:::-;30512:25;;30551:20;30569:1;30551:20;:::i;:::-;30546:25;;30590:1;30587;30584:8;30581:34;;;30595:18;;:::i;:::-;30581:34;30640:1;30637;30633:9;30625:17;;30457:191;;;;:::o;30654:527::-;30693:4;30713:19;30730:1;30713:19;:::i;:::-;30708:24;;30746:19;30763:1;30746:19;:::i;:::-;30741:24;;30935:1;30867:66;30863:74;30860:1;30856:82;30851:1;30848;30844:9;30837:17;30833:106;30830:132;;;30942:18;;:::i;:::-;30830:132;31121:1;31053:66;31049:74;31046:1;31042:82;31038:1;31035;31031:9;31027:98;31024:124;;;31128:18;;:::i;:::-;31024:124;31173:1;31170;31166:9;31158:17;;30654:527;;;;:::o;31187:181::-;31327:33;31323:1;31315:6;31311:14;31304:57;31187:181;:::o;31374:366::-;31516:3;31537:67;31601:2;31596:3;31537:67;:::i;:::-;31530:74;;31613:93;31702:3;31613:93;:::i;:::-;31731:2;31726:3;31722:12;31715:19;;31374:366;;;:::o;31746:419::-;31912:4;31950:2;31939:9;31935:18;31927:26;;31999:9;31993:4;31989:20;31985:1;31974:9;31970:17;31963:47;32027:131;32153:4;32027:131;:::i;:::-;32019:139;;31746:419;;;:::o;32171:220::-;32311:34;32307:1;32299:6;32295:14;32288:58;32380:3;32375:2;32367:6;32363:15;32356:28;32171:220;:::o;32397:366::-;32539:3;32560:67;32624:2;32619:3;32560:67;:::i;:::-;32553:74;;32636:93;32725:3;32636:93;:::i;:::-;32754:2;32749:3;32745:12;32738:19;;32397:366;;;:::o;32769:419::-;32935:4;32973:2;32962:9;32958:18;32950:26;;33022:9;33016:4;33012:20;33008:1;32997:9;32993:17;32986:47;33050:131;33176:4;33050:131;:::i;:::-;33042:139;;32769:419;;;:::o
Swarm Source
ipfs://fbf3c0a2f922a44ba9eb856abc926329c21e799976154e846190ace7458a37b5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.