Contract Address Details
0x7fC009aDC0B7A5E9C81F2e0E7a14c6c281ABb99C
- Token
- Unrektus (REKT)
- Creator
- 0x401744–f3960c at 0xe900af–e30305
- Balance
- 1.187768850306175964 Doge
- Tokens
-
Fetching tokens...
- Transactions
- 58 Transactions
- Transfers
- 152 Transfers
- Gas Used
- 3,804,186
- Last Balance Update
- 27578902
Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- BEP20Ethereum
- Optimization enabled
- false
- Compiler version
- v0.8.17+commit.8df45f5f
- EVM Version
- default
- Verified at
- 2022-11-06T17:45:32.576547Z
Contract source code
/** *Submitted for verification at BscScan.com on 2020-09-09 */ pragma solidity >=0.8.0; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () { } function _msgSender() internal view returns (address ) { return address(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BEP20Ethereum is Context, IBEP20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address=>bool) public taxExclusion; uint256 private _totalSupply; uint256 public liquidityTax = 2; uint256 public taxA = 5; uint256 public taxB =5; uint256 public threshhold; uint8 public _decimals; string public _symbol; string public _name; address public taxWallet1; address public taxWallet2; bool public liquidityEnb=false; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool lock; modifier protecc{ lock = true; _; lock =false; } constructor() public { _name = "Unrektus"; _symbol = "REKT"; _decimals = 18; _totalSupply = 4000000 * 10**18; _balances[msg.sender] = _totalSupply; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9695906B4502D5397E6D21ff222e2C1a9e5654a9); // test router 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 // Create a uniswap pair for this new token // mainrouter 0x10ED43C718714eb63d5aA57B78B54704E256024E uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; taxExclusion[msg.sender]=true; taxExclusion[address(this)]=true; emit Transfer(address(0), msg.sender, _totalSupply); } /** * @dev Returns the bep token owner. */ function getOwner() override external view returns (address) { return owner(); } /** * @dev Returns the token decimals. */ function decimals() override external view returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() override external view returns (string memory) { return _symbol; } /** * @dev Returns the token name. */ function name() override external view returns (string memory) { return _name; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply()override external view returns (uint256) { return _totalSupply; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account)override external view returns (uint256) { return _balances[account]; } /** * @dev See {BEP20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) override external returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) override external view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) override external returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) override external returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); 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 {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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 {BEP20-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 returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } function updateTaxWallets(address a1, address a2) external onlyOwner{ taxWallet1 =a1; taxWallet2 =a2; } function setThreshHOld(uint256 num) external onlyOwner{ threshhold = num*10**uint256(_decimals); } /** * @dev Burn `amount` tokens and decreasing the total supply. */ function burn(uint256 amount) public returns (bool) { _burn(_msgSender(), amount); return true; } function enableLiquiditySwap(bool action) external onlyOwner{ liquidityEnb=action; } function addToexcluded(address ad) public onlyOwner{ taxExclusion[ad]=true; } function removeExcluded(address ad) public onlyOwner{ taxExclusion[ad]=false; } function updateTaxes(uint256 a, uint256 b, uint256 liquidity) public onlyOwner{ taxA =a; taxB=b; liquidityTax=liquidity; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); if(taxExclusion[sender] || taxExclusion[recipient]){ _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); }else{ if(sender!=address(uniswapV2Pair) && sender!=address(uniswapV2Router) && _balances[address(this)]>=threshhold && liquidityEnb){ swapTax(); autoLiquidity(); } _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); uint256 AMTLiq = (amount.mul(liquidityTax)).div(100); uint256 AMTtaxA = (amount.mul(taxA)).div(100); uint256 AMTtaxB = (amount.mul(taxB)).div(100); amount=amount.sub(AMTLiq).sub(AMTtaxA).sub(AMTtaxB); _balances[recipient] = _balances[recipient].add(amount); _balances[address(this)]=_balances[address(this)].add(AMTLiq); _balances[taxWallet1] =_balances[taxWallet1].add(AMTtaxA); _balances[taxWallet2] =_balances[taxWallet2].add(AMTtaxB); emit Transfer(sender, recipient, amount); emit Transfer(sender,address(this),AMTLiq); emit Transfer(sender,taxWallet1,AMTtaxA); emit Transfer(sender,taxWallet2,AMTtaxB); } } function autoLiquidity() internal protecc{ uint256 balanceBeforeSelling = address(this).balance; uint256 tokensToSell = _balances[address(this)].div(2); uint256 remainingTokens = _balances[address(this)].sub(tokensToSell); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokensToSell); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokensToSell, 0, path, address(this), block.timestamp ); uint256 remainderAfterSelling = address(this).balance.sub(balanceBeforeSelling); _approve(address(this), address(uniswapV2Router), remainingTokens); uniswapV2Router.addLiquidityETH{value:remainderAfterSelling}(address(this), remainingTokens, 0, 0, owner(), block.timestamp); } function swapTax() internal protecc{ uint256 taxCollected=_balances[taxWallet1]; _balances[taxWallet1] = _balances[taxWallet1].sub(taxCollected); _balances[address(this)] = _balances[address(this)].add(taxCollected); //emit Transfer(devWallet,address(this),taxWallet1); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), taxCollected); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( taxCollected, 0, path, taxWallet1, block.timestamp ); taxCollected=_balances[taxWallet2]; _balances[taxWallet2] = _balances[taxWallet2].sub(taxCollected); _balances[address(this)] = _balances[address(this)].add(taxCollected); _approve(address(this), address(uniswapV2Router), taxCollected); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( taxCollected, 0, path, taxWallet2, block.timestamp ); } receive() external payable{} function withdrawAllEth() external onlyOwner protecc payable{ bool sent=payable(owner()).send(address(this).balance); require(sent,"tx failed"); } /** * @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 { require(account != address(0), "BEP20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"_decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"_name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"_symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addToexcluded","inputs":[{"type":"address","name":"ad","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableLiquiditySwap","inputs":[{"type":"bool","name":"action","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"liquidityEnb","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityTax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeExcluded","inputs":[{"type":"address","name":"ad","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setThreshHOld","inputs":[{"type":"uint256","name":"num","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"taxA","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"taxB","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"taxExclusion","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"taxWallet1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"taxWallet2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"threshhold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"uniswapV2Pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapV2Router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateTaxWallets","inputs":[{"type":"address","name":"a1","internalType":"address"},{"type":"address","name":"a2","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateTaxes","inputs":[{"type":"uint256","name":"a","internalType":"uint256"},{"type":"uint256","name":"b","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"withdrawAllEth","inputs":[]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60c06040526002600555600560065560056007556000600d60146101000a81548160ff0219169083151502179055503480156200003b57600080fd5b5060006200004e620004f460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600881526020017f556e72656b747573000000000000000000000000000000000000000000000000815250600b908162000132919062000776565b506040518060400160405280600481526020017f52454b5400000000000000000000000000000000000000000000000000000000815250600a908162000179919062000776565b506012600960006101000a81548160ff021916908360ff1602179055506a034f086f3b33b684000000600481905550600454600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000739695906b4502d5397e6d21ff222e2c1a9e5654a990508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000253573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002799190620008c7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003079190620008c7565b6040518363ffffffff1660e01b8152600401620003269291906200090a565b6020604051808303816000875af115801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c9190620008c7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620004e5919062000948565b60405180910390a35062000965565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057e57607f821691505b60208210810362000594576200059362000536565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005bf565b6200060a8683620005bf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000657620006516200064b8462000622565b6200062c565b62000622565b9050919050565b6000819050919050565b620006738362000636565b6200068b62000682826200065e565b848454620005cc565b825550505050565b600090565b620006a262000693565b620006af81848462000668565b505050565b5b81811015620006d757620006cb60008262000698565b600181019050620006b5565b5050565b601f8211156200072657620006f0816200059a565b620006fb84620005af565b810160208510156200070b578190505b620007236200071a85620005af565b830182620006b4565b50505b505050565b600082821c905092915050565b60006200074b600019846008026200072b565b1980831691505092915050565b600062000766838362000738565b9150826002028217905092915050565b6200078182620004fc565b67ffffffffffffffff8111156200079d576200079c62000507565b5b620007a9825462000565565b620007b6828285620006db565b600060209050601f831160018114620007ee5760008415620007d9578287015190505b620007e5858262000758565b86555062000855565b601f198416620007fe866200059a565b60005b82811015620008285784890151825560018201915060208501945060208101905062000801565b8683101562000848578489015162000844601f89168262000738565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200088f8262000862565b9050919050565b620008a18162000882565b8114620008ad57600080fd5b50565b600081519050620008c18162000896565b92915050565b600060208284031215620008e057620008df6200085d565b5b6000620008f084828501620008b0565b91505092915050565b620009048162000882565b82525050565b6000604082019050620009216000830185620008f9565b620009306020830184620008f9565b9392505050565b620009428162000622565b82525050565b60006020820190506200095f600083018462000937565b92915050565b60805160a05161445f620009df60003960008181610d0a0152611c9c01526000818161093c01528181611cf301528181612a0501528181612ae601528181612b0d01528181612d9901528181612dc001528181612fff015281816130e001528181613107015281816131b601526131dd015261445f6000f3fe6080604052600436106102135760003560e01c8063715018a611610118578063b09f1266116100a0578063d28d88521161006f578063d28d8852146107a5578063dd62ed3e146107d0578063e39111ab1461080d578063f2e76c2514610838578063f2fde38b146108615761021a565b8063b09f1266146106fb578063b97928a014610726578063be617fa01461074f578063cbe2de711461077a5761021a565b806395d89b41116100e757806395d89b411461060257806397636acd1461062d578063a457c2d714610656578063a9059cbb14610693578063ac898f02146106d05761021a565b8063715018a61461056c5780638457584114610583578063893d20e8146105ac5780638da5cb5b146105d75761021a565b8063313ce5671161019b57806342966c681161016a57806342966c681461049257806349bd5a5e146104cf578063519af30e146104fa578063626540781461050457806370a082311461052f5761021a565b8063313ce567146103d457806332424aa3146103ff578063395093511461042a57806341161fa0146104675761021a565b806318fe3fb3116101e257806318fe3fb3146102dd5780631cc13fe61461031a5780632321ad091461034357806323b872dd1461036c578063253ff786146103a95761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806318160ddd146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088a565b60405161024191906134b0565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c919061356b565b61091c565b60405161027e91906135c6565b60405180910390f35b34801561029357600080fd5b5061029c61093a565b6040516102a99190613640565b60405180910390f35b3480156102be57600080fd5b506102c761095e565b6040516102d4919061366a565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613685565b610968565b60405161031191906135c6565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613685565b610988565b005b34801561034f57600080fd5b5061036a600480360381019061036591906136de565b610a78565b005b34801561037857600080fd5b50610393600480360381019061038e919061370b565b610b2a565b6040516103a091906135c6565b60405180910390f35b3480156103b557600080fd5b506103be610c03565b6040516103cb919061366a565b60405180910390f35b3480156103e057600080fd5b506103e9610c09565b6040516103f6919061377a565b60405180910390f35b34801561040b57600080fd5b50610414610c20565b604051610421919061377a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061356b565b610c33565b60405161045e91906135c6565b60405180910390f35b34801561047357600080fd5b5061047c610ce6565b604051610489919061366a565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613795565b610cec565b6040516104c691906135c6565b60405180910390f35b3480156104db57600080fd5b506104e4610d08565b6040516104f191906137d1565b60405180910390f35b610502610d2c565b005b34801561051057600080fd5b50610519610e7a565b60405161052691906135c6565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613685565b610e8d565b604051610563919061366a565b60405180910390f35b34801561057857600080fd5b50610581610ed6565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906137ec565b611029565b005b3480156105b857600080fd5b506105c1611144565b6040516105ce91906137d1565b60405180910390f35b3480156105e357600080fd5b506105ec611153565b6040516105f991906137d1565b60405180910390f35b34801561060e57600080fd5b5061061761117c565b60405161062491906134b0565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613795565b61120e565b005b34801561066257600080fd5b5061067d6004803603810190610678919061356b565b6112d6565b60405161068a91906135c6565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061356b565b6113a3565b6040516106c791906135c6565b60405180910390f35b3480156106dc57600080fd5b506106e56113c1565b6040516106f2919061366a565b60405180910390f35b34801561070757600080fd5b506107106113c7565b60405161071d91906134b0565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190613685565b611455565b005b34801561075b57600080fd5b50610764611545565b604051610771919061366a565b60405180910390f35b34801561078657600080fd5b5061078f61154b565b60405161079c91906137d1565b60405180910390f35b3480156107b157600080fd5b506107ba611571565b6040516107c791906134b0565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906137ec565b6115ff565b604051610804919061366a565b60405180910390f35b34801561081957600080fd5b50610822611686565b60405161082f91906137d1565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061382c565b6116ac565b005b34801561086d57600080fd5b5061088860048036038101906108839190613685565b61175b565b005b6060600b8054610899906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546108c5906138ae565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b5050505050905090565b60006109306109296117fc565b8484611804565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b60036020528060005260406000206000915054906101000a900460ff1681565b6109906117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a149061392b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610a806117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b049061392b565b60405180910390fd5b80600d60146101000a81548160ff02191690831515021790555050565b6000610b378484846119cd565b610bf884610b436117fc565b610bf38560405180606001604052806028815260200161439560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ba96117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b611804565b600190509392505050565b60075481565b6000600960009054906101000a900460ff16905090565b600960009054906101000a900460ff1681565b6000610cdc610c406117fc565b84610cd78560026000610c516117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b611804565b6001905092915050565b60085481565b6000610cff610cf96117fc565b836124a8565b60019050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d346117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061392b565b60405180910390fd5b6001600d60156101000a81548160ff0219169083151502179055506000610de6611153565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613997565b60405180910390fd5b506000600d60156101000a81548160ff021916908315150217905550565b600d60149054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ede6117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061392b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110316117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061392b565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600061114e611153565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461118b906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546111b7906138ae565b80156112045780601f106111d957610100808354040283529160200191611204565b820191906000526020600020905b8154815290600101906020018083116111e757829003601f168201915b5050505050905090565b6112166117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061392b565b60405180910390fd5b600960009054906101000a900460ff1660ff16600a6112c29190613b19565b816112cd9190613b64565b60088190555050565b60006113996112e36117fc565b84611394856040518060600160405280602581526020016143e3602591396002600061130d6117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b611804565b6001905092915050565b60006113b76113b06117fc565b84846119cd565b6001905092915050565b60065481565b600a80546113d4906138ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611400906138ae565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b505050505081565b61145d6117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e19061392b565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60055481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b805461157e906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546115aa906138ae565b80156115f75780601f106115cc576101008083540402835291602001916115f7565b820191906000526020600020905b8154815290600101906020018083116115da57829003601f168201915b505050505081565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116b46117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061392b565b60405180910390fd5b826006819055508160078190555080600581905550505050565b6117636117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061392b565b60405180910390fd5b6117f98161264b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613c18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613caa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119c0919061366a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613d3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613dce565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b4c5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c9a57611bbd816040518060600160405280602681526020016143bd60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c5281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123e1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8f5750600854600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611da75750600d60149054906101000a900460ff165b15611dbd57611db4612777565b611dbc612e93565b5b611e29816040518060600160405280602681526020016143bd60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611e966064611e88600554856132af90919063ffffffff16565b61332990919063ffffffff16565b90506000611ec26064611eb4600654866132af90919063ffffffff16565b61332990919063ffffffff16565b90506000611eee6064611ee0600754876132af90919063ffffffff16565b61332990919063ffffffff16565b9050611f2781611f1984611f0b878961337390919063ffffffff16565b61337390919063ffffffff16565b61337390919063ffffffff16565b9350611f7b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061201083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120c78260016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b60016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a08160016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b60016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612262919061366a565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516122c7919061366a565b60405180910390a3600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234e919061366a565b60405180910390a3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123d5919061366a565b60405180910390a35050505b505050565b600083831115829061242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242591906134b0565b60405180910390fd5b506000838561243d9190613dee565b9050809150509392505050565b60008082846124599190613e22565b90508381101561249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249590613ea2565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90613f34565b60405180910390fd5b6125838160405180606001604052806022815260200161440860229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125db8160045461337390919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161263f919061366a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190613fc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600d60156101000a81548160ff021916908315150217905550600060016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061286c8160016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b60016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff81111561298357612982613fe6565b5b6040519080825280602002602001820160405280156129b15781602001602082028036833780820191505090505b50905030816000815181106129c9576129c8614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a929190614059565b81600181518110612aa657612aa5614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b0b307f000000000000000000000000000000000000000000000000000000000000000084611804565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b8f95949392919061417f565b600060405180830381600087803b158015612ba957600080fd5b505af1158015612bbd573d6000803e3d6000fd5b5050505060016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150612c998260016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b60016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d5082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dbe307f000000000000000000000000000000000000000000000000000000000000000084611804565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e4295949392919061417f565b600060405180830381600087803b158015612e5c57600080fd5b505af1158015612e70573d6000803e3d6000fd5b5050505050506000600d60156101000a81548160ff021916908315150217905550565b6001600d60156101000a81548160ff02191690831515021790555060004790506000612f086002600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b90506000612f5e82600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b90506000600267ffffffffffffffff811115612f7d57612f7c613fe6565b5b604051908082528060200260200182016040528015612fab5781602001602082028036833780820191505090505b5090503081600081518110612fc357612fc2614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308c9190614059565b816001815181106130a05761309f614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613105307f000000000000000000000000000000000000000000000000000000000000000085611804565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161316795949392919061417f565b600060405180830381600087803b15801561318157600080fd5b505af1158015613195573d6000803e3d6000fd5b5050505060006131ae854761337390919063ffffffff16565b90506131db307f000000000000000000000000000000000000000000000000000000000000000085611804565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823086600080613225611153565b426040518863ffffffff1660e01b8152600401613247969594939291906141d9565b60606040518083038185885af1158015613265573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061328a919061424f565b50505050505050506000600d60156101000a81548160ff021916908315150217905550565b60008083036132c15760009050613323565b600082846132cf9190613b64565b90508284826132de91906142d1565b1461331e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331590614374565b60405180910390fd5b809150505b92915050565b600061336b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133bd565b905092915050565b60006133b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123e6565b905092915050565b60008083118290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb91906134b0565b60405180910390fd5b506000838561341391906142d1565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561345a57808201518184015260208101905061343f565b60008484015250505050565b6000601f19601f8301169050919050565b600061348282613420565b61348c818561342b565b935061349c81856020860161343c565b6134a581613466565b840191505092915050565b600060208201905081810360008301526134ca8184613477565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613502826134d7565b9050919050565b613512816134f7565b811461351d57600080fd5b50565b60008135905061352f81613509565b92915050565b6000819050919050565b61354881613535565b811461355357600080fd5b50565b6000813590506135658161353f565b92915050565b60008060408385031215613582576135816134d2565b5b600061359085828601613520565b92505060206135a185828601613556565b9150509250929050565b60008115159050919050565b6135c0816135ab565b82525050565b60006020820190506135db60008301846135b7565b92915050565b6000819050919050565b60006136066136016135fc846134d7565b6135e1565b6134d7565b9050919050565b6000613618826135eb565b9050919050565b600061362a8261360d565b9050919050565b61363a8161361f565b82525050565b60006020820190506136556000830184613631565b92915050565b61366481613535565b82525050565b600060208201905061367f600083018461365b565b92915050565b60006020828403121561369b5761369a6134d2565b5b60006136a984828501613520565b91505092915050565b6136bb816135ab565b81146136c657600080fd5b50565b6000813590506136d8816136b2565b92915050565b6000602082840312156136f4576136f36134d2565b5b6000613702848285016136c9565b91505092915050565b600080600060608486031215613724576137236134d2565b5b600061373286828701613520565b935050602061374386828701613520565b925050604061375486828701613556565b9150509250925092565b600060ff82169050919050565b6137748161375e565b82525050565b600060208201905061378f600083018461376b565b92915050565b6000602082840312156137ab576137aa6134d2565b5b60006137b984828501613556565b91505092915050565b6137cb816134f7565b82525050565b60006020820190506137e660008301846137c2565b92915050565b60008060408385031215613803576138026134d2565b5b600061381185828601613520565b925050602061382285828601613520565b9150509250929050565b600080600060608486031215613845576138446134d2565b5b600061385386828701613556565b935050602061386486828701613556565b925050604061387586828701613556565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138c657607f821691505b6020821081036138d9576138d861387f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061391560208361342b565b9150613920826138df565b602082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b600061398160098361342b565b915061398c8261394b565b602082019050919050565b600060208201905081810360008301526139b081613974565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a3d57808604811115613a1957613a186139b7565b5b6001851615613a285780820291505b8081029050613a36856139e6565b94506139fd565b94509492505050565b600082613a565760019050613b12565b81613a645760009050613b12565b8160018114613a7a5760028114613a8457613ab3565b6001915050613b12565b60ff841115613a9657613a956139b7565b5b8360020a915084821115613aad57613aac6139b7565b5b50613b12565b5060208310610133831016604e8410600b8410161715613ae85782820a905083811115613ae357613ae26139b7565b5b613b12565b613af584848460016139f3565b92509050818404811115613b0c57613b0b6139b7565b5b81810290505b9392505050565b6000613b2482613535565b9150613b2f83613535565b9250613b5c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a46565b905092915050565b6000613b6f82613535565b9150613b7a83613535565b9250828202613b8881613535565b91508282048414831517613b9f57613b9e6139b7565b5b5092915050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c0260248361342b565b9150613c0d82613ba6565b604082019050919050565b60006020820190508181036000830152613c3181613bf5565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c9460228361342b565b9150613c9f82613c38565b604082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d2660258361342b565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613db860238361342b565b9150613dc382613d5c565b604082019050919050565b60006020820190508181036000830152613de781613dab565b9050919050565b6000613df982613535565b9150613e0483613535565b9250828203905081811115613e1c57613e1b6139b7565b5b92915050565b6000613e2d82613535565b9150613e3883613535565b9250828201905080821115613e5057613e4f6139b7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e8c601b8361342b565b9150613e9782613e56565b602082019050919050565b60006020820190508181036000830152613ebb81613e7f565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f1e60218361342b565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb060268361342b565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061405381613509565b92915050565b60006020828403121561406f5761406e6134d2565b5b600061407d84828501614044565b91505092915050565b6000819050919050565b60006140ab6140a66140a184614086565b6135e1565b613535565b9050919050565b6140bb81614090565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140f6816134f7565b82525050565b600061410883836140ed565b60208301905092915050565b6000602082019050919050565b600061412c826140c1565b61413681856140cc565b9350614141836140dd565b8060005b8381101561417257815161415988826140fc565b975061416483614114565b925050600181019050614145565b5085935050505092915050565b600060a082019050614194600083018861365b565b6141a160208301876140b2565b81810360408301526141b38186614121565b90506141c260608301856137c2565b6141cf608083018461365b565b9695505050505050565b600060c0820190506141ee60008301896137c2565b6141fb602083018861365b565b61420860408301876140b2565b61421560608301866140b2565b61422260808301856137c2565b61422f60a083018461365b565b979650505050505050565b6000815190506142498161353f565b92915050565b600080600060608486031215614268576142676134d2565b5b60006142768682870161423a565b93505060206142878682870161423a565b92505060406142988682870161423a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142dc82613535565b91506142e783613535565b9250826142f7576142f66142a2565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061435e60218361342b565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b905091905056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220058c9167e57b3740bf9fd90e6f3f99d1729433354266296cf63ff518524b8aff64736f6c63430008110033
Deployed ByteCode
0x6080604052600436106102135760003560e01c8063715018a611610118578063b09f1266116100a0578063d28d88521161006f578063d28d8852146107a5578063dd62ed3e146107d0578063e39111ab1461080d578063f2e76c2514610838578063f2fde38b146108615761021a565b8063b09f1266146106fb578063b97928a014610726578063be617fa01461074f578063cbe2de711461077a5761021a565b806395d89b41116100e757806395d89b411461060257806397636acd1461062d578063a457c2d714610656578063a9059cbb14610693578063ac898f02146106d05761021a565b8063715018a61461056c5780638457584114610583578063893d20e8146105ac5780638da5cb5b146105d75761021a565b8063313ce5671161019b57806342966c681161016a57806342966c681461049257806349bd5a5e146104cf578063519af30e146104fa578063626540781461050457806370a082311461052f5761021a565b8063313ce567146103d457806332424aa3146103ff578063395093511461042a57806341161fa0146104675761021a565b806318fe3fb3116101e257806318fe3fb3146102dd5780631cc13fe61461031a5780632321ad091461034357806323b872dd1461036c578063253ff786146103a95761021a565b806306fdde031461021f578063095ea7b31461024a5780631694505e1461028757806318160ddd146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088a565b60405161024191906134b0565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c919061356b565b61091c565b60405161027e91906135c6565b60405180910390f35b34801561029357600080fd5b5061029c61093a565b6040516102a99190613640565b60405180910390f35b3480156102be57600080fd5b506102c761095e565b6040516102d4919061366a565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190613685565b610968565b60405161031191906135c6565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613685565b610988565b005b34801561034f57600080fd5b5061036a600480360381019061036591906136de565b610a78565b005b34801561037857600080fd5b50610393600480360381019061038e919061370b565b610b2a565b6040516103a091906135c6565b60405180910390f35b3480156103b557600080fd5b506103be610c03565b6040516103cb919061366a565b60405180910390f35b3480156103e057600080fd5b506103e9610c09565b6040516103f6919061377a565b60405180910390f35b34801561040b57600080fd5b50610414610c20565b604051610421919061377a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061356b565b610c33565b60405161045e91906135c6565b60405180910390f35b34801561047357600080fd5b5061047c610ce6565b604051610489919061366a565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613795565b610cec565b6040516104c691906135c6565b60405180910390f35b3480156104db57600080fd5b506104e4610d08565b6040516104f191906137d1565b60405180910390f35b610502610d2c565b005b34801561051057600080fd5b50610519610e7a565b60405161052691906135c6565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613685565b610e8d565b604051610563919061366a565b60405180910390f35b34801561057857600080fd5b50610581610ed6565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906137ec565b611029565b005b3480156105b857600080fd5b506105c1611144565b6040516105ce91906137d1565b60405180910390f35b3480156105e357600080fd5b506105ec611153565b6040516105f991906137d1565b60405180910390f35b34801561060e57600080fd5b5061061761117c565b60405161062491906134b0565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613795565b61120e565b005b34801561066257600080fd5b5061067d6004803603810190610678919061356b565b6112d6565b60405161068a91906135c6565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061356b565b6113a3565b6040516106c791906135c6565b60405180910390f35b3480156106dc57600080fd5b506106e56113c1565b6040516106f2919061366a565b60405180910390f35b34801561070757600080fd5b506107106113c7565b60405161071d91906134b0565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190613685565b611455565b005b34801561075b57600080fd5b50610764611545565b604051610771919061366a565b60405180910390f35b34801561078657600080fd5b5061078f61154b565b60405161079c91906137d1565b60405180910390f35b3480156107b157600080fd5b506107ba611571565b6040516107c791906134b0565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906137ec565b6115ff565b604051610804919061366a565b60405180910390f35b34801561081957600080fd5b50610822611686565b60405161082f91906137d1565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061382c565b6116ac565b005b34801561086d57600080fd5b5061088860048036038101906108839190613685565b61175b565b005b6060600b8054610899906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546108c5906138ae565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b5050505050905090565b60006109306109296117fc565b8484611804565b6001905092915050565b7f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a981565b6000600454905090565b60036020528060005260406000206000915054906101000a900460ff1681565b6109906117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a149061392b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610a806117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b049061392b565b60405180910390fd5b80600d60146101000a81548160ff02191690831515021790555050565b6000610b378484846119cd565b610bf884610b436117fc565b610bf38560405180606001604052806028815260200161439560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ba96117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b611804565b600190509392505050565b60075481565b6000600960009054906101000a900460ff16905090565b600960009054906101000a900460ff1681565b6000610cdc610c406117fc565b84610cd78560026000610c516117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b611804565b6001905092915050565b60085481565b6000610cff610cf96117fc565b836124a8565b60019050919050565b7f000000000000000000000000b5736fc350043b6b027cb346552b0275fc8fd1e181565b610d346117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061392b565b60405180910390fd5b6001600d60156101000a81548160ff0219169083151502179055506000610de6611153565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613997565b60405180910390fd5b506000600d60156101000a81548160ff021916908315150217905550565b600d60149054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ede6117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061392b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110316117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061392b565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600061114e611153565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461118b906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546111b7906138ae565b80156112045780601f106111d957610100808354040283529160200191611204565b820191906000526020600020905b8154815290600101906020018083116111e757829003601f168201915b5050505050905090565b6112166117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061392b565b60405180910390fd5b600960009054906101000a900460ff1660ff16600a6112c29190613b19565b816112cd9190613b64565b60088190555050565b60006113996112e36117fc565b84611394856040518060600160405280602581526020016143e3602591396002600061130d6117fc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b611804565b6001905092915050565b60006113b76113b06117fc565b84846119cd565b6001905092915050565b60065481565b600a80546113d4906138ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611400906138ae565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b505050505081565b61145d6117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e19061392b565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60055481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b805461157e906138ae565b80601f01602080910402602001604051908101604052809291908181526020018280546115aa906138ae565b80156115f75780601f106115cc576101008083540402835291602001916115f7565b820191906000526020600020905b8154815290600101906020018083116115da57829003601f168201915b505050505081565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116b46117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117389061392b565b60405180910390fd5b826006819055508160078190555080600581905550505050565b6117636117fc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061392b565b60405180910390fd5b6117f98161264b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613c18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990613caa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119c0919061366a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390613d3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613dce565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b4c5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c9a57611bbd816040518060600160405280602681526020016143bd60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c5281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123e1565b7f000000000000000000000000b5736fc350043b6b027cb346552b0275fc8fd1e173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4257507f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8f5750600854600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015611da75750600d60149054906101000a900460ff165b15611dbd57611db4612777565b611dbc612e93565b5b611e29816040518060600160405280602681526020016143bd60269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611e966064611e88600554856132af90919063ffffffff16565b61332990919063ffffffff16565b90506000611ec26064611eb4600654866132af90919063ffffffff16565b61332990919063ffffffff16565b90506000611eee6064611ee0600754876132af90919063ffffffff16565b61332990919063ffffffff16565b9050611f2781611f1984611f0b878961337390919063ffffffff16565b61337390919063ffffffff16565b61337390919063ffffffff16565b9350611f7b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061201083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120c78260016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b60016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121a08160016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b60016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612262919061366a565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516122c7919061366a565b60405180910390a3600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161234e919061366a565b60405180910390a3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123d5919061366a565b60405180910390a35050505b505050565b600083831115829061242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242591906134b0565b60405180910390fd5b506000838561243d9190613dee565b9050809150509392505050565b60008082846124599190613e22565b90508381101561249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249590613ea2565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90613f34565b60405180910390fd5b6125838160405180606001604052806022815260200161440860229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123e69092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125db8160045461337390919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161263f919061366a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190613fc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600d60156101000a81548160ff021916908315150217905550600060016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061286c8160016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b60016000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff81111561298357612982613fe6565b5b6040519080825280602002602001820160405280156129b15781602001602082028036833780820191505090505b50905030816000815181106129c9576129c8614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a929190614059565b81600181518110612aa657612aa5614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b0b307f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a984611804565b7f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b8f95949392919061417f565b600060405180830381600087803b158015612ba957600080fd5b505af1158015612bbd573d6000803e3d6000fd5b5050505060016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150612c998260016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b60016000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d5082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dbe307f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a984611804565b7f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e4295949392919061417f565b600060405180830381600087803b158015612e5c57600080fd5b505af1158015612e70573d6000803e3d6000fd5b5050505050506000600d60156101000a81548160ff021916908315150217905550565b6001600d60156101000a81548160ff02191690831515021790555060004790506000612f086002600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b90506000612f5e82600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461337390919063ffffffff16565b90506000600267ffffffffffffffff811115612f7d57612f7c613fe6565b5b604051908082528060200260200182016040528015612fab5781602001602082028036833780820191505090505b5090503081600081518110612fc357612fc2614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308c9190614059565b816001815181106130a05761309f614015565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613105307f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a985611804565b7f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161316795949392919061417f565b600060405180830381600087803b15801561318157600080fd5b505af1158015613195573d6000803e3d6000fd5b5050505060006131ae854761337390919063ffffffff16565b90506131db307f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a985611804565b7f0000000000000000000000009695906b4502d5397e6d21ff222e2c1a9e5654a973ffffffffffffffffffffffffffffffffffffffff1663f305d719823086600080613225611153565b426040518863ffffffff1660e01b8152600401613247969594939291906141d9565b60606040518083038185885af1158015613265573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061328a919061424f565b50505050505050506000600d60156101000a81548160ff021916908315150217905550565b60008083036132c15760009050613323565b600082846132cf9190613b64565b90508284826132de91906142d1565b1461331e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331590614374565b60405180910390fd5b809150505b92915050565b600061336b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133bd565b905092915050565b60006133b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123e6565b905092915050565b60008083118290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb91906134b0565b60405180910390fd5b506000838561341391906142d1565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561345a57808201518184015260208101905061343f565b60008484015250505050565b6000601f19601f8301169050919050565b600061348282613420565b61348c818561342b565b935061349c81856020860161343c565b6134a581613466565b840191505092915050565b600060208201905081810360008301526134ca8184613477565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613502826134d7565b9050919050565b613512816134f7565b811461351d57600080fd5b50565b60008135905061352f81613509565b92915050565b6000819050919050565b61354881613535565b811461355357600080fd5b50565b6000813590506135658161353f565b92915050565b60008060408385031215613582576135816134d2565b5b600061359085828601613520565b92505060206135a185828601613556565b9150509250929050565b60008115159050919050565b6135c0816135ab565b82525050565b60006020820190506135db60008301846135b7565b92915050565b6000819050919050565b60006136066136016135fc846134d7565b6135e1565b6134d7565b9050919050565b6000613618826135eb565b9050919050565b600061362a8261360d565b9050919050565b61363a8161361f565b82525050565b60006020820190506136556000830184613631565b92915050565b61366481613535565b82525050565b600060208201905061367f600083018461365b565b92915050565b60006020828403121561369b5761369a6134d2565b5b60006136a984828501613520565b91505092915050565b6136bb816135ab565b81146136c657600080fd5b50565b6000813590506136d8816136b2565b92915050565b6000602082840312156136f4576136f36134d2565b5b6000613702848285016136c9565b91505092915050565b600080600060608486031215613724576137236134d2565b5b600061373286828701613520565b935050602061374386828701613520565b925050604061375486828701613556565b9150509250925092565b600060ff82169050919050565b6137748161375e565b82525050565b600060208201905061378f600083018461376b565b92915050565b6000602082840312156137ab576137aa6134d2565b5b60006137b984828501613556565b91505092915050565b6137cb816134f7565b82525050565b60006020820190506137e660008301846137c2565b92915050565b60008060408385031215613803576138026134d2565b5b600061381185828601613520565b925050602061382285828601613520565b9150509250929050565b600080600060608486031215613845576138446134d2565b5b600061385386828701613556565b935050602061386486828701613556565b925050604061387586828701613556565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138c657607f821691505b6020821081036138d9576138d861387f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061391560208361342b565b9150613920826138df565b602082019050919050565b6000602082019050818103600083015261394481613908565b9050919050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b600061398160098361342b565b915061398c8261394b565b602082019050919050565b600060208201905081810360008301526139b081613974565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a3d57808604811115613a1957613a186139b7565b5b6001851615613a285780820291505b8081029050613a36856139e6565b94506139fd565b94509492505050565b600082613a565760019050613b12565b81613a645760009050613b12565b8160018114613a7a5760028114613a8457613ab3565b6001915050613b12565b60ff841115613a9657613a956139b7565b5b8360020a915084821115613aad57613aac6139b7565b5b50613b12565b5060208310610133831016604e8410600b8410161715613ae85782820a905083811115613ae357613ae26139b7565b5b613b12565b613af584848460016139f3565b92509050818404811115613b0c57613b0b6139b7565b5b81810290505b9392505050565b6000613b2482613535565b9150613b2f83613535565b9250613b5c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a46565b905092915050565b6000613b6f82613535565b9150613b7a83613535565b9250828202613b8881613535565b91508282048414831517613b9f57613b9e6139b7565b5b5092915050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c0260248361342b565b9150613c0d82613ba6565b604082019050919050565b60006020820190508181036000830152613c3181613bf5565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c9460228361342b565b9150613c9f82613c38565b604082019050919050565b60006020820190508181036000830152613cc381613c87565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d2660258361342b565b9150613d3182613cca565b604082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613db860238361342b565b9150613dc382613d5c565b604082019050919050565b60006020820190508181036000830152613de781613dab565b9050919050565b6000613df982613535565b9150613e0483613535565b9250828203905081811115613e1c57613e1b6139b7565b5b92915050565b6000613e2d82613535565b9150613e3883613535565b9250828201905080821115613e5057613e4f6139b7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e8c601b8361342b565b9150613e9782613e56565b602082019050919050565b60006020820190508181036000830152613ebb81613e7f565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f1e60218361342b565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb060268361342b565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061405381613509565b92915050565b60006020828403121561406f5761406e6134d2565b5b600061407d84828501614044565b91505092915050565b6000819050919050565b60006140ab6140a66140a184614086565b6135e1565b613535565b9050919050565b6140bb81614090565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140f6816134f7565b82525050565b600061410883836140ed565b60208301905092915050565b6000602082019050919050565b600061412c826140c1565b61413681856140cc565b9350614141836140dd565b8060005b8381101561417257815161415988826140fc565b975061416483614114565b925050600181019050614145565b5085935050505092915050565b600060a082019050614194600083018861365b565b6141a160208301876140b2565b81810360408301526141b38186614121565b90506141c260608301856137c2565b6141cf608083018461365b565b9695505050505050565b600060c0820190506141ee60008301896137c2565b6141fb602083018861365b565b61420860408301876140b2565b61421560608301866140b2565b61422260808301856137c2565b61422f60a083018461365b565b979650505050505050565b6000815190506142498161353f565b92915050565b600080600060608486031215614268576142676134d2565b5b60006142768682870161423a565b93505060206142878682870161423a565b92505060406142988682870161423a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142dc82613535565b91506142e783613535565b9250826142f7576142f66142a2565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061435e60218361342b565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b905091905056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220058c9167e57b3740bf9fd90e6f3f99d1729433354266296cf63ff518524b8aff64736f6c63430008110033