Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 BOOM
Holders
84
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000354806638 BOOMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Boomcoin
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* twitter: twitter.com/hankhillforreal website: boomcoin.kingofthecryptohill.com */ pragma solidity 0.8.19; // SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ 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); } interface IERC20Metadata is IERC20{ /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { 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); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } 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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } } contract TokenHandler is Ownable { function sendTokenToOwner(address token) external onlyOwner { if(IERC20(token).balanceOf(address(this)) > 0){ SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this))); } } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IWETH { function deposit() external payable; } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable; function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract Boomcoin is ERC20, Ownable { mapping (address => bool) public exemptFromFees; mapping (address => bool) public exemptFromLimits; bool public tradingActive; mapping (address => bool) public isAMMPair; uint256 public maxTransaction; uint256 public maxWallet; address public operationsAddress; address public devAddress; address public reservesAddress; address public influencerAddress; uint256 public buyTotalTax; uint256 public buyOperationsTax; uint256 public buyLiquidityTax; uint256 public buyInfluencerTax; uint256 public buyDevTax; uint256 public sellTotalTax; uint256 public sellOperationsTax; uint256 public sellLiquidityTax; uint256 public sellDevTax; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForDev; uint256 public tokensForInfluencer; mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; bool public limitsInEffect = true; bool private swapping; uint256 public swapTokensAtAmt; address public lpPair; IDexRouter public dexRouter; IERC20Metadata public eth; IWETH public WETH; uint256 public constant FEE_DIVISOR = 10000; // events event UpdatedMaxTransaction(uint256 newMax); event UpdatedMaxWallet(uint256 newMax); event SetExemptFromFees(address _address, bool _isExempt); event SetExemptFromLimits(address _address, bool _isExempt); event RemovedLimits(); event UpdatedBuyTax(uint256 newAmt); event UpdatedSellTax(uint256 newAmt); // constructor constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { _mint(msg.sender, 1_000_000_000 * 1e18); uint256 _totalSupply = totalSupply(); address _v2Router; // @dev assumes WETH pair if(block.chainid == 1){ _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if(block.chainid == 5){ _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if(block.chainid == 97){ _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if(block.chainid == 42161){ _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; } else { revert("Chain not configured"); } dexRouter = IDexRouter(_v2Router); maxTransaction = _totalSupply * 1 / 1000; maxWallet = _totalSupply * 2/ 100; swapTokensAtAmt = _totalSupply * 25 / 100000; operationsAddress = 0xa56d8E550db019E34Fc16b5B8317150F97033dC0; devAddress = 0xC8704FE12f98035ce7F55a93D51153F5318E0854; reservesAddress = 0x9673C4b6Ad428a651B583FC57c4f5Ae58cf73a33; influencerAddress = 0xC8704FE12f98035ce7F55a93D51153F5318E0854; buyOperationsTax = 150; buyLiquidityTax = 100; buyDevTax = 100; buyInfluencerTax = 100; buyTotalTax = buyOperationsTax + buyLiquidityTax + buyDevTax + buyInfluencerTax; sellOperationsTax = 200; sellLiquidityTax = 0; sellDevTax = 250; sellTotalTax = sellOperationsTax + sellLiquidityTax + sellDevTax; lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH()); WETH = IWETH(dexRouter.WETH()); isAMMPair[lpPair] = true; exemptFromLimits[lpPair] = true; exemptFromLimits[msg.sender] = true; exemptFromLimits[address(this)] = true; exemptFromLimits[devAddress] = true; exemptFromLimits[address(dexRouter)] = true; exemptFromFees[msg.sender] = true; exemptFromFees[address(this)] = true; exemptFromFees[devAddress] = true; exemptFromFees[address(dexRouter)] = true; _approve(address(msg.sender), address(dexRouter), _totalSupply); _approve(address(this), address(dexRouter), type(uint256).max); super._transfer(msg.sender, reservesAddress, _totalSupply * 10 / 100); } receive() external payable {} function _transfer( address from, address to, uint256 amount ) internal virtual override { checkLimits(from, to, amount); if(!exemptFromFees[from] && !exemptFromFees[to]){ amount -= handleTax(from, to, amount); } super._transfer(from,to,amount); } function checkLimits(address from, address to, uint256 amount) internal { if(!exemptFromFees[from] && !exemptFromFees[to]){ require(tradingActive, "Trading not active"); } if(limitsInEffect){ if (transferDelayEnabled){ if (to != address(dexRouter) && !isAMMPair[to]){ require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "Transfer Delay enabled."); _holderLastTransferBlock[tx.origin] = block.number; _holderLastTransferBlock[to] = block.number; } } // buy if (isAMMPair[from] && !exemptFromLimits[to]) { require(amount <= maxTransaction, "Buy transfer amount exceeded."); require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } // sell else if (isAMMPair[to] && !exemptFromLimits[from]) { require(amount <= maxTransaction, "Sell transfer amount exceeded."); } else if(!exemptFromLimits[to]) { require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet"); } } } function handleTax(address from, address to, uint256 amount) internal returns (uint256){ if(balanceOf(address(this)) >= swapTokensAtAmt && !swapping && isAMMPair[to]) { swapping = true; swapBack(); swapping = false; } uint256 tax = 0; // on sell if (isAMMPair[to] && sellTotalTax > 0){ tax = amount * sellTotalTax / FEE_DIVISOR; tokensForLiquidity += tax * sellLiquidityTax / sellTotalTax; tokensForOperations += tax * sellOperationsTax / sellTotalTax; tokensForDev += tax * sellDevTax / sellTotalTax; } // on buy else if(isAMMPair[from] && buyTotalTax > 0) { tax = amount * buyTotalTax / FEE_DIVISOR; tokensForOperations += tax * buyOperationsTax / buyTotalTax; tokensForLiquidity += tax * buyLiquidityTax / buyTotalTax; tokensForDev += tax * buyDevTax / buyTotalTax; tokensForInfluencer += tax * buyInfluencerTax / buyTotalTax; } if(tax > 0){ super._transfer(from, address(this), tax); } return tax; } function swapTokensForETH(uint256 tokenAmt) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmt, 0, path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev + tokensForInfluencer; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmt * 40){ contractBalance = swapTokensAtAmt * 40; } if(tokensForLiquidity > 0){ uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap; super._transfer(address(this), lpPair, liquidityTokens); try ILpPair(lpPair).sync(){} catch {} contractBalance -= liquidityTokens; totalTokensToSwap -= tokensForLiquidity; tokensForLiquidity = 0; } if(totalTokensToSwap > 0 && contractBalance > 0){ swapTokensForETH(contractBalance); uint256 ethBalance = address(this).balance; uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap; uint256 ethForInfluencer = ethBalance * tokensForInfluencer / totalTokensToSwap; bool success; if(ethForDev > 0){ (success, ) = devAddress.call{value: ethForDev}(""); tokensForDev = 0; } if(ethForInfluencer > 0){ (success, ) = influencerAddress.call{value: ethForInfluencer}(""); tokensForInfluencer = 0; } if(address(this).balance > 0){ (success, ) = operationsAddress.call{value: address(this).balance}(""); tokensForOperations = 0; } } } // owner functions function increaseMaxTxnSetAmount() external onlyOwner { maxTransaction = totalSupply() * 5 / 1000; } function increaseMaxTxnToMaxWallet() external onlyOwner { maxTransaction = maxWallet; } function setExemptFromFees(address _address, bool _isExempt) external onlyOwner { require(_address != address(0), "Zero Address"); exemptFromFees[_address] = _isExempt; emit SetExemptFromFees(_address, _isExempt); } function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner { require(_address != address(0), "Zero Address"); if(!_isExempt){ require(_address != lpPair, "Cannot remove pair"); } exemptFromLimits[_address] = _isExempt; emit SetExemptFromLimits(_address, _isExempt); } function updateMaxTransaction(uint256 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low"); maxTransaction = newNumInTokens * (10**decimals()); emit UpdatedMaxTransaction(maxTransaction); } function updateMaxWallet(uint256 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low"); maxWallet = newNumInTokens * (10**decimals()); emit UpdatedMaxWallet(maxWallet); } function updateBuyTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _devTax, uint _influencerTax) external onlyOwner { buyOperationsTax = _operationsTax; buyLiquidityTax = _liquidityTax; buyDevTax = _devTax; buyInfluencerTax = _influencerTax; buyTotalTax = buyOperationsTax + buyLiquidityTax + buyDevTax + buyInfluencerTax; require(buyTotalTax <= 499, "Keep tax below 5%"); emit UpdatedBuyTax(buyTotalTax); } function updateSellTax(uint256 _operationsTax, uint256 _liquidityTax, uint256 _devTax) external onlyOwner { sellOperationsTax = _operationsTax; sellLiquidityTax = _liquidityTax; sellDevTax = _devTax; sellTotalTax = sellOperationsTax + sellLiquidityTax + sellDevTax; require(sellTotalTax <= 499, "Keep tax below 5%"); emit UpdatedSellTax(sellTotalTax); } function enableTrading() external onlyOwner { tradingActive = true; } function removeLimits() external onlyOwner { limitsInEffect = false; transferDelayEnabled = false; maxTransaction = totalSupply(); maxWallet = totalSupply(); emit RemovedLimits(); } function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function rescueEth(address toAddress) external onlyOwner { require(address(this).balance > 0, "Contract has zero ETH"); (bool sent, bytes memory data) = toAddress.call{value: address(this).balance}(""); require(sent, "Failed to send Ether."); } function rescueTokens(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance); } function updateOperationsAddress(address _address) external onlyOwner { require(_address != address(0), "zero address"); operationsAddress = _address; } function updateDevAddress(address _address) external onlyOwner { require(_address != address(0), "zero address"); devAddress = _address; } function updateInfluencerAddress(address _address) external onlyOwner { require(_address != address(0), "zero address"); influencerAddress = _address; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyInfluencerTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"increaseMaxTxnSetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increaseMaxTxnToMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"influencerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"}],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservesAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForInfluencer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_influencerTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateInfluencerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"},{"internalType":"uint256","name":"_devTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001601e60006101000a81548160ff0219169083151502179055506001601e60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040516200790d3803806200790d83398181016040528101906200006d919062001445565b8181816003908162000080919062001715565b50806004908162000092919062001715565b5050506000620000a762000cc760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000164336b033b2e3c9fd0803ce800000062000ccf60201b60201c565b60006200017662000e3c60201b60201c565b9050600060014603620001a057737a250d5630b4cf539739df2c5dacb4c659f2488d905062000253565b60054603620001c657737a250d5630b4cf539739df2c5dacb4c659f2488d905062000252565b60614603620001ec5773d99d1c33f9fc3444f8101754abc46c52416550d1905062000251565b61a4b146036200021357731b02da8cb0d097eb8d57a175b88c7d8b47997506905062000250565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000247906200185d565b60405180910390fd5b5b5b5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600183620002a69190620018ae565b620002b2919062001928565b600a819055506064600283620002c99190620018ae565b620002d5919062001928565b600b81905550620186a0601983620002ee9190620018ae565b620002fa919062001928565b601f8190555073a56d8e550db019e34fc16b5b8317150f97033dc0600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c8704fe12f98035ce7f55a93d51153f5318e0854600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739673c4b6ad428a651b583fc57c4f5ae58cf73a33600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c8704fe12f98035ce7f55a93d51153f5318e0854600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060966011819055506064601281905550606460148190555060646013819055506013546014546012546011546200048c919062001960565b62000498919062001960565b620004a4919062001960565b60108190555060c8601681905550600060178190555060fa601881905550601854601754601654620004d7919062001960565b620004e3919062001960565b601581905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057d919062001a00565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d919062001a00565b6040518363ffffffff1660e01b81526004016200064c92919062001a43565b6020604051808303816000875af11580156200066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000692919062001a00565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000740573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000766919062001a00565b602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000c1733602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168462000e4660201b60201c565b62000c6c30602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000e4660201b60201c565b62000cbd33600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a8662000ca59190620018ae565b62000cb1919062001928565b6200101760201b60201c565b5050505062001e08565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d389062001ac0565b60405180910390fd5b62000d5560008383620012a860201b60201c565b806002600082825462000d69919062001960565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e1c919062001af3565b60405180910390a362000e3860008383620012ad60201b60201c565b5050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000eb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eaf9062001b86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f219062001c1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200100a919062001af3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010809062001cb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620010fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010f29062001d4e565b60405180910390fd5b6200110e838383620012a860201b60201c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562001197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200118e9062001de6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162001287919062001af3565b60405180910390a3620012a2848484620012ad60201b60201c565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200131b82620012d0565b810181811067ffffffffffffffff821117156200133d576200133c620012e1565b5b80604052505050565b600062001352620012b2565b905062001360828262001310565b919050565b600067ffffffffffffffff821115620013835762001382620012e1565b5b6200138e82620012d0565b9050602081019050919050565b60005b83811015620013bb5780820151818401526020810190506200139e565b60008484015250505050565b6000620013de620013d88462001365565b62001346565b905082815260208101848484011115620013fd57620013fc620012cb565b5b6200140a8482856200139b565b509392505050565b600082601f8301126200142a5762001429620012c6565b5b81516200143c848260208601620013c7565b91505092915050565b600080604083850312156200145f576200145e620012bc565b5b600083015167ffffffffffffffff81111562001480576200147f620012c1565b5b6200148e8582860162001412565b925050602083015167ffffffffffffffff811115620014b257620014b1620012c1565b5b620014c08582860162001412565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200151d57607f821691505b602082108103620015335762001532620014d5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200159d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200155e565b620015a986836200155e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620015f6620015f0620015ea84620015c1565b620015cb565b620015c1565b9050919050565b6000819050919050565b6200161283620015d5565b6200162a6200162182620015fd565b8484546200156b565b825550505050565b600090565b6200164162001632565b6200164e81848462001607565b505050565b5b8181101562001676576200166a60008262001637565b60018101905062001654565b5050565b601f821115620016c5576200168f8162001539565b6200169a846200154e565b81016020851015620016aa578190505b620016c2620016b9856200154e565b83018262001653565b50505b505050565b600082821c905092915050565b6000620016ea60001984600802620016ca565b1980831691505092915050565b6000620017058383620016d7565b9150826002028217905092915050565b6200172082620014ca565b67ffffffffffffffff8111156200173c576200173b620012e1565b5b62001748825462001504565b620017558282856200167a565b600060209050601f8311600181146200178d576000841562001778578287015190505b620017848582620016f7565b865550620017f4565b601f1984166200179d8662001539565b60005b82811015620017c757848901518255600182019150602085019450602081019050620017a0565b86831015620017e75784890151620017e3601f891682620016d7565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f436861696e206e6f7420636f6e66696775726564000000000000000000000000600082015250565b600062001845601483620017fc565b915062001852826200180d565b602082019050919050565b60006020820190508181036000830152620018788162001836565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620018bb82620015c1565b9150620018c883620015c1565b9250828202620018d881620015c1565b91508282048414831517620018f257620018f16200187f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200193582620015c1565b91506200194283620015c1565b925082620019555762001954620018f9565b5b828204905092915050565b60006200196d82620015c1565b91506200197a83620015c1565b92508282019050808211156200199557620019946200187f565b5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019c8826200199b565b9050919050565b620019da81620019bb565b8114620019e657600080fd5b50565b600081519050620019fa81620019cf565b92915050565b60006020828403121562001a195762001a18620012bc565b5b600062001a2984828501620019e9565b91505092915050565b62001a3d81620019bb565b82525050565b600060408201905062001a5a600083018562001a32565b62001a69602083018462001a32565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001aa8601f83620017fc565b915062001ab58262001a70565b602082019050919050565b6000602082019050818103600083015262001adb8162001a99565b9050919050565b62001aed81620015c1565b82525050565b600060208201905062001b0a600083018462001ae2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001b6e602483620017fc565b915062001b7b8262001b10565b604082019050919050565b6000602082019050818103600083015262001ba18162001b5f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001c06602283620017fc565b915062001c138262001ba8565b604082019050919050565b6000602082019050818103600083015262001c398162001bf7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062001c9e602583620017fc565b915062001cab8262001c40565b604082019050919050565b6000602082019050818103600083015262001cd18162001c8f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062001d36602383620017fc565b915062001d438262001cd8565b604082019050919050565b6000602082019050818103600083015262001d698162001d27565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062001dce602683620017fc565b915062001ddb8262001d70565b604082019050919050565b6000602082019050818103600083015262001e018162001dbf565b9050919050565b615af58062001e186000396000f3fe6080604052600436106103a65760003560e01c806385033762116101e7578063bbc0c7421161010d578063e27a55fe116100a0578063f2fde38b1161006f578063f2fde38b14610d7f578063f8b45b0514610da8578063fb002c9714610dd3578063fb591a1414610dfe576103ad565b8063e27a55fe14610ce9578063e884f26014610d14578063ea4cfe1214610d2b578063ea6debd014610d56576103ad565b8063c43c0f58116100dc578063c43c0f5814610c2b578063c78d0fa014610c56578063c876d0b914610c81578063dd62ed3e14610cac576103ad565b8063bbc0c74214610b7f578063be69188314610baa578063bfbf265c14610bd5578063c3f70b5214610c00576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610aaf578063ad5c464814610aec578063af8f26e714610b17578063b0249cc614610b42576103ad565b80639fccce32146109f3578063a13d1a2b14610a1e578063a2cbba2814610a47578063a457c2d714610a72576103ad565b80638d3e6e40116101c15780638d3e6e40146109355780638da5cb5b1461097257806395d89b411461099d5780639e93ad8e146109c8576103ad565b806385033762146108ca5780638a8c523c146108f35780638c7c9e0c1461090a576103ad565b80633b94d2b5116102cc5780635ec13e451161026a57806370a082311161023957806370a0823114610836578063715018a614610873578063751039fc1461088a57806377b27d1f146108a1576103ad565b80635ec13e451461079e5780636161b881146107c95780636611c230146107e05780636ab912061461080b576103ad565b80635431c94e116102a65780635431c94e146106e457806355f5614e1461070d5780635a90a49e146107365780635df6e68e14610773576103ad565b80633b94d2b514610663578063452ed4f11461068e5780634a62bb65146106b9576103ad565b80631c499ab011610344578063313ce56711610313578063313ce567146105a757806339509351146105d25780633ad10ef61461060f5780633b1ab44c1461063a576103ad565b80631c499ab0146104ed5780631d202bbf1461051657806320932e691461053f57806323b872dd1461056a576103ad565b80630758d924116103805780630758d9241461042f578063095ea7b31461045a57806318160ddd146104975780631a8145bb146104c2576103ad565b80630517d13d146103b257806305f93650146103db57806306fdde0314610404576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061434e565b610e15565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061437b565b610f8e565b005b34801561041057600080fd5b506104196110e2565b604051610426919061445e565b60405180910390f35b34801561043b57600080fd5b50610444611174565b60405161045191906144ff565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614558565b61119a565b60405161048e91906145b3565b60405180910390f35b3480156104a357600080fd5b506104ac6111bd565b6040516104b991906145dd565b60405180910390f35b3480156104ce57600080fd5b506104d76111c7565b6040516104e491906145dd565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061434e565b6111cd565b005b34801561052257600080fd5b5061053d600480360381019061053891906145f8565b611345565b005b34801561054b57600080fd5b506105546114ae565b604051610561919061466e565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614689565b6114d4565b60405161059e91906145b3565b60405180910390f35b3480156105b357600080fd5b506105bc611503565b6040516105c991906146f8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614558565b61150c565b60405161060691906145b3565b60405180910390f35b34801561061b57600080fd5b50610624611543565b604051610631919061466e565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190614713565b611569565b005b34801561066f57600080fd5b506106786116f6565b60405161068591906145dd565b60405180910390f35b34801561069a57600080fd5b506106a36116fc565b6040516106b0919061466e565b60405180910390f35b3480156106c557600080fd5b506106ce611722565b6040516106db91906145b3565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190614740565b611735565b005b34801561071957600080fd5b50610734600480360381019061072f9190614713565b6118c9565b005b34801561074257600080fd5b5061075d60048036038101906107589190614713565b611a13565b60405161076a91906145b3565b60405180910390f35b34801561077f57600080fd5b50610788611a33565b60405161079591906145dd565b60405180910390f35b3480156107aa57600080fd5b506107b3611a39565b6040516107c091906145dd565b60405180910390f35b3480156107d557600080fd5b506107de611a3f565b005b3480156107ec57600080fd5b506107f5611ae1565b604051610802919061466e565b60405180910390f35b34801561081757600080fd5b50610820611b07565b60405161082d91906145dd565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614713565b611b0d565b60405161086a91906145dd565b60405180910390f35b34801561087f57600080fd5b50610888611b55565b005b34801561089657600080fd5b5061089f611cad565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906147ac565b611dc4565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190614713565b611f5e565b005b3480156108ff57600080fd5b506109086120a8565b005b34801561091657600080fd5b5061091f61215c565b60405161092c919061480d565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614713565b612182565b60405161096991906145b3565b60405180910390f35b34801561097e57600080fd5b506109876121a2565b604051610994919061466e565b60405180910390f35b3480156109a957600080fd5b506109b26121cc565b6040516109bf919061445e565b60405180910390f35b3480156109d457600080fd5b506109dd61225e565b6040516109ea91906145dd565b60405180910390f35b3480156109ff57600080fd5b50610a08612264565b604051610a1591906145dd565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906147ac565b61226a565b005b348015610a5357600080fd5b50610a5c61249a565b604051610a6991906145dd565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614558565b6124a0565b604051610aa691906145b3565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614558565b612517565b604051610ae391906145b3565b60405180910390f35b348015610af857600080fd5b50610b0161253a565b604051610b0e9190614849565b60405180910390f35b348015610b2357600080fd5b50610b2c612560565b604051610b3991906145dd565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190614713565b612566565b604051610b7691906145b3565b60405180910390f35b348015610b8b57600080fd5b50610b94612586565b604051610ba191906145b3565b60405180910390f35b348015610bb657600080fd5b50610bbf612599565b604051610bcc91906145dd565b60405180910390f35b348015610be157600080fd5b50610bea61259f565b604051610bf791906145dd565b60405180910390f35b348015610c0c57600080fd5b50610c156125a5565b604051610c2291906145dd565b60405180910390f35b348015610c3757600080fd5b50610c406125ab565b604051610c4d91906145dd565b60405180910390f35b348015610c6257600080fd5b50610c6b6125b1565b604051610c7891906145dd565b60405180910390f35b348015610c8d57600080fd5b50610c966125b7565b604051610ca391906145b3565b60405180910390f35b348015610cb857600080fd5b50610cd36004803603810190610cce9190614740565b6125ca565b604051610ce091906145dd565b60405180910390f35b348015610cf557600080fd5b50610cfe612651565b604051610d0b91906145dd565b60405180910390f35b348015610d2057600080fd5b50610d29612657565b005b348015610d3757600080fd5b50610d4061270b565b604051610d4d919061466e565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614713565b612731565b005b348015610d8b57600080fd5b50610da66004803603810190610da19190614713565b61287b565b005b348015610db457600080fd5b50610dbd612a41565b604051610dca91906145dd565b60405180910390f35b348015610ddf57600080fd5b50610de8612a47565b604051610df591906145dd565b60405180910390f35b348015610e0a57600080fd5b50610e13612a4d565b005b610e1d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906148b0565b60405180910390fd5b610eb4611503565b600a610ec09190614a32565b6103e86005610ecd6111bd565b610ed79190614a7d565b610ee19190614aee565b610eeb9190614aee565b811015610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490614b6b565b60405180910390fd5b610f35611503565b600a610f419190614a32565b81610f4c9190614a7d565b600a819055507f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574600a54604051610f8391906145dd565b60405180910390a150565b610f96612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906148b0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461104d9190614b8b565b6110579190614b8b565b6015819055506101f360155411156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614c0b565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c976015546040516110d591906145dd565b60405180910390a1505050565b6060600380546110f190614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90614c5a565b801561116a5780601f1061113f5761010080835404028352916020019161116a565b820191906000526020600020905b81548152906001019060200180831161114d57829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111a5612b0d565b90506111b2818585612b15565b600191505092915050565b6000600254905090565b601a5481565b6111d5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906148b0565b60405180910390fd5b61126c611503565b600a6112789190614a32565b606460016112846111bd565b61128e9190614a7d565b6112989190614aee565b6112a29190614aee565b8110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614b6b565b60405180910390fd5b6112ec611503565b600a6112f89190614a32565b816113039190614a7d565b600b819055507f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c42762600b5460405161133a91906145dd565b60405180910390a150565b61134d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906148b0565b60405180910390fd5b8360118190555082601281905550816014819055508060138190555060135460145460125460115461140e9190614b8b565b6114189190614b8b565b6114229190614b8b565b6010819055506101f3601054111561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614c0b565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05086010546040516114a091906145dd565b60405180910390a150505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806114df612b0d565b90506114ec858285612cde565b6114f7858585612d6a565b60019150509392505050565b60006012905090565b600080611517612b0d565b905061153881858561152985896125ca565b6115339190614b8b565b612b15565b600191505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611571612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906148b0565b60405180910390fd5b60004711611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614cd7565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff164760405161166a90614d28565b60006040518083038185875af1925050503d80600081146116a7576040519150601f19603f3d011682016040523d82523d6000602084013e6116ac565b606091505b5091509150816116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614d89565b60405180910390fd5b505050565b601c5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b61173d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290614df5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611876919061466e565b602060405180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614e2a565b90506118c4838383612e47565b505050565b6118d1612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ea3565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60105481565b60115481565b611a47612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906148b0565b60405180910390fd5b600b54600a81905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611cb5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906148b0565b60405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000601e60006101000a81548160ff021916908315150217905550611d826111bd565b600a81905550611d906111bd565b600b819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611dcc612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614f0f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611f52929190614f2f565b60405180910390a15050565b611f66612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614ea3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120b0612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612136906148b0565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121db90614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461220790614c5a565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b61271081565b601b5481565b612272612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f8906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614f0f565b60405180910390fd5b8061240657602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614fa4565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161248e929190614f2f565b60405180910390a15050565b60125481565b6000806124ab612b0d565b905060006124b982866125ca565b9050838110156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590615036565b60405180910390fd5b61250b8286868403612b15565b60019250505092915050565b600080612522612b0d565b905061252f818585612d6a565b600191505092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60096020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b60185481565b60135481565b600a5481565b60165481565b601f5481565b601e60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b61265f612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906148b0565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612739612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614ea3565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612883612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612909906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906150c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60195481565b612a55612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148b0565b60405180910390fd5b6103e86005612af16111bd565b612afb9190614a7d565b612b059190614aee565b600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd191906145dd565b60405180910390a3505050565b6000612cea84846125ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d645781811015612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90615258565b60405180910390fd5b612d638484848403612b15565b5b50505050565b612d75838383612ecd565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757612e298383836134e0565b81612e349190615278565b90505b612e4283838361382a565b505050565b612ec88363a9059cbb60e01b8484604051602401612e669291906152ac565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613aa0565b505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc657600860009054906101000a900460ff16612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc90615321565b60405180910390fd5b5b601e60019054906101000a900460ff16156134db57601e60009054906101000a900460ff16156131f257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130985750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f15743601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613129575043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f9061538d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333c57600a548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906153f9565b60405180910390fd5b600b546132eb83611b0d565b826132f69190614b8b565b1115613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90615465565b60405180910390fd5b6134da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133df5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342e57600a54811115613429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613420906154d1565b60405180910390fd5b6134d9565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134d857600b5461348b83611b0d565b826134969190614b8b565b11156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615465565b60405180910390fd5b5b5b5b5b505050565b6000601f546134ee30611b0d565b101580156135095750601e60029054906101000a900460ff16155b801561355e5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a2576001601e60026101000a81548160ff021916908315150217905550613586613b67565b6000601e60026101000a81548160ff0219169083151502179055505b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ff57506000601554115b156136bf57612710601554846136159190614a7d565b61361f9190614aee565b9050601554601754826136329190614a7d565b61363c9190614aee565b601a600082825461364d9190614b8b565b92505081905550601554601654826136659190614a7d565b61366f9190614aee565b601960008282546136809190614b8b565b92505081905550601554601854826136989190614a7d565b6136a29190614aee565b601b60008282546136b39190614b8b565b9250508190555061380a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371a57506000601054115b1561380957612710601054846137309190614a7d565b61373a9190614aee565b90506010546011548261374d9190614a7d565b6137579190614aee565b601960008282546137689190614b8b565b92505081905550601054601254826137809190614a7d565b61378a9190614aee565b601a600082825461379b9190614b8b565b92505081905550601054601454826137b39190614a7d565b6137bd9190614aee565b601b60008282546137ce9190614b8b565b92505081905550601054601354826137e69190614a7d565b6137f09190614aee565b601c60008282546138019190614b8b565b925050819055505b5b600081111561381f5761381e85308361382a565b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389090615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ff906155f5565b60405180910390fd5b613913838383613f26565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399090615687565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a8791906145dd565b60405180910390a3613a9a848484613f2b565b50505050565b6000613b02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f309092919063ffffffff16565b9050600081511115613b625780806020019051810190613b2291906156bc565b613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b589061575b565b60405180910390fd5b5b505050565b6000613b7230611b0d565b90506000601c54601b54601954601a54613b8c9190614b8b565b613b969190614b8b565b613ba09190614b8b565b90506000821480613bb15750600081145b15613bbd575050613f24565b6028601f54613bcc9190614a7d565b821115613be5576028601f54613be29190614a7d565b91505b6000601a541115613cde57600081601a5484613c019190614a7d565b613c0b9190614aee565b9050613c3a30602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361382a565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca457600080fd5b505af1925050508015613cb5575060015b508083613cc29190615278565b9250601a5482613cd29190615278565b91506000601a81905550505b600081118015613cee5750600082115b15613f2157613cfc82613f48565b6000479050600082601b5483613d129190614a7d565b613d1c9190614aee565b9050600083601c5484613d2f9190614a7d565b613d399190614aee565b9050600080831115613ddc57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d8b90614d28565b60006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050809150506000601b819055505b6000821115613e7c57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2b90614d28565b60006040518083038185875af1925050503d8060008114613e68576040519150601f19603f3d011682016040523d82523d6000602084013e613e6d565b606091505b5050809150506000601c819055505b6000471115613f1c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ecb90614d28565b60006040518083038185875af1925050503d8060008114613f08576040519150601f19603f3d011682016040523d82523d6000602084013e613f0d565b606091505b50508091505060006019819055505b505050505b50505b565b505050565b505050565b6060613f3f848460008561415e565b90509392505050565b6000600267ffffffffffffffff811115613f6557613f6461577b565b5b604051908082528060200260200182016040528015613f935781602001602082028036833780820191505090505b5090503081600081518110613fab57613faa6157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614052573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407691906157ee565b8160018151811061408a576140896157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614128959493929190615914565b600060405180830381600087803b15801561414257600080fd5b505af1158015614156573d6000803e3d6000fd5b505050505050565b6060824710156141a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161419a906159e0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516141cc9190615a3c565b60006040518083038185875af1925050503d8060008114614209576040519150601f19603f3d011682016040523d82523d6000602084013e61420e565b606091505b509150915061421f8783838761422b565b92505050949350505050565b6060831561428d57600083510361428557614245856142a0565b614284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161427b90615a9f565b60405180910390fd5b5b829050614298565b61429783836142c3565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156142d65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430a919061445e565b60405180910390fd5b600080fd5b6000819050919050565b61432b81614318565b811461433657600080fd5b50565b60008135905061434881614322565b92915050565b60006020828403121561436457614363614313565b5b600061437284828501614339565b91505092915050565b60008060006060848603121561439457614393614313565b5b60006143a286828701614339565b93505060206143b386828701614339565b92505060406143c486828701614339565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156144085780820151818401526020810190506143ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000614430826143ce565b61443a81856143d9565b935061444a8185602086016143ea565b61445381614414565b840191505092915050565b600060208201905081810360008301526144788184614425565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006144c56144c06144bb84614480565b6144a0565b614480565b9050919050565b60006144d7826144aa565b9050919050565b60006144e9826144cc565b9050919050565b6144f9816144de565b82525050565b600060208201905061451460008301846144f0565b92915050565b600061452582614480565b9050919050565b6145358161451a565b811461454057600080fd5b50565b6000813590506145528161452c565b92915050565b6000806040838503121561456f5761456e614313565b5b600061457d85828601614543565b925050602061458e85828601614339565b9150509250929050565b60008115159050919050565b6145ad81614598565b82525050565b60006020820190506145c860008301846145a4565b92915050565b6145d781614318565b82525050565b60006020820190506145f260008301846145ce565b92915050565b6000806000806080858703121561461257614611614313565b5b600061462087828801614339565b945050602061463187828801614339565b935050604061464287828801614339565b925050606061465387828801614339565b91505092959194509250565b6146688161451a565b82525050565b6000602082019050614683600083018461465f565b92915050565b6000806000606084860312156146a2576146a1614313565b5b60006146b086828701614543565b93505060206146c186828701614543565b92505060406146d286828701614339565b9150509250925092565b600060ff82169050919050565b6146f2816146dc565b82525050565b600060208201905061470d60008301846146e9565b92915050565b60006020828403121561472957614728614313565b5b600061473784828501614543565b91505092915050565b6000806040838503121561475757614756614313565b5b600061476585828601614543565b925050602061477685828601614543565b9150509250929050565b61478981614598565b811461479457600080fd5b50565b6000813590506147a681614780565b92915050565b600080604083850312156147c3576147c2614313565b5b60006147d185828601614543565b92505060206147e285828601614797565b9150509250929050565b60006147f7826144cc565b9050919050565b614807816147ec565b82525050565b600060208201905061482260008301846147fe565b92915050565b6000614833826144cc565b9050919050565b61484381614828565b82525050565b600060208201905061485e600083018461483a565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061489a6020836143d9565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561495657808604811115614932576149316148d0565b5b60018516156149415780820291505b808102905061494f856148ff565b9450614916565b94509492505050565b60008261496f5760019050614a2b565b8161497d5760009050614a2b565b8160018114614993576002811461499d576149cc565b6001915050614a2b565b60ff8411156149af576149ae6148d0565b5b8360020a9150848211156149c6576149c56148d0565b5b50614a2b565b5060208310610133831016604e8410600b8410161715614a015782820a9050838111156149fc576149fb6148d0565b5b614a2b565b614a0e848484600161490c565b92509050818404811115614a2557614a246148d0565b5b81810290505b9392505050565b6000614a3d82614318565b9150614a48836146dc565b9250614a757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461495f565b905092915050565b6000614a8882614318565b9150614a9383614318565b9250828202614aa181614318565b91508282048414831517614ab857614ab76148d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af982614318565b9150614b0483614318565b925082614b1457614b13614abf565b5b828204905092915050565b7f546f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000614b556007836143d9565b9150614b6082614b1f565b602082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b6000614b9682614318565b9150614ba183614318565b9250828201905080821115614bb957614bb86148d0565b5b92915050565b7f4b656570207461782062656c6f77203525000000000000000000000000000000600082015250565b6000614bf56011836143d9565b9150614c0082614bbf565b602082019050919050565b60006020820190508181036000830152614c2481614be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7257607f821691505b602082108103614c8557614c84614c2b565b5b50919050565b7f436f6e747261637420686173207a65726f204554480000000000000000000000600082015250565b6000614cc16015836143d9565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b600081905092915050565b50565b6000614d12600083614cf7565b9150614d1d82614d02565b600082019050919050565b6000614d3382614d05565b9150819050919050565b7f4661696c656420746f2073656e642045746865722e0000000000000000000000600082015250565b6000614d736015836143d9565b9150614d7e82614d3d565b602082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614ddf601a836143d9565b9150614dea82614da9565b602082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b600081519050614e2481614322565b92915050565b600060208284031215614e4057614e3f614313565b5b6000614e4e84828501614e15565b91505092915050565b7f7a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614e8d600c836143d9565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000614ef9600c836143d9565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000604082019050614f44600083018561465f565b614f5160208301846145a4565b9392505050565b7f43616e6e6f742072656d6f766520706169720000000000000000000000000000600082015250565b6000614f8e6012836143d9565b9150614f9982614f58565b602082019050919050565b60006020820190508181036000830152614fbd81614f81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150206025836143d9565b915061502b82614fc4565b604082019050919050565b6000602082019050818103600083015261504f81615013565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b26026836143d9565b91506150bd82615056565b604082019050919050565b600060208201905081810360008301526150e1816150a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151446024836143d9565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d66022836143d9565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615242601d836143d9565b915061524d8261520c565b602082019050919050565b6000602082019050818103600083015261527181615235565b9050919050565b600061528382614318565b915061528e83614318565b92508282039050818111156152a6576152a56148d0565b5b92915050565b60006040820190506152c1600083018561465f565b6152ce60208301846145ce565b9392505050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b600061530b6012836143d9565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e000000000000000000600082015250565b60006153776017836143d9565b915061538282615341565b602082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656465642e000000600082015250565b60006153e3601d836143d9565b91506153ee826153ad565b602082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b600061544f601b836143d9565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656465642e0000600082015250565b60006154bb601e836143d9565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061554d6025836143d9565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155df6023836143d9565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156716026836143d9565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b6000815190506156b681614780565b92915050565b6000602082840312156156d2576156d1614313565b5b60006156e0848285016156a7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615745602a836143d9565b9150615750826156e9565b604082019050919050565b6000602082019050818103600083015261577481615738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157e88161452c565b92915050565b60006020828403121561580457615803614313565b5b6000615812848285016157d9565b91505092915050565b6000819050919050565b600061584061583b6158368461581b565b6144a0565b614318565b9050919050565b61585081615825565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588b8161451a565b82525050565b600061589d8383615882565b60208301905092915050565b6000602082019050919050565b60006158c182615856565b6158cb8185615861565b93506158d683615872565b8060005b838110156159075781516158ee8882615891565b97506158f9836158a9565b9250506001810190506158da565b5085935050505092915050565b600060a08201905061592960008301886145ce565b6159366020830187615847565b818103604083015261594881866158b6565b9050615957606083018561465f565b61596460808301846145ce565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006159ca6026836143d9565b91506159d58261596e565b604082019050919050565b600060208201905081810360008301526159f9816159bd565b9050919050565b600081519050919050565b6000615a1682615a00565b615a208185614cf7565b9350615a308185602086016143ea565b80840191505092915050565b6000615a488284615a0b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615a89601d836143d9565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b905091905056fea2646970667358221220fafe0a4bc5b240d602728f24a07e97c7696a9d8b42f73efc9c160eebac9f367d64736f6c63430008130033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008426f6f6d636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424f4f4d00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103a65760003560e01c806385033762116101e7578063bbc0c7421161010d578063e27a55fe116100a0578063f2fde38b1161006f578063f2fde38b14610d7f578063f8b45b0514610da8578063fb002c9714610dd3578063fb591a1414610dfe576103ad565b8063e27a55fe14610ce9578063e884f26014610d14578063ea4cfe1214610d2b578063ea6debd014610d56576103ad565b8063c43c0f58116100dc578063c43c0f5814610c2b578063c78d0fa014610c56578063c876d0b914610c81578063dd62ed3e14610cac576103ad565b8063bbc0c74214610b7f578063be69188314610baa578063bfbf265c14610bd5578063c3f70b5214610c00576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610aaf578063ad5c464814610aec578063af8f26e714610b17578063b0249cc614610b42576103ad565b80639fccce32146109f3578063a13d1a2b14610a1e578063a2cbba2814610a47578063a457c2d714610a72576103ad565b80638d3e6e40116101c15780638d3e6e40146109355780638da5cb5b1461097257806395d89b411461099d5780639e93ad8e146109c8576103ad565b806385033762146108ca5780638a8c523c146108f35780638c7c9e0c1461090a576103ad565b80633b94d2b5116102cc5780635ec13e451161026a57806370a082311161023957806370a0823114610836578063715018a614610873578063751039fc1461088a57806377b27d1f146108a1576103ad565b80635ec13e451461079e5780636161b881146107c95780636611c230146107e05780636ab912061461080b576103ad565b80635431c94e116102a65780635431c94e146106e457806355f5614e1461070d5780635a90a49e146107365780635df6e68e14610773576103ad565b80633b94d2b514610663578063452ed4f11461068e5780634a62bb65146106b9576103ad565b80631c499ab011610344578063313ce56711610313578063313ce567146105a757806339509351146105d25780633ad10ef61461060f5780633b1ab44c1461063a576103ad565b80631c499ab0146104ed5780631d202bbf1461051657806320932e691461053f57806323b872dd1461056a576103ad565b80630758d924116103805780630758d9241461042f578063095ea7b31461045a57806318160ddd146104975780631a8145bb146104c2576103ad565b80630517d13d146103b257806305f93650146103db57806306fdde0314610404576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d4919061434e565b610e15565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061437b565b610f8e565b005b34801561041057600080fd5b506104196110e2565b604051610426919061445e565b60405180910390f35b34801561043b57600080fd5b50610444611174565b60405161045191906144ff565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614558565b61119a565b60405161048e91906145b3565b60405180910390f35b3480156104a357600080fd5b506104ac6111bd565b6040516104b991906145dd565b60405180910390f35b3480156104ce57600080fd5b506104d76111c7565b6040516104e491906145dd565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061434e565b6111cd565b005b34801561052257600080fd5b5061053d600480360381019061053891906145f8565b611345565b005b34801561054b57600080fd5b506105546114ae565b604051610561919061466e565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614689565b6114d4565b60405161059e91906145b3565b60405180910390f35b3480156105b357600080fd5b506105bc611503565b6040516105c991906146f8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190614558565b61150c565b60405161060691906145b3565b60405180910390f35b34801561061b57600080fd5b50610624611543565b604051610631919061466e565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190614713565b611569565b005b34801561066f57600080fd5b506106786116f6565b60405161068591906145dd565b60405180910390f35b34801561069a57600080fd5b506106a36116fc565b6040516106b0919061466e565b60405180910390f35b3480156106c557600080fd5b506106ce611722565b6040516106db91906145b3565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190614740565b611735565b005b34801561071957600080fd5b50610734600480360381019061072f9190614713565b6118c9565b005b34801561074257600080fd5b5061075d60048036038101906107589190614713565b611a13565b60405161076a91906145b3565b60405180910390f35b34801561077f57600080fd5b50610788611a33565b60405161079591906145dd565b60405180910390f35b3480156107aa57600080fd5b506107b3611a39565b6040516107c091906145dd565b60405180910390f35b3480156107d557600080fd5b506107de611a3f565b005b3480156107ec57600080fd5b506107f5611ae1565b604051610802919061466e565b60405180910390f35b34801561081757600080fd5b50610820611b07565b60405161082d91906145dd565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614713565b611b0d565b60405161086a91906145dd565b60405180910390f35b34801561087f57600080fd5b50610888611b55565b005b34801561089657600080fd5b5061089f611cad565b005b3480156108ad57600080fd5b506108c860048036038101906108c391906147ac565b611dc4565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190614713565b611f5e565b005b3480156108ff57600080fd5b506109086120a8565b005b34801561091657600080fd5b5061091f61215c565b60405161092c919061480d565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614713565b612182565b60405161096991906145b3565b60405180910390f35b34801561097e57600080fd5b506109876121a2565b604051610994919061466e565b60405180910390f35b3480156109a957600080fd5b506109b26121cc565b6040516109bf919061445e565b60405180910390f35b3480156109d457600080fd5b506109dd61225e565b6040516109ea91906145dd565b60405180910390f35b3480156109ff57600080fd5b50610a08612264565b604051610a1591906145dd565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906147ac565b61226a565b005b348015610a5357600080fd5b50610a5c61249a565b604051610a6991906145dd565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614558565b6124a0565b604051610aa691906145b3565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614558565b612517565b604051610ae391906145b3565b60405180910390f35b348015610af857600080fd5b50610b0161253a565b604051610b0e9190614849565b60405180910390f35b348015610b2357600080fd5b50610b2c612560565b604051610b3991906145dd565b60405180910390f35b348015610b4e57600080fd5b50610b696004803603810190610b649190614713565b612566565b604051610b7691906145b3565b60405180910390f35b348015610b8b57600080fd5b50610b94612586565b604051610ba191906145b3565b60405180910390f35b348015610bb657600080fd5b50610bbf612599565b604051610bcc91906145dd565b60405180910390f35b348015610be157600080fd5b50610bea61259f565b604051610bf791906145dd565b60405180910390f35b348015610c0c57600080fd5b50610c156125a5565b604051610c2291906145dd565b60405180910390f35b348015610c3757600080fd5b50610c406125ab565b604051610c4d91906145dd565b60405180910390f35b348015610c6257600080fd5b50610c6b6125b1565b604051610c7891906145dd565b60405180910390f35b348015610c8d57600080fd5b50610c966125b7565b604051610ca391906145b3565b60405180910390f35b348015610cb857600080fd5b50610cd36004803603810190610cce9190614740565b6125ca565b604051610ce091906145dd565b60405180910390f35b348015610cf557600080fd5b50610cfe612651565b604051610d0b91906145dd565b60405180910390f35b348015610d2057600080fd5b50610d29612657565b005b348015610d3757600080fd5b50610d4061270b565b604051610d4d919061466e565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614713565b612731565b005b348015610d8b57600080fd5b50610da66004803603810190610da19190614713565b61287b565b005b348015610db457600080fd5b50610dbd612a41565b604051610dca91906145dd565b60405180910390f35b348015610ddf57600080fd5b50610de8612a47565b604051610df591906145dd565b60405180910390f35b348015610e0a57600080fd5b50610e13612a4d565b005b610e1d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906148b0565b60405180910390fd5b610eb4611503565b600a610ec09190614a32565b6103e86005610ecd6111bd565b610ed79190614a7d565b610ee19190614aee565b610eeb9190614aee565b811015610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490614b6b565b60405180910390fd5b610f35611503565b600a610f419190614a32565b81610f4c9190614a7d565b600a819055507f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574600a54604051610f8391906145dd565b60405180910390a150565b610f96612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c906148b0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461104d9190614b8b565b6110579190614b8b565b6015819055506101f360155411156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614c0b565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c976015546040516110d591906145dd565b60405180910390a1505050565b6060600380546110f190614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90614c5a565b801561116a5780601f1061113f5761010080835404028352916020019161116a565b820191906000526020600020905b81548152906001019060200180831161114d57829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111a5612b0d565b90506111b2818585612b15565b600191505092915050565b6000600254905090565b601a5481565b6111d5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906148b0565b60405180910390fd5b61126c611503565b600a6112789190614a32565b606460016112846111bd565b61128e9190614a7d565b6112989190614aee565b6112a29190614aee565b8110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614b6b565b60405180910390fd5b6112ec611503565b600a6112f89190614a32565b816113039190614a7d565b600b819055507f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c42762600b5460405161133a91906145dd565b60405180910390a150565b61134d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906148b0565b60405180910390fd5b8360118190555082601281905550816014819055508060138190555060135460145460125460115461140e9190614b8b565b6114189190614b8b565b6114229190614b8b565b6010819055506101f3601054111561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614c0b565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05086010546040516114a091906145dd565b60405180910390a150505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806114df612b0d565b90506114ec858285612cde565b6114f7858585612d6a565b60019150509392505050565b60006012905090565b600080611517612b0d565b905061153881858561152985896125ca565b6115339190614b8b565b612b15565b600191505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611571612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f7906148b0565b60405180910390fd5b60004711611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614cd7565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff164760405161166a90614d28565b60006040518083038185875af1925050503d80600081146116a7576040519150601f19603f3d011682016040523d82523d6000602084013e6116ac565b606091505b5091509150816116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614d89565b60405180910390fd5b505050565b601c5481565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60019054906101000a900460ff1681565b61173d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290614df5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611876919061466e565b602060405180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614e2a565b90506118c4838383612e47565b505050565b6118d1612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ea3565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900460ff1681565b60105481565b60115481565b611a47612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906148b0565b60405180910390fd5b600b54600a81905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b5d612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611cb5612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906148b0565b60405180910390fd5b6000601e60016101000a81548160ff0219169083151502179055506000601e60006101000a81548160ff021916908315150217905550611d826111bd565b600a81905550611d906111bd565b600b819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611dcc612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e52906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614f0f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d8282604051611f52929190614f2f565b60405180910390a15050565b611f66612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614ea3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120b0612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612136906148b0565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121db90614c5a565b80601f016020809104026020016040519081016040528092919081815260200182805461220790614c5a565b80156122545780601f1061222957610100808354040283529160200191612254565b820191906000526020600020905b81548152906001019060200180831161223757829003601f168201915b5050505050905090565b61271081565b601b5481565b612272612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f8906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614f0f565b60405180910390fd5b8061240657602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614fa4565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161248e929190614f2f565b60405180910390a15050565b60125481565b6000806124ab612b0d565b905060006124b982866125ca565b9050838110156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590615036565b60405180910390fd5b61250b8286868403612b15565b60019250505092915050565b600080612522612b0d565b905061252f818585612d6a565b600191505092915050565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60096020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900460ff1681565b60185481565b60135481565b600a5481565b60165481565b601f5481565b601e60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b61265f612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e5906148b0565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612739612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614ea3565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612883612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612909906148b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906150c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60195481565b612a55612b0d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb906148b0565b60405180910390fd5b6103e86005612af16111bd565b612afb9190614a7d565b612b059190614aee565b600a81905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b9061515a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906151ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cd191906145dd565b60405180910390a3505050565b6000612cea84846125ca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d645781811015612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90615258565b60405180910390fd5b612d638484848403612b15565b5b50505050565b612d75838383612ecd565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757612e298383836134e0565b81612e349190615278565b90505b612e4283838361382a565b505050565b612ec88363a9059cbb60e01b8484604051602401612e669291906152ac565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613aa0565b505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc657600860009054906101000a900460ff16612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc90615321565b60405180910390fd5b5b601e60019054906101000a900460ff16156134db57601e60009054906101000a900460ff16156131f257602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130985750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f15743601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613129575043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f9061538d565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561333c57600a548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906153f9565b60405180910390fd5b600b546132eb83611b0d565b826132f69190614b8b565b1115613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e90615465565b60405180910390fd5b6134da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133df5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342e57600a54811115613429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613420906154d1565b60405180910390fd5b6134d9565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134d857600b5461348b83611b0d565b826134969190614b8b565b11156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615465565b60405180910390fd5b5b5b5b5b505050565b6000601f546134ee30611b0d565b101580156135095750601e60029054906101000a900460ff16155b801561355e5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a2576001601e60026101000a81548160ff021916908315150217905550613586613b67565b6000601e60026101000a81548160ff0219169083151502179055505b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ff57506000601554115b156136bf57612710601554846136159190614a7d565b61361f9190614aee565b9050601554601754826136329190614a7d565b61363c9190614aee565b601a600082825461364d9190614b8b565b92505081905550601554601654826136659190614a7d565b61366f9190614aee565b601960008282546136809190614b8b565b92505081905550601554601854826136989190614a7d565b6136a29190614aee565b601b60008282546136b39190614b8b565b9250508190555061380a565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371a57506000601054115b1561380957612710601054846137309190614a7d565b61373a9190614aee565b90506010546011548261374d9190614a7d565b6137579190614aee565b601960008282546137689190614b8b565b92505081905550601054601254826137809190614a7d565b61378a9190614aee565b601a600082825461379b9190614b8b565b92505081905550601054601454826137b39190614a7d565b6137bd9190614aee565b601b60008282546137ce9190614b8b565b92505081905550601054601354826137e69190614a7d565b6137f09190614aee565b601c60008282546138019190614b8b565b925050819055505b5b600081111561381f5761381e85308361382a565b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389090615563565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ff906155f5565b60405180910390fd5b613913838383613f26565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399090615687565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a8791906145dd565b60405180910390a3613a9a848484613f2b565b50505050565b6000613b02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f309092919063ffffffff16565b9050600081511115613b625780806020019051810190613b2291906156bc565b613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b589061575b565b60405180910390fd5b5b505050565b6000613b7230611b0d565b90506000601c54601b54601954601a54613b8c9190614b8b565b613b969190614b8b565b613ba09190614b8b565b90506000821480613bb15750600081145b15613bbd575050613f24565b6028601f54613bcc9190614a7d565b821115613be5576028601f54613be29190614a7d565b91505b6000601a541115613cde57600081601a5484613c019190614a7d565b613c0b9190614aee565b9050613c3a30602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361382a565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca457600080fd5b505af1925050508015613cb5575060015b508083613cc29190615278565b9250601a5482613cd29190615278565b91506000601a81905550505b600081118015613cee5750600082115b15613f2157613cfc82613f48565b6000479050600082601b5483613d129190614a7d565b613d1c9190614aee565b9050600083601c5484613d2f9190614a7d565b613d399190614aee565b9050600080831115613ddc57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613d8b90614d28565b60006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050809150506000601b819055505b6000821115613e7c57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e2b90614d28565b60006040518083038185875af1925050503d8060008114613e68576040519150601f19603f3d011682016040523d82523d6000602084013e613e6d565b606091505b5050809150506000601c819055505b6000471115613f1c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ecb90614d28565b60006040518083038185875af1925050503d8060008114613f08576040519150601f19603f3d011682016040523d82523d6000602084013e613f0d565b606091505b50508091505060006019819055505b505050505b50505b565b505050565b505050565b6060613f3f848460008561415e565b90509392505050565b6000600267ffffffffffffffff811115613f6557613f6461577b565b5b604051908082528060200260200182016040528015613f935781602001602082028036833780820191505090505b5090503081600081518110613fab57613faa6157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614052573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407691906157ee565b8160018151811061408a576140896157aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614128959493929190615914565b600060405180830381600087803b15801561414257600080fd5b505af1158015614156573d6000803e3d6000fd5b505050505050565b6060824710156141a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161419a906159e0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516141cc9190615a3c565b60006040518083038185875af1925050503d8060008114614209576040519150601f19603f3d011682016040523d82523d6000602084013e61420e565b606091505b509150915061421f8783838761422b565b92505050949350505050565b6060831561428d57600083510361428557614245856142a0565b614284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161427b90615a9f565b60405180910390fd5b5b829050614298565b61429783836142c3565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156142d65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430a919061445e565b60405180910390fd5b600080fd5b6000819050919050565b61432b81614318565b811461433657600080fd5b50565b60008135905061434881614322565b92915050565b60006020828403121561436457614363614313565b5b600061437284828501614339565b91505092915050565b60008060006060848603121561439457614393614313565b5b60006143a286828701614339565b93505060206143b386828701614339565b92505060406143c486828701614339565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156144085780820151818401526020810190506143ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000614430826143ce565b61443a81856143d9565b935061444a8185602086016143ea565b61445381614414565b840191505092915050565b600060208201905081810360008301526144788184614425565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006144c56144c06144bb84614480565b6144a0565b614480565b9050919050565b60006144d7826144aa565b9050919050565b60006144e9826144cc565b9050919050565b6144f9816144de565b82525050565b600060208201905061451460008301846144f0565b92915050565b600061452582614480565b9050919050565b6145358161451a565b811461454057600080fd5b50565b6000813590506145528161452c565b92915050565b6000806040838503121561456f5761456e614313565b5b600061457d85828601614543565b925050602061458e85828601614339565b9150509250929050565b60008115159050919050565b6145ad81614598565b82525050565b60006020820190506145c860008301846145a4565b92915050565b6145d781614318565b82525050565b60006020820190506145f260008301846145ce565b92915050565b6000806000806080858703121561461257614611614313565b5b600061462087828801614339565b945050602061463187828801614339565b935050604061464287828801614339565b925050606061465387828801614339565b91505092959194509250565b6146688161451a565b82525050565b6000602082019050614683600083018461465f565b92915050565b6000806000606084860312156146a2576146a1614313565b5b60006146b086828701614543565b93505060206146c186828701614543565b92505060406146d286828701614339565b9150509250925092565b600060ff82169050919050565b6146f2816146dc565b82525050565b600060208201905061470d60008301846146e9565b92915050565b60006020828403121561472957614728614313565b5b600061473784828501614543565b91505092915050565b6000806040838503121561475757614756614313565b5b600061476585828601614543565b925050602061477685828601614543565b9150509250929050565b61478981614598565b811461479457600080fd5b50565b6000813590506147a681614780565b92915050565b600080604083850312156147c3576147c2614313565b5b60006147d185828601614543565b92505060206147e285828601614797565b9150509250929050565b60006147f7826144cc565b9050919050565b614807816147ec565b82525050565b600060208201905061482260008301846147fe565b92915050565b6000614833826144cc565b9050919050565b61484381614828565b82525050565b600060208201905061485e600083018461483a565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061489a6020836143d9565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561495657808604811115614932576149316148d0565b5b60018516156149415780820291505b808102905061494f856148ff565b9450614916565b94509492505050565b60008261496f5760019050614a2b565b8161497d5760009050614a2b565b8160018114614993576002811461499d576149cc565b6001915050614a2b565b60ff8411156149af576149ae6148d0565b5b8360020a9150848211156149c6576149c56148d0565b5b50614a2b565b5060208310610133831016604e8410600b8410161715614a015782820a9050838111156149fc576149fb6148d0565b5b614a2b565b614a0e848484600161490c565b92509050818404811115614a2557614a246148d0565b5b81810290505b9392505050565b6000614a3d82614318565b9150614a48836146dc565b9250614a757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461495f565b905092915050565b6000614a8882614318565b9150614a9383614318565b9250828202614aa181614318565b91508282048414831517614ab857614ab76148d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614af982614318565b9150614b0483614318565b925082614b1457614b13614abf565b5b828204905092915050565b7f546f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000614b556007836143d9565b9150614b6082614b1f565b602082019050919050565b60006020820190508181036000830152614b8481614b48565b9050919050565b6000614b9682614318565b9150614ba183614318565b9250828201905080821115614bb957614bb86148d0565b5b92915050565b7f4b656570207461782062656c6f77203525000000000000000000000000000000600082015250565b6000614bf56011836143d9565b9150614c0082614bbf565b602082019050919050565b60006020820190508181036000830152614c2481614be8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7257607f821691505b602082108103614c8557614c84614c2b565b5b50919050565b7f436f6e747261637420686173207a65726f204554480000000000000000000000600082015250565b6000614cc16015836143d9565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b600081905092915050565b50565b6000614d12600083614cf7565b9150614d1d82614d02565b600082019050919050565b6000614d3382614d05565b9150819050919050565b7f4661696c656420746f2073656e642045746865722e0000000000000000000000600082015250565b6000614d736015836143d9565b9150614d7e82614d3d565b602082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614ddf601a836143d9565b9150614dea82614da9565b602082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b600081519050614e2481614322565b92915050565b600060208284031215614e4057614e3f614313565b5b6000614e4e84828501614e15565b91505092915050565b7f7a65726f20616464726573730000000000000000000000000000000000000000600082015250565b6000614e8d600c836143d9565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000614ef9600c836143d9565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000604082019050614f44600083018561465f565b614f5160208301846145a4565b9392505050565b7f43616e6e6f742072656d6f766520706169720000000000000000000000000000600082015250565b6000614f8e6012836143d9565b9150614f9982614f58565b602082019050919050565b60006020820190508181036000830152614fbd81614f81565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150206025836143d9565b915061502b82614fc4565b604082019050919050565b6000602082019050818103600083015261504f81615013565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b26026836143d9565b91506150bd82615056565b604082019050919050565b600060208201905081810360008301526150e1816150a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151446024836143d9565b915061514f826150e8565b604082019050919050565b6000602082019050818103600083015261517381615137565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151d66022836143d9565b91506151e18261517a565b604082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615242601d836143d9565b915061524d8261520c565b602082019050919050565b6000602082019050818103600083015261527181615235565b9050919050565b600061528382614318565b915061528e83614318565b92508282039050818111156152a6576152a56148d0565b5b92915050565b60006040820190506152c1600083018561465f565b6152ce60208301846145ce565b9392505050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b600061530b6012836143d9565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e000000000000000000600082015250565b60006153776017836143d9565b915061538282615341565b602082019050919050565b600060208201905081810360008301526153a68161536a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656465642e000000600082015250565b60006153e3601d836143d9565b91506153ee826153ad565b602082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b600061544f601b836143d9565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656465642e0000600082015250565b60006154bb601e836143d9565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061554d6025836143d9565b9150615558826154f1565b604082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155df6023836143d9565b91506155ea82615583565b604082019050919050565b6000602082019050818103600083015261560e816155d2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156716026836143d9565b915061567c82615615565b604082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b6000815190506156b681614780565b92915050565b6000602082840312156156d2576156d1614313565b5b60006156e0848285016156a7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000615745602a836143d9565b9150615750826156e9565b604082019050919050565b6000602082019050818103600083015261577481615738565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157e88161452c565b92915050565b60006020828403121561580457615803614313565b5b6000615812848285016157d9565b91505092915050565b6000819050919050565b600061584061583b6158368461581b565b6144a0565b614318565b9050919050565b61585081615825565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588b8161451a565b82525050565b600061589d8383615882565b60208301905092915050565b6000602082019050919050565b60006158c182615856565b6158cb8185615861565b93506158d683615872565b8060005b838110156159075781516158ee8882615891565b97506158f9836158a9565b9250506001810190506158da565b5085935050505092915050565b600060a08201905061592960008301886145ce565b6159366020830187615847565b818103604083015261594881866158b6565b9050615957606083018561465f565b61596460808301846145ce565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006159ca6026836143d9565b91506159d58261596e565b604082019050919050565b600060208201905081810360008301526159f9816159bd565b9050919050565b600081519050919050565b6000615a1682615a00565b615a208185614cf7565b9350615a308185602086016143ea565b80840191505092915050565b6000615a488284615a0b565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615a89601d836143d9565b9150615a9482615a53565b602082019050919050565b60006020820190508181036000830152615ab881615a7c565b905091905056fea2646970667358221220fafe0a4bc5b240d602728f24a07e97c7696a9d8b42f73efc9c160eebac9f367d64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008426f6f6d636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004424f4f4d00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Boomcoin
Arg [1] : _symbol (string): BOOM
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 426f6f6d636f696e000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 424f4f4d00000000000000000000000000000000000000000000000000000000
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.