Contract 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfeed9297423f39295d3f05d2ba88c2a18e039f32f64f5b8e8ac57e9e65a3a8f5Approve132147612021-12-05 11:29:072 days 9 hrs ago0xa058a92c976e7a62fe87e9d12fb6fca119760a7c IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x8ba84426574dad227b107ab788a2c281eb51ffdc612e14e581501804ece0b600Approve131398742021-12-02 20:22:355 days 48 mins ago0x78eed57bcc31cf5328cc51d873d9e3ea1acf8d9c IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x70ac3e9f6e71ac0f81b08de735ac604e9ca909ddd3c489f25cc9ca1cb915dc77Approve129341102021-11-25 3:09:1812 days 18 hrs ago0x59ccedf008dca388524eb701f589ec33f8f5767e IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.000267024
0x651f583094833e046c153bb90642df044d273bf78f0c50570cf6999331f520f6Approve128653572021-11-22 15:24:3515 days 5 hrs ago0x2357a326259a896667e0460fd00c39df6b4843de IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.0000728
0xf252b947e0a364aa53a7b67ac5b9a332c08df84f88b51aff31fae8d6d2f04a47Approve128282352021-11-21 7:35:5116 days 13 hrs ago0x0be8f7c5041bcba4ea7e7aa633ade36a83c5b5a1 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.0000728
0x171c94ed16eb29d8deb8eeaa9c0775eede250d8214f65165920dd5e3322a43aeApprove128133352021-11-20 19:03:3117 days 2 hrs ago0x6992e4412f139537513631be32338930340428d9 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x2fe110893dd65a167f41f26f75e3a2157d0ef64c73465743fc5199f79c63adc4Approve127572712021-11-18 18:18:2519 days 2 hrs ago0xa29bb84537274fc2160d3a25645f53b733492e88 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x1b1ce1c5b7987605211e8c8bbee4facbf8d8c8a779d4efe67f86c820602cc1edApprove126717872021-11-15 14:49:5622 days 6 hrs ago0xafc0e1335d9bed6c96329cb0484c182f8cf26ee8 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.0000728
0xec3af933b2a24ec68098ab4c2a3b4892cc4582c6f7cd6b20e7b524c3d035b5f1Approve126000022021-11-13 0:44:4124 days 20 hrs ago0x29dabec73a0c078450adf2b3e7765f553516a320 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x939d7df97f6f6117e00610ca2d0940c32305623c0ff6b326ea63091196b8dd7aApprove125818622021-11-12 8:58:1325 days 12 hrs ago0x04ca31e784ee4a95d3d1c5864a0a667bf95effcd IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xd0f000cfcd206f6b082b806b4e616d37dee12010676b39051ed8b907938a4941Approve125646562021-11-11 18:15:3626 days 2 hrs ago0xb98f6c4380e74e7ce079abbbd5cd484c33501296 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.000311528
0x9f77739f729dfdd88069b72850da61d687778e5ffc23123fcd62f93867c39e3aApprove124930262021-11-09 4:39:2128 days 16 hrs ago0xef67cbbad12bf3b869d8e01c4db9bc15ddae2f3d IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x4e837dfc3b5b9a91626c5e26d91ed9da850ceb6a98ba3ee8c60c95bfa2748f40Approve124533752021-11-07 19:19:2930 days 1 hr ago0x83d8aeb76ddae85d7604a91f8f9ff78222dbe742 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xbc677e0eeb328252d269be15636ac6c4f3c22a781c6ec9471fda12787b04393dApprove124235222021-11-06 18:20:5331 days 2 hrs ago0x253f1ce29ef9e31bf2340bbed3eab348d311bc19 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.0000728
0x17e2c01c891502e5c256e9b6f672dc47deebd032cb2e89a532008cde57d1252dApprove124170772021-11-06 12:48:5431 days 8 hrs ago0x797e35205d5854e09765e50827a5b2f80abdf0f9 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xac53f0a79c054650ab8d83e9c72cbc3f782f45c2a075a0f9c7d5ff4718ef56f7Approve124102912021-11-06 7:07:5131 days 14 hrs ago0x5c10b803224ff31011d4db8c69a1aa48a3fea531 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x15c79fe7aff01b393496aa6aabf53ee208824c1c9e0fecc641eb3170dd256670Approve123689262021-11-04 20:14:5133 days 55 mins ago0x9f457c36856027e309717f8cd66047758cfc10a1 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.000311528
0xbb7673c90b003074b960b9f20c0d48d0e3d0ffb2924cf1298e3a9f14f85c6c75Approve123159832021-11-02 22:11:2934 days 22 hrs ago0x1ea4bac2de1036fdb19efba2826d3efc44ee10e7 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xdf7318c01358968b0c06b1c3729a534449e2107354f189a29af15612bba05fe4Approve123092912021-11-02 16:28:2935 days 4 hrs ago0x35c32424e24893b8c3ed5967106b4e7e67bfabce IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.0000728
0x6314944f7b00c0446b0b9c41f2d4fb9f13c9d5865bafbd8bd0e48ddd4c171fdcApprove122755782021-11-01 11:40:0936 days 9 hrs ago0xf97b4d9bc5e013a069502ceaae24602cc6b11308 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xdcb21cdcf54bbed4354163f87cc8efe008f801bab235ddc6dfd0d24fe3cf0dfbApprove122729772021-11-01 9:21:1836 days 11 hrs ago0x1a4f12e44ff0f831910c8a0eef1c451a5bd9276e IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x4c44db37ac33c7e7d177f9694b89079f935460e06dc1cb27ba06ee3a2d69fa26Approve122334072021-10-30 23:54:3437 days 21 hrs ago0x6990cdf7b6f805cc8fab0c6ab716abb62c2d5c03 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0x0ae01be949ce9e1a564def98c46f1d821856e24826e04bae3eb1bd0e5ecfb211Approve122091312021-10-30 3:27:2038 days 17 hrs ago0x55cefb1a0925056f79ffc30f53dfe280d8a45842 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.000267024
0x3ddb08bc7dead515e4bef0d198716893a04d7dc7edf7da88b7863ed5a8e9f8f9Approve122044772021-10-29 23:32:0038 days 21 hrs ago0xde107f634ce935b3b297d627b4330233f2ed20e1 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
0xd2b6ebb05ba37d3601afdbfb63b70b2e51bd9defc54f5de301dd2096b838de55Approve121978702021-10-29 17:42:5839 days 3 hrs ago0x4df8f63d95d3bd7b68132bbb26e1d8545cd19b60 IN  0xc6274cd1609bc8a29f2718de5c8e8872b98863d50 BNB0.00022252
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5d211cec85ddf56499fbf8a68bf1073b9eac07e66fd998e312b525ef6ca4e81a131398822021-12-02 20:22:595 days 47 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000236566731800826 BNB
0x5d211cec85ddf56499fbf8a68bf1073b9eac07e66fd998e312b525ef6ca4e81a131398822021-12-02 20:22:595 days 47 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000236566731800826 BNB
0x84c140ffd3fcfd193f0036c51b53054d6a30d4132c3991f4b37e6a06cc739d8f130852962021-11-30 20:16:037 days 54 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000237183438674475 BNB
0x84c140ffd3fcfd193f0036c51b53054d6a30d4132c3991f4b37e6a06cc739d8f130852962021-11-30 20:16:037 days 54 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000237183438674475 BNB
0xa499f95e8e5ff64629c76dd7da9cbb48395e3440193e5d562f0c15f8dc154a71130583472021-11-29 20:15:198 days 55 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.0002445420118367 BNB
0xa499f95e8e5ff64629c76dd7da9cbb48395e3440193e5d562f0c15f8dc154a71130583472021-11-29 20:15:198 days 55 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.0002445420118367 BNB
0xaee9d10037b0aaa051bbb4d546eca530058a85cfd075786429e78335b827c1a0130583432021-11-29 20:15:078 days 55 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.0002445420118367 BNB
0xaee9d10037b0aaa051bbb4d546eca530058a85cfd075786429e78335b827c1a0130583432021-11-29 20:15:078 days 55 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.0002445420118367 BNB
0xf00f096d9a4da1ddf4ceee2c35bb17126b2a4d8981ac94a42b8df284e9fdaae4130582812021-11-29 20:11:598 days 58 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000251530504602801 BNB
0xf00f096d9a4da1ddf4ceee2c35bb17126b2a4d8981ac94a42b8df284e9fdaae4130582812021-11-29 20:11:598 days 58 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000251530504602801 BNB
0x12dc56de143b3f488258cabd567fcfa57ff60394482cb816503a791da0338069129341152021-11-25 3:09:3612 days 18 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.00025477202766975 BNB
0x12dc56de143b3f488258cabd567fcfa57ff60394482cb816503a791da0338069129341152021-11-25 3:09:3612 days 18 hrs ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.00025477202766975 BNB
0xccbd72b3719f5790eb2977d9a55250b7b791e0cef82ecf7d012b49e7f98f7d52129217682021-11-24 16:16:1513 days 4 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000255777266196835 BNB
0xccbd72b3719f5790eb2977d9a55250b7b791e0cef82ecf7d012b49e7f98f7d52129217682021-11-24 16:16:1513 days 4 hrs ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000255777266196835 BNB
0x4f043fad713d64736950c25481b11d3bd001b82bcd7b1162b63fe35ba4904c61128435932021-11-21 20:48:5516 days 21 mins ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000255867297296891 BNB
0x4f043fad713d64736950c25481b11d3bd001b82bcd7b1162b63fe35ba4904c61128435932021-11-21 20:48:5516 days 21 mins ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000255867297296891 BNB
0xd3c496af6ddccc7404894a50050ba50c6186439f25ec7d45a3c71901d15ce386127269742021-11-17 15:57:0820 days 5 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000255867297296891 BNB
0xd3c496af6ddccc7404894a50050ba50c6186439f25ec7d45a3c71901d15ce386127269742021-11-17 15:57:0820 days 5 hrs ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000255867297296891 BNB
0xf0547ad7d942a473fc59326fba844908cc4d7a76496cf73170b6493f81c6bc78125646652021-11-11 18:16:0326 days 2 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000256038925094722 BNB
0xf0547ad7d942a473fc59326fba844908cc4d7a76496cf73170b6493f81c6bc78125646652021-11-11 18:16:0326 days 2 hrs ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000256038925094722 BNB
0x290afbf460c06f25a6d6338edee63d265d46dddc924aea10a66f073ad8a49f83124930352021-11-09 4:39:5228 days 16 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000257166093000288 BNB
0x290afbf460c06f25a6d6338edee63d265d46dddc924aea10a66f073ad8a49f83124930352021-11-09 4:39:5228 days 16 hrs ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.000257166093000288 BNB
0x85d889aff1dd3b3ff539ee0489009c18242706aaf95d5fa6e8792026b4a50209124533972021-11-07 19:20:3530 days 1 hr ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.00025751967331112 BNB
0x85d889aff1dd3b3ff539ee0489009c18242706aaf95d5fa6e8792026b4a50209124533972021-11-07 19:20:3530 days 1 hr ago PancakeSwap: Router v2 0xc6274cd1609bc8a29f2718de5c8e8872b98863d50.00025751967331112 BNB
0xfbe45e522be0a2234c4c8d8868e0b572b99bad600a3726402585000437fe4640124171152021-11-06 12:50:5231 days 8 hrs ago 0xc6274cd1609bc8a29f2718de5c8e8872b98863d5 PancakeSwap: Router v20.000258304048252983 BNB
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x1EDAA66d5AAA3bDA9dB24009c8577F6d96D56a43

Contract Name:
NoWarCoinCharity

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-30
*/

pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed
/*
                          .zd$$$$$$$$$$$$$$$$be.
                       .e$$$$$$$$$$$$$$$$$$$$$$$$e.
                     .$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                   .$$$$$$$$$$"" $$$$$$ ""$$$$$$$$$$$$.
                  z$$$$$$$$""     $$$$$$      "$$$$$$$$b
                 d$$$$$$$"        $$$$$$        "$$$$$$$$
                d$$$$$$"          $$$$$$          "$$$$$$$
               d$$$$$$"           $$$$$$           ^$$$$$$b
              .$$$$$$F            $$$$$$            '$$$$$$r
              d$$$$$$             $$$$$$.            $$$$$$$
              $$$$$$F           .$$$$$$$$c           4$$$$$$
              $$$$$$F          e$$$$$$$$$$$.          $$$$$$
              $$$$$$F        .$$$$$$$$$$$$$$b        .$$$$$$
              $$$$$$b       e$$$$$$$$$$$$$$$$$c      4$$$$$$
              3$$$$$$     .$$$$$$P$$$$$$$$$$$$$b.    $$$$$$P
               $$$$$$b   d$$$$$$" $$$$$$ "$$$$$$$c  d$$$$$$"
               '$$$$$$b.$$$$$$P   $$$$$$  ^*$$$$$$bd$$$$$$F
                "$$$$$$$$$$$$"    $$$$$$    "$$$$$$$$$$$$P
                 "$$$$$$$$$P      $$$$$$      $$$$$$$$$$"
                  ^$$$$$$$$$e.    $$$$$$    .e$$$$$$$$$"
                    "$$$$$$$$$$$ee$$$$$$ee$$$$$$$$$$$$
                      "$$$$$$$$$$$$$$$$$$$$$$$$$$$""
                        "$$$$$$$$$$$$$$$$$$$$$$"
                           ^"$$$$$$$$$$$$$$""
                           

███╗░░██╗░█████╗░██╗░░░░░░░██╗░█████╗░██████╗░░░█████╗░░█████╗░██╗███╗░░██╗
████╗░██║██╔══██╗██║░░██╗░░██║██╔══██╗██╔══██╗░██╔══██╗██╔══██╗██║████╗░██║
██╔██╗██║██║░░██║╚██╗████╗██╔╝███████║██████╔╝░██║░░╚═╝██║░░██║██║██╔██╗██║
██║╚████║██║░░██║░████╔═████║░██╔══██║██╔══██╗░██║░░██╗██║░░██║██║██║╚████║
██║░╚███║╚█████╔╝░╚██╔╝░╚██╔╝░██║░░██║██║░░██║░╚█████╔╝╚█████╔╝██║██║░╚███║
╚═╝░░╚══╝░╚════╝░░░╚═╝░░░╚═╝░░╚═╝░░╚═╝╚═╝░░╚═╝░░╚════╝░░╚════╝░╚═╝╚═╝░░╚══╝2.0


Website: https://www.nowarcoin.com/
Telegram: https://t.me/NoWarCoin

Do not buy until the official contract has been posted in the telegram. We are not responsible for anyone buying fake contract addresses.
Additionally, anyone buying within the first moments of deployement are accepting that they may be donating up to 100% of what they put in to our coin!
*/
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);
}
 
library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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;
}


// pragma solidity >=0.5.0;

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;
}

// pragma solidity >=0.6.2;

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);
}



// pragma solidity >=0.6.2;

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 NoWarCoinCharity is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;
   
    address payable public charityAddress = payable(0xBccc20C3eAC6Fc931AbFe5FEF3a8B0641160d88D);

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "No War Coin 2.0";
    string private _symbol = "NW2";
    uint8 private _decimals = 9;
    
    uint256 public _charityFee = 20;
    uint256 private _previousCharityFee = _charityFee;

    uint256 public _burnFee = 5;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _reflectionFee = 10;
    uint256 private _previousReflectionFee = _reflectionFee;
    
    uint256 private _taxFee = _burnFee.add(_reflectionFee);
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 private _crctLiquidityFee = 10;
    uint256 private _pcrctLiquidityFee = _crctLiquidityFee;

    uint256 private _liquidityFee = _charityFee.add(_crctLiquidityFee);
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 10000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;

    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal; 
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        //Exclude dead address from reflection
        _isExcluded[address(0)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function getliquidityFee() public view returns (uint256)
    {
        return _crctLiquidityFee;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "BEP20: burn from the zero address");

        _tOwned[address(0)] = _tOwned[address(0)].add(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setBurnFeePercent(uint256 Fee) external onlyOwner() {
        _burnFee = Fee;
        _taxFee = _burnFee.add(_reflectionFee);
    }
    
    function setCharityFeePercent(uint256 Fee) external onlyOwner() {
        _charityFee = Fee;
        _liquidityFee = _crctLiquidityFee.add(_charityFee);
    }

    function setReflectFeePercent(uint256 Fee) external onlyOwner() {
        _reflectionFee = Fee;
        _taxFee = _burnFee.add(_reflectionFee);
    }
    
    function setLiquidityFeePercent(uint256 Fee) external onlyOwner() {
        _crctLiquidityFee = Fee;
        _liquidityFee = _crctLiquidityFee.add(_charityFee);
    }
   
    function setMaxTxTokens(uint256 maxTxTokens) external onlyOwner() {
        _maxTxAmount = maxTxTokens.mul( 10**_decimals );
    }

    function setCharityAddress(address payable _charityAddress) external onlyOwner() {
        charityAddress = _charityAddress;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, bFee, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, bFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateReflectionFee(tAmount);
        uint256 bFee = calculateBurnFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(bFee);
        return (tTransferAmount, tFee, bFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 bFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rbFee = bFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rbFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**3
        );
    }

    function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionFee).div(
            10**3
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0 && 
        _charityFee == 0 && _reflectionFee == 0 && _crctLiquidityFee == 0) return;
        
        _pcrctLiquidityFee = _crctLiquidityFee; 
        _previousBurnFee = _burnFee; // burn fee
        _previousCharityFee = _charityFee; // charity fee
        _previousReflectionFee = _reflectionFee; //reflection fee
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _crctLiquidityFee = 0;
        _burnFee = 0;
        _charityFee = 0;
        _reflectionFee = 0;
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _crctLiquidityFee = _pcrctLiquidityFee;
        _burnFee = _previousBurnFee; // burn fee
        _charityFee = _previousCharityFee; // charity fee
        _reflectionFee = _previousReflectionFee; //reflection fee
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setMinTokensSendToCharity(uint256 minCharityValue) public onlyOwner()
    {
        numTokensSellToAddToLiquidity = minCharityValue;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(_isBlacklisted[from] == false, "You are banned");
        require(_isBlacklisted[to] == false, "The recipient is banned");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 tokenBalance) private lockTheSwap {
        uint256 liquidityAmount = tokenBalance;
        uint256 initialBalance = address(this).balance;

        if(_charityFee > 0)
        {
            uint256 charityAmount = tokenBalance.mul(_charityFee);
            charityAmount = charityAmount.div(_liquidityFee);
            liquidityAmount = tokenBalance.sub(charityAmount);
            swapToCharityETH(charityAddress, charityAmount);
            
            initialBalance = address(this).balance;
        }
        
        if(_crctLiquidityFee > 0)
        {
            uint256 half = liquidityAmount.div(2);
            uint256 otherHalf = liquidityAmount.sub(half);

            swapTokensForEth(half);
            
            uint256 newBalance = address(this).balance.sub(initialBalance);

            addLiquidity(otherHalf, newBalance);
            
            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
    }

    function swapToCharityETH(address payable recipient, uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            recipient,
            block.timestamp
        );
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    function blacklistSingleWallet(address addresses) public onlyOwner(){
        if(_isBlacklisted[addresses] == true) return;
        _isBlacklisted[addresses] = true;
    }

    function blacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
        }
    }
    
    function isBlacklisted(address addresses) public view returns (bool){
        if(_isBlacklisted[addresses] == true) return true;
        else return false;
    }
    
    
    function unBlacklistSingleWallet(address addresses) external onlyOwner(){
         if(_isBlacklisted[addresses] == false) return;
        _isBlacklisted[addresses] = false;
    }

    function unBlacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = false;
        }
    }

    function recoverTokens() public onlyOwner()
    {
        address recipient = _msgSender();
        uint256 tokensToRecover = balanceOf(address(this));
        uint256 currentRate =  _getRate();
        uint256 rtokensToRecover = tokensToRecover.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].sub(rtokensToRecover);
        _rOwned[recipient] = _rOwned[recipient].add(rtokensToRecover);
    }
    
    function recoverBNB() public onlyOwner()
    {
        address payable recipient = _msgSender();
        if(address(this).balance > 0)
            recipient.transfer(address(this).balance);
    }
    
    //New Pancakeswap router version?
    //No problem, just change it!
    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        uniswapV2Router = _newPancakeRouter;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minCharityValue","type":"uint256"}],"name":"setMinTokensSendToCharity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setReflectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"unBlacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b03191673bccc20c3eac6fc931abfe5fef3a8b0641160d88d17905569d3c21bcecceda1000000600b81905562000048906000196200062d565b6200005690600019620005d6565b600c5560408051808201909152600f8082526e04e6f2057617220436f696e20322e3608c1b60209092019182526200009191600e91620004ec565b5060408051808201909152600380825262272b9960e91b6020909201918252620000be91600f91620004ec565b5060108054600960ff199091161790556014601181905560128190556005601381905590819055600a601581905560168190556200010991906200047f602090811b62001c0a17901c565b601755601754601855600a601955601954601a556200013b6019546011546200047f60201b62001c0a1790919060201c565b601b819055601c55601e805460ff60a81b1916600160a81b17905569021e19e0c9bab2400000601f55681b1ae4d6e2ef5000006020553480156200017e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b815290517310ed43c718714eb63d5aa57b78b54704e256024e92839263c45a01559260048083019392829003018186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d919062000592565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a657600080fd5b505afa158015620002bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e1919062000592565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032a57600080fd5b505af11580156200033f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000365919062000592565b601e80546001600160a01b03199081166001600160a01b0393841617909155601d8054909116918316919091179055600160066000620003ad6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006835290812080548416600190811790915590805260079091527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054909216179055620004283390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200047091815260200190565b60405180910390a35062000664565b6000806200048e8385620005bb565b905083811015620004e55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b828054620004fa90620005f0565b90600052602060002090601f0160209004810192826200051e576000855562000569565b82601f106200053957805160ff191683800117855562000569565b8280016001018555821562000569579182015b82811115620005695782518255916020019190600101906200054c565b50620005779291506200057b565b5090565b5b808211156200057757600081556001016200057c565b600060208284031215620005a4578081fd5b81516001600160a01b0381168114620004e5578182fd5b60008219821115620005d157620005d16200064e565b500190565b600082821015620005eb57620005eb6200064e565b500390565b600181811c908216806200060557607f821691505b602082108114156200062757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200064957634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b6136db80620006746000396000f3fe6080604052600436106103035760003560e01c8063772558ce11610190578063b6c52324116100dc578063cea2695811610095578063ea2f0b371161006f578063ea2f0b371461091c578063f157ce401461093c578063f2fde38b1461095c578063fe575a871461097c57600080fd5b8063cea2695814610896578063dd467064146108b6578063dd62ed3e146108d657600080fd5b8063b6c5232414610801578063b74e53b014610816578063b77f39fe1461082b578063c0b0fda214610840578063c49b9a8014610856578063cad6ebf91461087657600080fd5b8063a1bdc39911610149578063a9059cbb11610123578063a9059cbb14610781578063af41063b146107a1578063afcf2fc4146107c1578063b4ba57f0146107e157600080fd5b8063a1bdc3991461072c578063a457c2d71461074c578063a69df4b51461076c57600080fd5b8063772558ce1461066a5780637d1db4a51461068a57806388f82020146106a05780638da5cb5b146106d95780638ee88c53146106f757806395d89b411461071757600080fd5b80633bd5d1731161024f5780634a74bb02116102085780635cfd7df4116101e25780635cfd7df4146106005780636bfdf8a01461062057806370a0823114610635578063715018a61461065557600080fd5b80634a74bb021461058657806352390c02146105a75780635342acb4146105c757600080fd5b80633bd5d173146104d057806340f8007a146104f057806341cb87fc14610506578063437823ec146105265780634549b0391461054657806349bd5a5e1461056657600080fd5b806323b872dd116102bc5780633206b4aa116102965780633206b4aa1461045a5780633685d4191461047057806339509351146104905780633bb48ff7146104b057600080fd5b806323b872dd146103f85780632d83811914610418578063313ce5671461043857600080fd5b806306fdde031461030f578063095ea7b31461033a5780630c9be46d1461036a57806313114a9d1461038c5780631694505e146103ab57806318160ddd146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099c565b6040516103319190613397565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461322f565b610a2e565b6040519015158152602001610331565b34801561037657600080fd5b5061038a61038536600461317f565b610a45565b005b34801561039857600080fd5b50600d545b604051908152602001610331565b3480156103b757600080fd5b50601d546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610331565b3480156103ef57600080fd5b50600b5461039d565b34801561040457600080fd5b5061035a6104133660046131ef565b610a9a565b34801561042457600080fd5b5061039d6104333660046132e4565b610b03565b34801561044457600080fd5b5060105460405160ff9091168152602001610331565b34801561046657600080fd5b5061039d60155481565b34801561047c57600080fd5b5061038a61048b36600461317f565b610b87565b34801561049c57600080fd5b5061035a6104ab36600461322f565b610d76565b3480156104bc57600080fd5b5061038a6104cb3660046132e4565b610dac565b3480156104dc57600080fd5b5061038a6104eb3660046132e4565b610dee565b3480156104fc57600080fd5b5061039d60115481565b34801561051257600080fd5b5061038a61052136600461317f565b610eda565b34801561053257600080fd5b5061038a61054136600461317f565b6110ac565b34801561055257600080fd5b5061039d6105613660046132fc565b6110fa565b34801561057257600080fd5b50601e546103cb906001600160a01b031681565b34801561059257600080fd5b50601e5461035a90600160a81b900460ff1681565b3480156105b357600080fd5b5061038a6105c236600461317f565b611189565b3480156105d357600080fd5b5061035a6105e236600461317f565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561060c57600080fd5b5061038a61061b3660046132e4565b6112dc565b34801561062c57600080fd5b5061038a611328565b34801561064157600080fd5b5061039d61065036600461317f565b611391565b34801561066157600080fd5b5061038a6113f0565b34801561067657600080fd5b5061038a61068536600461325a565b611452565b34801561069657600080fd5b5061039d601f5481565b3480156106ac57600080fd5b5061035a6106bb36600461317f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106e557600080fd5b506000546001600160a01b03166103cb565b34801561070357600080fd5b5061038a6107123660046132e4565b6114ff565b34801561072357600080fd5b50610324611542565b34801561073857600080fd5b5061038a61074736600461325a565b611551565b34801561075857600080fd5b5061035a61076736600461322f565b6115f9565b34801561077857600080fd5b5061038a611648565b34801561078d57600080fd5b5061035a61079c36600461322f565b61174e565b3480156107ad57600080fd5b5061038a6107bc3660046132e4565b61175b565b3480156107cd57600080fd5b50600a546103cb906001600160a01b031681565b3480156107ed57600080fd5b5061038a6107fc3660046132e4565b611797565b34801561080d57600080fd5b5060025461039d565b34801561082257600080fd5b5060195461039d565b34801561083757600080fd5b5061038a6117c6565b34801561084c57600080fd5b5061039d60135481565b34801561086257600080fd5b5061038a6108713660046132ca565b611881565b34801561088257600080fd5b5061038a61089136600461317f565b611903565b3480156108a257600080fd5b5061038a6108b13660046132e4565b61197c565b3480156108c257600080fd5b5061038a6108d13660046132e4565b6119b9565b3480156108e257600080fd5b5061039d6108f13660046131b7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561092857600080fd5b5061038a61093736600461317f565b611a3e565b34801561094857600080fd5b5061038a61095736600461317f565b611a89565b34801561096857600080fd5b5061038a61097736600461317f565b611af7565b34801561098857600080fd5b5061035a61099736600461317f565b611bcf565b6060600e80546109ab906135b7565b80601f01602080910402602001604051908101604052809291908181526020018280546109d7906135b7565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000610a3b338484611c69565b5060015b92915050565b6000546001600160a01b03163314610a785760405162461bcd60e51b8152600401610a6f906133ea565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610aa7848484611d8d565b610af98433610af485604051806060016040528060288152602001613639602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906120e6565b611c69565b5060019392505050565b6000600c54821115610b6a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a6f565b6000610b74612120565b9050610b808382612143565b9392505050565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526007602052604090205460ff16610c195760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a6f565b60005b600954811015610d7257816001600160a01b031660098281548110610c5157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d605760098054610c7c906001906135a0565b81548110610c9a57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610cd457634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610d3a57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d6a816135f2565b915050610c1c565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a3b918590610af49086611c0a565b6000546001600160a01b03163314610dd65760405162461bcd60e51b8152600401610a6f906133ea565b6015819055601354610de89082611c0a565b60175550565b3360008181526007602052604090205460ff1615610e635760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a6f565b6000610e6e83612185565b5050506001600160a01b038616600090815260036020526040902054939450610e9c939250849150506121e0565b6001600160a01b038316600090815260036020526040902055600c54610ec290826121e0565b600c55600d54610ed29084611c0a565b600d55505050565b6000546001600160a01b03163314610f045760405162461bcd60e51b8152600401610a6f906133ea565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4257600080fd5b505afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061319b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc257600080fd5b505afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa919061319b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561104257600080fd5b505af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a919061319b565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561114e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a6f565b8161116e57600061115e84612185565b50949650610a3f95505050505050565b600061117984612185565b50939650610a3f95505050505050565b6000546001600160a01b031633146111b35760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526007602052604090205460ff161561121c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a6f565b6001600160a01b03811660009081526003602052604090205415611276576001600160a01b03811660009081526003602052604090205461125c90610b03565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113065760405162461bcd60e51b8152600401610a6f906133ea565b6010546113229061131b9060ff16600a6134d6565b8290612222565b601f5550565b6000546001600160a01b031633146113525760405162461bcd60e51b8152600401610a6f906133ea565b33471561138e576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d72573d6000803e3d6000fd5b50565b6001600160a01b03811660009081526007602052604081205460ff16156113ce57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a3f90610b03565b6000546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610a6f906133ea565b600080546040516001600160a01b0390911690600080516020613661833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610a6f906133ea565b60005b818110156114fa576001600860008585858181106114ad57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114c2919061317f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114f3816135f2565b905061147f565b505050565b6000546001600160a01b031633146115295760405162461bcd60e51b8152600401610a6f906133ea565b601981905560115461153c908290611c0a565b601b5550565b6060600f80546109ab906135b7565b6000546001600160a01b0316331461157b5760405162461bcd60e51b8152600401610a6f906133ea565b60005b818110156114fa576000600860008585858181106115ac57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115c1919061317f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115f2816135f2565b905061157e565b6000610a3b3384610af485604051806060016040528060258152602001613681602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906120e6565b6001546001600160a01b031633146116ae5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a6f565b60025442116116ff5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a6f565b600154600080546040516001600160a01b03938416939091169160008051602061366183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a3b338484611d8d565b6000546001600160a01b031633146117855760405162461bcd60e51b8152600401610a6f906133ea565b601181905560195461153c9082611c0a565b6000546001600160a01b031633146117c15760405162461bcd60e51b8152600401610a6f906133ea565b602055565b6000546001600160a01b031633146117f05760405162461bcd60e51b8152600401610a6f906133ea565b3360006117fc30611391565b90506000611808612120565b905060006118168383612222565b3060009081526003602052604090205490915061183390826121e0565b30600090815260036020526040808220929092556001600160a01b0386168152205461185f9082611c0a565b6001600160a01b03909416600090815260036020526040902093909355505050565b6000546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610a6f906133ea565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118f890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526008602052604090205460ff161515600114156119565750565b6001600160a01b0381166000908152600860205260409020805460ff1916600117905550565b6000546001600160a01b031633146119a65760405162461bcd60e51b8152600401610a6f906133ea565b6013819055601554610de8908290611c0a565b6000546001600160a01b031633146119e35760405162461bcd60e51b8152600401610a6f906133ea565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611a12814261345b565b600255600080546040516001600160a01b0390911690600080516020613661833981519152908390a350565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611ab35760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526008602052604090205460ff16611ad65750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b215760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b038116611b865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6f565b600080546040516001600160a01b038085169392169160008051602061366183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bfd57506001919050565b506000919050565b919050565b600080611c17838561345b565b905083811015610b805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a6f565b6001600160a01b038316611ccb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6f565b6001600160a01b038216611d2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611df15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6f565b6001600160a01b038216611e535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6f565b60008111611eb55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a6f565b6001600160a01b03831660009081526008602052604090205460ff1615611f0f5760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610a6f565b6001600160a01b03821660009081526008602052604090205460ff1615611f785760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610a6f565b6000546001600160a01b03848116911614801590611fa457506000546001600160a01b03838116911614155b1561200c57601f5481111561200c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a6f565b600061201730611391565b9050601f5481106120275750601f545b602054811080159081906120455750601e54600160a01b900460ff16155b801561205f5750601e546001600160a01b03868116911614155b80156120745750601e54600160a81b900460ff165b15612087576020549150612087826122a1565b6001600160a01b03851660009081526006602052604090205460019060ff16806120c957506001600160a01b03851660009081526006602052604090205460ff165b156120d2575060005b6120de868686846123b5565b505050505050565b6000818484111561210a5760405162461bcd60e51b8152600401610a6f9190613397565b50600061211784866135a0565b95945050505050565b600080600061212d61254a565b909250905061213c8282612143565b9250505090565b6000610b8083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612704565b600080600080600080600080600080600061219f8c612732565b935093509350935060008060006121c08f8786886121bb612120565b612787565b919f509d509b509599509397509195509350505050919395979092949650565b6000610b8083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e6565b60008261223157506000610a3f565b600061223d8385613581565b90508261224a8583613473565b14610b805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a6f565b601e805460ff60a01b1916600160a01b17905560115481904790156123185760006122d76011548561222290919063ffffffff16565b90506122ee601b548261214390919063ffffffff16565b90506122fa84826121e0565b600a54909350612313906001600160a01b0316826127e9565b479150505b601954156123a357600061232d836002612143565b9050600061233b84836121e0565b90506123468261296f565b600061235247856121e0565b905061235e8282612aec565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505b5050601e805460ff60a01b1916905550565b806123c2576123c2612bd0565b6001600160a01b03841660009081526007602052604090205460ff16801561240357506001600160a01b03831660009081526007602052604090205460ff16155b1561241857612413848484612c58565b612516565b6001600160a01b03841660009081526007602052604090205460ff1615801561245957506001600160a01b03831660009081526007602052604090205460ff165b1561246957612413848484612db7565b6001600160a01b03841660009081526007602052604090205460ff161580156124ab57506001600160a01b03831660009081526007602052604090205460ff16155b156124bb57612413848484612e76565b6001600160a01b03841660009081526007602052604090205460ff1680156124fb57506001600160a01b03831660009081526007602052604090205460ff165b1561250b57612413848484612ed0565b612516848484612e76565b8061254457612544601a54601955601454601355601254601155601654601555601854601755601c54601b55565b50505050565b600c54600b546000918291825b6009548110156126d45782600360006009848154811061258757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061260057508160046000600984815481106125d957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561261657600c54600b54945094505050509091565b61266a600360006009848154811061263e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121e0565b92506126c0600460006009848154811061269457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121e0565b9150806126cc816135f2565b915050612557565b50600b54600c546126e491612143565b8210156126fb57600c54600b549350935050509091565b90939092509050565b600081836127255760405162461bcd60e51b8152600401610a6f9190613397565b5060006121178486613473565b600080600080600061274386612f59565b9050600061275087612f7c565b9050600061275d88612f99565b905060006127778361277184818d896121e0565b906121e0565b9993985091965094509092505050565b60008080806127968986612222565b905060006127a48987612222565b905060006127b28888612222565b905060006127c08a89612222565b905060006127d483612771848189896121e0565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061282c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561288057600080fd5b505afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b8919061319b565b816001815181106128d957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d546128ff9130911684611c69565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061293890859060009086908990429060040161341f565b600060405180830381600087803b15801561295257600080fd5b505af1158015612966573d6000803e3d6000fd5b50505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612a0657600080fd5b505afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e919061319b565b81600181518110612a5f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612a859130911684611c69565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612abe90859060009086903090429060040161341f565b600060405180830381600087803b158015612ad857600080fd5b505af11580156120de573d6000803e3d6000fd5b601d54612b049030906001600160a01b031684611c69565b601d546001600160a01b031663f305d719823085600080612b2d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b9057600080fd5b505af1158015612ba4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc99190613327565b5050505050565b601754158015612be05750601b54155b8015612bec5750601354155b8015612bf85750601154155b8015612c045750601554155b8015612c105750601954155b15612c1757565b60198054601a5560138054601455601180546012556015805460165560178054601855601b8054601c55600095869055938590559184905583905582905555565b6000806000806000806000612c6c88612185565b9650965096509650965096509650612cb288600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612ce190886121e0565b6001600160a01b03808c1660009081526003602052604080822093909355908b1681522054612d109087611c0a565b6001600160a01b038a1660009081526003602052604090205560135415801590612d3c57506000601754115b15612d4b57612d4b8a83612fb6565b612d54816130c3565b612d5e858461314b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612da391815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612dcb88612185565b9650965096509650965096509650612e1187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054612e479085611c0a565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612d109087611c0a565b6000806000806000806000612e8a88612185565b9650965096509650965096509650612ce187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6000806000806000806000612ee488612185565b9650965096509650965096509650612f2a88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612e1190886121e0565b6000610a3f6103e8612f766015548561222290919063ffffffff16565b90612143565b6000610a3f6103e8612f766013548561222290919063ffffffff16565b6000610a3f6103e8612f76601b548561222290919063ffffffff16565b6001600160a01b0382166130165760405162461bcd60e51b815260206004820152602160248201527f42455032303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6f565b6000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461304b9082611c0a565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec919091556040516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130b79085815260200190565b60405180910390a35050565b60006130cd612120565b905060006130db8383612222565b306000908152600360205260409020549091506130f89082611c0a565b3060009081526003602090815260408083209390935560079052205460ff16156114fa57306000908152600460205260409020546131369084611c0a565b30600090815260046020526040902055505050565b600c5461315890836121e0565b600c55600d546131689082611c0a565b600d555050565b80358015158114611c0557600080fd5b600060208284031215613190578081fd5b8135610b8081613623565b6000602082840312156131ac578081fd5b8151610b8081613623565b600080604083850312156131c9578081fd5b82356131d481613623565b915060208301356131e481613623565b809150509250929050565b600080600060608486031215613203578081fd5b833561320e81613623565b9250602084013561321e81613623565b929592945050506040919091013590565b60008060408385031215613241578182fd5b823561324c81613623565b946020939093013593505050565b6000806020838503121561326c578182fd5b823567ffffffffffffffff80821115613283578384fd5b818501915085601f830112613296578384fd5b8135818111156132a4578485fd5b8660208260051b85010111156132b8578485fd5b60209290920196919550909350505050565b6000602082840312156132db578081fd5b610b808261316f565b6000602082840312156132f5578081fd5b5035919050565b6000806040838503121561330e578182fd5b8235915061331e6020840161316f565b90509250929050565b60008060006060848603121561333b578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561338c5781516001600160a01b031687529582019590820190600101613367565b509495945050505050565b6000602080835283518082850152825b818110156133c3578581018301518582016040015282016133a7565b818111156133d45783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a06040820152600061343e60a0830186613354565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561346e5761346e61360d565b500190565b60008261348e57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156134ce5781600019048211156134b4576134b461360d565b808516156134c157918102915b93841c9390800290613498565b509250929050565b6000610b8060ff8416836000826134ef57506001610a3f565b816134fc57506000610a3f565b8160018114613512576002811461351c57613538565b6001915050610a3f565b60ff84111561352d5761352d61360d565b50506001821b610a3f565b5060208310610133831016604e8410600b841016171561355b575081810a610a3f565b6135658383613493565b80600019048211156135795761357961360d565b029392505050565b600081600019048311821515161561359b5761359b61360d565b500290565b6000828210156135b2576135b261360d565b500390565b600181811c908216806135cb57607f821691505b602082108114156135ec57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136065761360661360d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461138e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220762cc301bdae8fd4199de68f064bc9465393ee30e4a95e59785d02d39e079d4e64736f6c63430008040033

Deployed ByteCode Sourcemap

17717:23668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20808:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21724:161;;;;;;;;;;-1:-1:-1;21724:161:0;;;;;:::i;:::-;;:::i;:::-;;;5811:14:1;;5804:22;5786:41;;5774:2;5759:18;21724:161:0;5741:92:1;27143:132:0;;;;;;;;;;-1:-1:-1;27143:132:0;;;;;:::i;:::-;;:::i;:::-;;22849:87;;;;;;;;;;-1:-1:-1;22918:10:0;;22849:87;;;14191:25:1;;;14179:2;14164:18;22849:87:0;14146:76:1;19306:41:0;;;;;;;;;;-1:-1:-1;19306:41:0;;;;-1:-1:-1;;;;;19306:41:0;;;;;;-1:-1:-1;;;;;4457:32:1;;;4439:51;;4427:2;4412:18;19306:41:0;4394:102:1;21085:95:0;;;;;;;;;;-1:-1:-1;21165:7:0;;21085:95;;21897:313;;;;;;;;;;-1:-1:-1;21897:313:0;;;;;:::i;:::-;;:::i;23889:253::-;;;;;;;;;;-1:-1:-1;23889:253:0;;;;;:::i;:::-;;:::i;20994:83::-;;;;;;;;;;-1:-1:-1;21060:9:0;;20994:83;;21060:9;;;;15875:36:1;;15863:2;15848:18;20994:83:0;15830:87:1;18839:34:0;;;;;;;;;;;;;;;;24605:479;;;;;;;;;;-1:-1:-1;24605:479:0;;;;;:::i;:::-;;:::i;22218:218::-;;;;;;;;;;-1:-1:-1;22218:218:0;;;;;:::i;:::-;;:::i;26659:152::-;;;;;;;;;;-1:-1:-1;26659:152:0;;;;;:::i;:::-;;:::i;23057:378::-;;;;;;;;;;-1:-1:-1;23057:378:0;;;;;:::i;:::-;;:::i;18657:31::-;;;;;;;;;;;;;;;;41058:322;;;;;;;;;;-1:-1:-1;41058:322:0;;;;;:::i;:::-;;:::i;26090:111::-;;;;;;;;;;-1:-1:-1;26090:111:0;;;;;:::i;:::-;;:::i;23443:438::-;;;;;;;;;;-1:-1:-1;23443:438:0;;;;;:::i;:::-;;:::i;19354:28::-;;;;;;;;;;-1:-1:-1;19354:28:0;;;;-1:-1:-1;;;;;19354:28:0;;;19423:40;;;;;;;;;;-1:-1:-1;19423:40:0;;;;-1:-1:-1;;;19423:40:0;;;;;;24150:447;;;;;;;;;;-1:-1:-1;24150:447:0;;;;;:::i;:::-;;:::i;31793:123::-;;;;;;;;;;-1:-1:-1;31793:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;31881:27:0;31857:4;31881:27;;;:18;:27;;;;;;;;;31793:123;27003:132;;;;;;;;;;-1:-1:-1;27003:132:0;;;;;:::i;:::-;;:::i;40772:200::-;;;;;;;;;;;;;:::i;21188:198::-;;;;;;;;;;-1:-1:-1;21188:198:0;;;;;:::i;:::-;;:::i;8567:148::-;;;;;;;;;;;;;:::i;39529:205::-;;;;;;;;;;-1:-1:-1;39529:205:0;;;;;:::i;:::-;;:::i;19476:54::-;;;;;;;;;;;;;;;;22721:120;;;;;;;;;;-1:-1:-1;22721:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22813:20:0;22789:4;22813:20;;;:11;:20;;;;;;;;;22721:120;8353:79;;;;;;;;;;-1:-1:-1;8391:7:0;8418:6;-1:-1:-1;;;;;8418:6:0;8353:79;;26823:169;;;;;;;;;;-1:-1:-1;26823:169:0;;;;;:::i;:::-;;:::i;20899:87::-;;;;;;;;;;;;;:::i;40117:208::-;;;;;;;;;;-1:-1:-1;40117:208:0;;;;;:::i;:::-;;:::i;22444:269::-;;;;;;;;;;-1:-1:-1;22444:269:0;;;;;:::i;:::-;;:::i;9310:305::-;;;;;;;;;;;;;:::i;21394:167::-;;;;;;;;;;-1:-1:-1;21394:167:0;;;;;:::i;:::-;;:::i;26490:161::-;;;;;;;;;;-1:-1:-1;26490:161:0;;;;;:::i;:::-;;:::i;18234:91::-;;;;;;;;;;-1:-1:-1;18234:91:0;;;;-1:-1:-1;;;;;18234:91:0;;;31924:150;;;;;;;;;;-1:-1:-1;31924:150:0;;;;;:::i;:::-;;:::i;8975:89::-;;;;;;;;;;-1:-1:-1;9047:9:0;;8975:89;;22944:105;;;;;;;;;;-1:-1:-1;23024:17:0;;22944:105;;40333:427;;;;;;;;;;;;;:::i;18753:27::-;;;;;;;;;;;;;;;;27283:171;;;;;;;;;;-1:-1:-1;27283:171:0;;;;;:::i;:::-;;:::i;39347:174::-;;;;;;;;;;-1:-1:-1;39347:174:0;;;;;:::i;:::-;;:::i;26335:143::-;;;;;;;;;;-1:-1:-1;26335:143:0;;;;;:::i;:::-;;:::i;9072:226::-;;;;;;;;;;-1:-1:-1;9072:226:0;;;;;:::i;:::-;;:::i;21569:143::-;;;;;;;;;;-1:-1:-1;21569:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21677:18:0;;;21650:7;21677:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21569:143;26213:110;;;;;;;;;;-1:-1:-1;26213:110:0;;;;;:::i;:::-;;:::i;39928:181::-;;;;;;;;;;-1:-1:-1;39928:181:0;;;;;:::i;:::-;;:::i;8723:244::-;;;;;;;;;;-1:-1:-1;8723:244:0;;;;;:::i;:::-;;:::i;39746:164::-;;;;;;;;;;-1:-1:-1;39746:164:0;;;;;:::i;:::-;;:::i;20808:83::-;20845:13;20878:5;20871:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20808:83;:::o;21724:161::-;21799:4;21816:39;5501:10;21839:7;21848:6;21816:8;:39::i;:::-;-1:-1:-1;21873:4:0;21724:161;;;;;:::o;27143:132::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;;;;;;;;;27235:14:::1;:32:::0;;-1:-1:-1;;;;;;27235:32:0::1;-1:-1:-1::0;;;;;27235:32:0;;;::::1;::::0;;;::::1;::::0;;27143:132::o;21897:313::-;21995:4;22012:36;22022:6;22030:9;22041:6;22012:9;:36::i;:::-;22059:121;22068:6;5501:10;22090:89;22128:6;22090:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22090:19:0;;;;;;:11;:19;;;;;;;;5501:10;22090:33;;;;;;;;;;:37;:89::i;:::-;22059:8;:121::i;:::-;-1:-1:-1;22198:4:0;21897:313;;;;;:::o;23889:253::-;23955:7;23994;;23983;:18;;23975:73;;;;-1:-1:-1;;;23975:73:0;;7287:2:1;23975:73:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:40;7466:19;;23975:73:0;7259:232:1;23975:73:0;24059:19;24082:10;:8;:10::i;:::-;24059:33;-1:-1:-1;24110:24:0;:7;24059:33;24110:11;:24::i;:::-;24103:31;23889:253;-1:-1:-1;;;23889:253:0:o;24605:479::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24687:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24679:60;;;::::0;-1:-1:-1;;;24679:60:0;;9216:2:1;24679:60:0::1;::::0;::::1;9198:21:1::0;9255:2;9235:18;;;9228:30;9294:29;9274:18;;;9267:57;9341:18;;24679:60:0::1;9188:177:1::0;24679:60:0::1;24755:9;24750:327;24774:9;:16:::0;24770:20;::::1;24750:327;;;24832:7;-1:-1:-1::0;;;;;24816:23:0::1;:9;24826:1;24816:12;;;;;;-1:-1:-1::0;;;24816:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24816:12:0::1;:23;24812:254;;;24875:9;24885:16:::0;;:20:::1;::::0;24904:1:::1;::::0;24885:20:::1;:::i;:::-;24875:31;;;;;;-1:-1:-1::0;;;24875:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24860:9:::1;:12:::0;;-1:-1:-1;;;;;24875:31:0;;::::1;::::0;24870:1;;24860:12;::::1;;;-1:-1:-1::0;;;24860:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24860:46:0::1;-1:-1:-1::0;;;;;24860:46:0;;::::1;;::::0;;24925:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24964:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24964:28:0::1;::::0;;25011:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;25011:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25011:15:0;;;;;-1:-1:-1;;;;;;25011:15:0::1;::::0;;;;;24750:327:::1;24605:479:::0;:::o;24812:254::-:1;24792:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24750:327;;;;24605:479:::0;:::o;22218:218::-;5501:10;22306:4;22355:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22355:34:0;;;;;;;;;;22306:4;;22323:83;;22346:7;;22355:50;;22394:10;22355:38;:50::i;26659:152::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;26734:14:::1;:20:::0;;;26775:8:::1;::::0;:28:::1;::::0;26751:3;26775:12:::1;:28::i;:::-;26765:7;:38:::0;-1:-1:-1;26659:152:0:o;23057:378::-;5501:10;23109:14;23158:19;;;:11;:19;;;;;;;;23157:20;23149:77;;;;-1:-1:-1;;;23149:77:0;;13430:2:1;23149:77:0;;;13412:21:1;13469:2;13449:18;;;13442:30;13508:34;13488:18;;;13481:62;-1:-1:-1;;;13559:18:1;;;13552:42;13611:19;;23149:77:0;13402:234:1;23149:77:0;23238:15;23263:19;23274:7;23263:10;:19::i;:::-;-1:-1:-1;;;;;;;;23311:15:0;;;;;;:7;:15;;;;;;23237:45;;-1:-1:-1;23311:28:0;;:15;-1:-1:-1;23237:45:0;;-1:-1:-1;;23311:19:0;:28::i;:::-;-1:-1:-1;;;;;23293:15:0;;;;;;:7;:15;;;;;:46;23360:7;;:20;;23372:7;23360:11;:20::i;:::-;23350:7;:30;23404:10;;:23;;23419:7;23404:14;:23::i;:::-;23391:10;:36;-1:-1:-1;;;23057:378:0:o;41058:322::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;41133:36:::1;41191:9;41133:68;;41246:17;-1:-1:-1::0;;;;;41246:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41228:57:0::1;;41294:4;41301:17;-1:-1:-1::0;;;;;41301:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41228:98;::::0;-1:-1:-1;;;;;;41228:98:0::1;::::0;;;;;;-1:-1:-1;;;;;4955:15:1;;;41228:98:0::1;::::0;::::1;4937:34:1::0;5007:15;;4987:18;;;4980:43;4872:18;;41228:98:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41212:13;:114:::0;;-1:-1:-1;;;;;41212:114:0;;::::1;-1:-1:-1::0;;;;;;41212:114:0;;::::1;;::::0;;;41337:15:::1;:35:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;41058:322:0:o;26090:111::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26159:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26159:34:0::1;26189:4;26159:34;::::0;;26090:111::o;23443:438::-;23533:7;23572;;23561;:18;;23553:62;;;;-1:-1:-1;;;23553:62:0;;9572:2:1;23553:62:0;;;9554:21:1;9611:2;9591:18;;;9584:30;9650:33;9630:18;;;9623:61;9701:18;;23553:62:0;9544:181:1;23553:62:0;23631:17;23626:248;;23666:15;23691:19;23702:7;23691:10;:19::i;:::-;-1:-1:-1;23665:45:0;;-1:-1:-1;23725:14:0;;-1:-1:-1;;;;;;23725:14:0;23626:248;23774:23;23806:19;23817:7;23806:10;:19::i;:::-;-1:-1:-1;23772:53:0;;-1:-1:-1;23840:22:0;;-1:-1:-1;;;;;;23840:22:0;24150:447;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24347:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24346:21;24338:61;;;::::0;-1:-1:-1;;;24338:61:0;;9216:2:1;24338:61:0::1;::::0;::::1;9198:21:1::0;9255:2;9235:18;;;9228:30;9294:29;9274:18;;;9267:57;9341:18;;24338:61:0::1;9188:177:1::0;24338:61:0::1;-1:-1:-1::0;;;;;24413:16:0;::::1;24432:1;24413:16:::0;;;:7:::1;:16;::::0;;;;;:20;24410:108:::1;;-1:-1:-1::0;;;;;24489:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24469:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24450:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24410:108:::1;-1:-1:-1::0;;;;;24528:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24528:27:0::1;24551:4;24528:27:::0;;::::1;::::0;;;24566:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24566:23:0::1;::::0;;::::1;::::0;;24150:447::o;27003:132::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;27116:9:::1;::::0;27095:32:::1;::::0;27112:13:::1;::::0;27116:9:::1;;27112:2;:13;:::i;:::-;27095:11:::0;;:15:::1;:32::i;:::-;27080:12;:47:::0;-1:-1:-1;27003:132:0:o;40772:200::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;5501:10;40883:21:::1;:25:::0;40880:84:::1;;40923:41;::::0;-1:-1:-1;;;;;40923:18:0;::::1;::::0;40942:21:::1;40923:41:::0;::::1;;;::::0;::::1;::::0;;;40942:21;40923:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;40880:84;8550:1;40772:200::o:0;21188:198::-;-1:-1:-1;;;;;21278:20:0;;21254:7;21278:20;;;:11;:20;;;;;;;;21274:49;;;-1:-1:-1;;;;;;21307:16:0;;;;;:7;:16;;;;;;;21188:198::o;21274:49::-;-1:-1:-1;;;;;21361:16:0;;;;;;:7;:16;;;;;;21341:37;;:19;:37::i;8567:148::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;8674:1:::1;8658:6:::0;;8637:40:::1;::::0;-1:-1:-1;;;;;8658:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;8637:40:0;8674:1;;8637:40:::1;8705:1;8688:19:::0;;-1:-1:-1;;;;;;8688:19:0::1;::::0;;8567:148::o;39529:205::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;39627:9:::1;39622:105;39638:20:::0;;::::1;39622:105;;;39711:4;39680:14;:28;39695:9;;39705:1;39695:12;;;;;-1:-1:-1::0;;;39695:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39680:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39680:28:0;:35;;-1:-1:-1;;39680:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39660:3:::1;::::0;::::1;:::i;:::-;;;39622:105;;;;39529:205:::0;;:::o;26823:169::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;26900:17:::1;:23:::0;;;26972:11:::1;::::0;26950:34:::1;::::0;26920:3;;26950:21:::1;:34::i;:::-;26934:13;:50:::0;-1:-1:-1;26823:169:0:o;20899:87::-;20938:13;20971:7;20964:14;;;;;:::i;40117:208::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;40217:9:::1;40212:106;40228:20:::0;;::::1;40212:106;;;40301:5;40270:14;:28;40285:9;;40295:1;40285:12;;;;;-1:-1:-1::0;;;40285:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40270:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40270:28:0;:36;;-1:-1:-1;;40270:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40250:3:::1;::::0;::::1;:::i;:::-;;;40212:106;;22444:269:::0;22537:4;22554:129;5501:10;22577:7;22586:96;22625:15;22586:96;;;;;;;;;;;;;;;;;5501:10;22586:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22586:34:0;;;;;;;;;;;;:38;:96::i;9310:305::-;9362:14;;-1:-1:-1;;;;;9362:14:0;9380:10;9362:28;9354:76;;;;-1:-1:-1;;;9354:76:0;;13843:2:1;9354:76:0;;;13825:21:1;13882:2;13862:18;;;13855:30;13921:34;13901:18;;;13894:62;-1:-1:-1;;;13972:18:1;;;13965:33;14015:19;;9354:76:0;13815:225:1;9354:76:0;9467:9;;9449:15;:27;9441:72;;;;-1:-1:-1;;;9441:72:0;;13070:2:1;9441:72:0;;;13052:21:1;13109:2;13089:18;;;13082:30;13148:33;13128:18;;;13121:61;13199:18;;9441:72:0;13042:181:1;9441:72:0;9558:14;;;9550:6;;9529:44;;-1:-1:-1;;;;;9558:14:0;;;;9550:6;;;;-1:-1:-1;;;;;;;;;;;9529:44:0;;9593:14;;;9584:23;;-1:-1:-1;;;;;;9584:23:0;-1:-1:-1;;;;;9593:14:0;;;9584:23;;;;;;9310:305::o;21394:167::-;21472:4;21489:42;5501:10;21513:9;21524:6;21489:9;:42::i;26490:161::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;26565:11:::1;:17:::0;;;26609::::1;::::0;:34:::1;::::0;26579:3;26609:21:::1;:34::i;31924:150::-:0;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;32019:29:::1;:47:::0;31924:150::o;40333:427::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;5501:10;40393:17:::1;40462:24;40480:4;40462:9;:24::i;:::-;40436:50;;40497:19;40520:10;:8;:10::i;:::-;40497:33:::0;-1:-1:-1;40541:24:0::1;40568:32;:15:::0;40497:33;40568:19:::1;:32::i;:::-;40652:4;40636:22;::::0;;;:7:::1;:22;::::0;;;;;40541:59;;-1:-1:-1;40636:44:0::1;::::0;40541:59;40636:26:::1;:44::i;:::-;40627:4;40611:22;::::0;;;:7:::1;:22;::::0;;;;;:69;;;;-1:-1:-1;;;;;40712:18:0;::::1;::::0;;;;:40:::1;::::0;40735:16;40712:22:::1;:40::i;:::-;-1:-1:-1::0;;;;;40691:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:61;;;;-1:-1:-1;;;40333:427:0:o;27283:171::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;27360:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27360:32:0::1;-1:-1:-1::0;;;;27360:32:0;;::::1;;::::0;;27408:38:::1;::::0;::::1;::::0;::::1;::::0;27384:8;5811:14:1;5804:22;5786:41;;5774:2;5759:18;;5741:92;27408:38:0::1;;;;;;;;27283:171:::0;:::o;39347:174::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39429:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;:33;;:25:::0;:33:::1;39426:45;;;8550:1;40772:200::o:0;39426:45::-:1;-1:-1:-1::0;;;;;39481:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;:32;;-1:-1:-1;;39481:32:0::1;39509:4;39481:32;::::0;;39347:174;:::o;26335:143::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;26407:8:::1;:14:::0;;;26455::::1;::::0;26442:28:::1;::::0;26418:3;;26442:12:::1;:28::i;9072:226::-:0;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;9153:6:::1;::::0;;;9136:23;;-1:-1:-1;;;;;;9136:23:0;;::::1;-1:-1:-1::0;;;;;9153:6:0;::::1;9136:23;::::0;;;9170:19:::1;::::0;;9212:22:::1;9230:4:::0;9212:15:::1;:22;:::i;:::-;9200:9;:34:::0;9287:1:::1;9271:6:::0;;9250:40:::1;::::0;-1:-1:-1;;;;;9271:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9250:40:0;9287:1;;9250:40:::1;9072:226:::0;:::o;26213:110::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26280:27:0::1;26310:5;26280:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26280:35:0::1;::::0;;26213:110::o;39928:181::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40015:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;40012:46;;8550:1;40772:200::o:0;40012:46::-:1;-1:-1:-1::0;;;;;40068:25:0::1;40096:5;40068:25:::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;40068:33:0::1;::::0;;39928:181::o;8723:244::-;8480:6;;-1:-1:-1;;;;;8480:6:0;5501:10;8480:22;8472:67;;;;-1:-1:-1;;;8472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8812:22:0;::::1;8804:73;;;::::0;-1:-1:-1;;;8804:73:0;;7698:2:1;8804:73:0::1;::::0;::::1;7680:21:1::0;7737:2;7717:18;;;7710:30;7776:34;7756:18;;;7749:62;-1:-1:-1;;;7827:18:1;;;7820:36;7873:19;;8804:73:0::1;7670:228:1::0;8804:73:0::1;8914:6;::::0;;8893:38:::1;::::0;-1:-1:-1;;;;;8893:38:0;;::::1;::::0;8914:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;8893:38:0;::::1;8942:6;:17:::0;;-1:-1:-1;;;;;;8942:17:0::1;-1:-1:-1::0;;;;;8942:17:0;;;::::1;::::0;;;::::1;::::0;;8723:244::o;39746:164::-;-1:-1:-1;;;;;39828:25:0;;39809:4;39828:25;;;:14;:25;;;;;;;;:33;;:25;:33;39825:77;;;-1:-1:-1;39870:4:0;;39746:164;-1:-1:-1;39746:164:0:o;39825:77::-;-1:-1:-1;39897:5:0;;39746:164;-1:-1:-1;39746:164:0:o;39825:77::-;39746:164;;;:::o;3937:179::-;3995:7;;4027:5;4031:1;4027;:5;:::i;:::-;4015:17;;4056:1;4051;:6;;4043:46;;;;-1:-1:-1;;;4043:46:0;;8860:2:1;4043:46:0;;;8842:21:1;8899:2;8879:18;;;8872:30;8938:29;8918:18;;;8911:57;8985:18;;4043:46:0;8832:177:1;32082:337:0;-1:-1:-1;;;;;32175:19:0;;32167:68;;;;-1:-1:-1;;;32167:68:0;;12665:2:1;32167:68:0;;;12647:21:1;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:34;12838:19;;32167:68:0;12637:226:1;32167:68:0;-1:-1:-1;;;;;32254:21:0;;32246:68;;;;-1:-1:-1;;;32246:68:0;;8105:2:1;32246:68:0;;;8087:21:1;8144:2;8124:18;;;8117:30;8183:34;8163:18;;;8156:62;-1:-1:-1;;;8234:18:1;;;8227:32;8276:19;;32246:68:0;8077:224:1;32246:68:0;-1:-1:-1;;;;;32327:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32379:32;;14191:25:1;;;32379:32:0;;14164:18:1;32379:32:0;;;;;;;32082:337;;;:::o;32427:1672::-;-1:-1:-1;;;;;32549:18:0;;32541:68;;;;-1:-1:-1;;;32541:68:0;;12259:2:1;32541:68:0;;;12241:21:1;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:35;12433:19;;32541:68:0;12231:227:1;32541:68:0;-1:-1:-1;;;;;32628:16:0;;32620:64;;;;-1:-1:-1;;;32620:64:0;;6883:2:1;32620:64:0;;;6865:21:1;6922:2;6902:18;;;6895:30;6961:34;6941:18;;;6934:62;-1:-1:-1;;;7012:18:1;;;7005:33;7055:19;;32620:64:0;6855:225:1;32620:64:0;32712:1;32703:6;:10;32695:64;;;;-1:-1:-1;;;32695:64:0;;11447:2:1;32695:64:0;;;11429:21:1;11486:2;11466:18;;;11459:30;11525:34;11505:18;;;11498:62;-1:-1:-1;;;11576:18:1;;;11569:39;11625:19;;32695:64:0;11419:231:1;32695:64:0;-1:-1:-1;;;;;32778:20:0;;;;;;:14;:20;;;;;;;;:29;32770:56;;;;-1:-1:-1;;;32770:56:0;;9932:2:1;32770:56:0;;;9914:21:1;9971:2;9951:18;;;9944:30;-1:-1:-1;;;9990:18:1;;;9983:44;10044:18;;32770:56:0;9904:164:1;32770:56:0;-1:-1:-1;;;;;32845:18:0;;;;;;:14;:18;;;;;;;;:27;32837:63;;;;-1:-1:-1;;;32837:63:0;;8508:2:1;32837:63:0;;;8490:21:1;8547:2;8527:18;;;8520:30;8586:25;8566:18;;;8559:53;8629:18;;32837:63:0;8480:173:1;32837:63:0;8391:7;8418:6;-1:-1:-1;;;;;32914:15:0;;;8418:6;;32914:15;;;;:32;;-1:-1:-1;8391:7:0;8418:6;-1:-1:-1;;;;;32933:13:0;;;8418:6;;32933:13;;32914:32;32911:125;;;32979:12;;32969:6;:22;;32961:75;;;;-1:-1:-1;;;32961:75:0;;10275:2:1;32961:75:0;;;10257:21:1;10314:2;10294:18;;;10287:30;10353:34;10333:18;;;10326:62;-1:-1:-1;;;10404:18:1;;;10397:38;10452:19;;32961:75:0;10247:230:1;32961:75:0;33049:28;33080:24;33098:4;33080:9;:24::i;:::-;33049:55;;33152:12;;33128:20;:36;33125:112;;-1:-1:-1;33213:12:0;;33125:112;33308:29;;33284:53;;;;;;;33366;;-1:-1:-1;33403:16:0;;-1:-1:-1;;;33403:16:0;;;;33402:17;33366:53;:91;;;;-1:-1:-1;33444:13:0;;-1:-1:-1;;;;;33436:21:0;;;33444:13;;33436:21;;33366:91;:129;;;;-1:-1:-1;33474:21:0;;-1:-1:-1;;;33474:21:0;;;;33366:129;33348:318;;;33545:29;;33522:52;;33618:36;33633:20;33618:14;:36::i;:::-;-1:-1:-1;;;;;33874:24:0;;33747:12;33874:24;;;:18;:24;;;;;;33762:4;;33874:24;;;:50;;-1:-1:-1;;;;;;33902:22:0;;;;;;:18;:22;;;;;;;;33874:50;33871:96;;;-1:-1:-1;33950:5:0;33871:96;34053:38;34068:4;34073:2;34076:6;34083:7;34053:14;:38::i;:::-;32427:1672;;;;;;:::o;4268:190::-;4354:7;4390:12;4382:6;;;;4374:29;;;;-1:-1:-1;;;4374:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4414:9:0;4426:5;4430:1;4426;:5;:::i;:::-;4414:17;4268:190;-1:-1:-1;;;;;4268:190:0:o;29108:163::-;29149:7;29170:15;29187;29206:19;:17;:19::i;:::-;29169:56;;-1:-1:-1;29169:56:0;-1:-1:-1;29243:20:0;29169:56;;29243:11;:20::i;:::-;29236:27;;;;29108:163;:::o;4722:132::-;4780:7;4807:39;4811:1;4814;4807:39;;;;;;;;;;;;;;;;;:3;:39::i;27715:454::-;27774:7;27783;27792;27801;27810;27819;27828;27849:23;27874:12;27888;27902:18;27924:20;27936:7;27924:11;:20::i;:::-;27848:96;;;;;;;;27956:15;27973:23;27998:12;28014:56;28026:7;28035:4;28041:10;28053:4;28059:10;:8;:10::i;:::-;28014:11;:56::i;:::-;27955:115;;-1:-1:-1;27955:115:0;-1:-1:-1;27955:115:0;-1:-1:-1;28121:15:0;;-1:-1:-1;28138:4:0;;-1:-1:-1;28144:4:0;;-1:-1:-1;28150:10:0;-1:-1:-1;;;;27715:454:0;;;;;;;;;:::o;4124:136::-;4182:7;4209:43;4213:1;4216;4209:43;;;;;;;;;;;;;;;;;:3;:43::i;4466:248::-;4524:7;4548:6;4544:47;;-1:-1:-1;4578:1:0;4571:8;;4544:47;4603:9;4615:5;4619:1;4615;:5;:::i;:::-;4603:17;-1:-1:-1;4648:1:0;4639:5;4643:1;4603:17;4639:5;:::i;:::-;:10;4631:56;;;;-1:-1:-1;;;4631:56:0;;10684:2:1;4631:56:0;;;10666:21:1;10723:2;10703:18;;;10696:30;10762:34;10742:18;;;10735:62;-1:-1:-1;;;10813:18:1;;;10806:31;10854:19;;4631:56:0;10656:223:1;34107:995:0;19916:16;:23;;-1:-1:-1;;;;19916:23:0;-1:-1:-1;;;19916:23:0;;;34295:11:::1;::::0;34210:12;;34258:21:::1;::::0;34295:15;34292:365:::1;;34336:21;34360:29;34377:11;;34360:12;:16;;:29;;;;:::i;:::-;34336:53;;34420:32;34438:13;;34420;:17;;:32;;;;:::i;:::-;34404:48:::0;-1:-1:-1;34485:31:0::1;:12:::0;34404:48;34485:16:::1;:31::i;:::-;34548:14;::::0;34467:49;;-1:-1:-1;34531:47:0::1;::::0;-1:-1:-1;;;;;34548:14:0::1;34564:13:::0;34531:16:::1;:47::i;:::-;34624:21;34607:38;;34292:365;;34680:17;::::0;:21;34677:418:::1;;34727:12;34742:22;:15:::0;34762:1:::1;34742:19;:22::i;:::-;34727:37:::0;-1:-1:-1;34779:17:0::1;34799:25;:15:::0;34727:37;34799:19:::1;:25::i;:::-;34779:45;;34841:22;34858:4;34841:16;:22::i;:::-;34892:18;34913:41;:21;34939:14:::0;34913:25:::1;:41::i;:::-;34892:62;;34971:35;34984:9;34995:10;34971:12;:35::i;:::-;35040:43;::::0;;15611:25:1;;;15667:2;15652:18;;15645:34;;;15695:18;;;15688:34;;;35040:43:0::1;::::0;15599:2:1;15584:18;35040:43:0::1;;;;;;;34677:418;;;;-1:-1:-1::0;;19962:16:0;:24;;-1:-1:-1;;;;19962:24:0;;;-1:-1:-1;34107:995:0:o;36605:834::-;36716:7;36712:40;;36738:14;:12;:14::i;:::-;-1:-1:-1;;;;;36777:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36801:22:0;;;;;;:11;:22;;;;;;;;36800:23;36777:46;36773:597;;;36840:48;36862:6;36870:9;36881:6;36840:21;:48::i;:::-;36773:597;;;-1:-1:-1;;;;;36911:19:0;;;;;;:11;:19;;;;;;;;36910:20;:46;;;;-1:-1:-1;;;;;;36934:22:0;;;;;;:11;:22;;;;;;;;36910:46;36906:464;;;36973:46;36993:6;37001:9;37012:6;36973:19;:46::i;36906:464::-;-1:-1:-1;;;;;37042:19:0;;;;;;:11;:19;;;;;;;;37041:20;:47;;;;-1:-1:-1;;;;;;37066:22:0;;;;;;:11;:22;;;;;;;;37065:23;37041:47;37037:333;;;37105:44;37123:6;37131:9;37142:6;37105:17;:44::i;37037:333::-;-1:-1:-1;;;;;37171:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37194:22:0;;;;;;:11;:22;;;;;;;;37171:45;37167:203;;;37233:48;37255:6;37263:9;37274:6;37233:21;:48::i;37167:203::-;37314:44;37332:6;37340:9;37351:6;37314:17;:44::i;:::-;37394:7;37390:41;;37416:15;31495:18;;31475:17;:38;31535:16;;31524:8;:27;31588:19;;31574:11;:33;31650:22;;31633:14;:39;31710:15;;31700:7;:25;31752:21;;31736:13;:37;31431:350;37416:15;36605:834;;;;:::o;29279:561::-;29376:7;;29412;;29329;;;;;29436:289;29460:9;:16;29456:20;;29436:289;;;29526:7;29502;:21;29510:9;29520:1;29510:12;;;;;;-1:-1:-1;;;29510:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29510:12:0;29502:21;;;;;;;;;;;;;:31;;:66;;;29561:7;29537;:21;29545:9;29555:1;29545:12;;;;;;-1:-1:-1;;;29545:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29545:12:0;29537:21;;;;;;;;;;;;;:31;29502:66;29498:97;;;29578:7;;29587;;29570:25;;;;;;;29279:561;;:::o;29498:97::-;29620:34;29632:7;:21;29640:9;29650:1;29640:12;;;;;;-1:-1:-1;;;29640:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29640:12:0;29632:21;;;;;;;;;;;;;29620:7;;:11;:34::i;:::-;29610:44;;29679:34;29691:7;:21;29699:9;29709:1;29699:12;;;;;;-1:-1:-1;;;29699:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29699:12:0;29691:21;;;;;;;;;;;;;29679:7;;:11;:34::i;:::-;29669:44;-1:-1:-1;29478:3:0;;;;:::i;:::-;;;;29436:289;;;-1:-1:-1;29761:7:0;;29749;;:20;;:11;:20::i;:::-;29739:7;:30;29735:61;;;29779:7;;29788;;29771:25;;;;;;29279:561;;:::o;29735:61::-;29815:7;;29824;;-1:-1:-1;29279:561:0;-1:-1:-1;29279:561:0:o;4862:189::-;4948:7;4983:12;4976:5;4968:28;;;;-1:-1:-1;;;4968:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5007:9:0;5019:5;5023:1;5019;:5;:::i;28177:413::-;28237:7;28246;28255;28264;28284:12;28299:31;28322:7;28299:22;:31::i;:::-;28284:46;;28341:12;28356:25;28373:7;28356:16;:25::i;:::-;28341:40;;28392:18;28413:30;28435:7;28413:21;:30::i;:::-;28392:51;-1:-1:-1;28454:23:0;28480:43;28518:4;28480:33;28392:51;28480:33;:7;28492:4;28480:11;:17::i;:::-;:21;;:33::i;:43::-;28454:69;28559:4;;-1:-1:-1;28565:4:0;;-1:-1:-1;28565:4:0;-1:-1:-1;28177:413:0;;-1:-1:-1;;;28177:413:0:o;28598:502::-;28727:7;;;;28783:24;:7;28795:11;28783;:24::i;:::-;28765:42;-1:-1:-1;28818:12:0;28833:21;:4;28842:11;28833:8;:21::i;:::-;28818:36;-1:-1:-1;28865:13:0;28881:21;:4;28890:11;28881:8;:21::i;:::-;28865:37;-1:-1:-1;28913:18:0;28934:27;:10;28949:11;28934:14;:27::i;:::-;28913:48;-1:-1:-1;28972:23:0;28998:44;29036:5;28998:33;28913:48;28998:33;:7;29010:4;28998:11;:17::i;:44::-;29061:7;;;;-1:-1:-1;29087:4:0;;-1:-1:-1;28598:502:0;;-1:-1:-1;;;;;;;;;28598:502:0:o;35110:526::-;35227:16;;;35241:1;35227:16;;;;;;;;35203:21;;35227:16;;;;;;;;;;-1:-1:-1;35227:16:0;35203:40;;35272:4;35254;35259:1;35254:7;;;;;;-1:-1:-1;;;35254:7:0;;;;;;;;;-1:-1:-1;;;;;35254:23:0;;;:7;;;;;;;;;;:23;;;;35298:15;;:22;;;-1:-1:-1;;;35298:22:0;;;;:15;;;;;:20;;:22;;;;;35254:7;;35298:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35288:4;35293:1;35288:7;;;;;;-1:-1:-1;;;35288:7:0;;;;;;;;;-1:-1:-1;;;;;35288:32:0;;;:7;;;;;;;;;:32;35365:15;;35333:62;;35350:4;;35365:15;35383:11;35333:8;:62::i;:::-;35408:15;;:220;;-1:-1:-1;;;35408:220:0;;-1:-1:-1;;;;;35408:15:0;;;;:66;;:220;;35489:11;;35408:15;;35559:4;;35578:9;;35602:15;;35408:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35110:526;;;:::o;35644:529::-;35734:16;;;35748:1;35734:16;;;;;;;;35710:21;;35734:16;;;;;;;;;;-1:-1:-1;35734:16:0;35710:40;;35779:4;35761;35766:1;35761:7;;;;;;-1:-1:-1;;;35761:7:0;;;;;;;;;-1:-1:-1;;;;;35761:23:0;;;:7;;;;;;;;;;:23;;;;35805:15;;:22;;;-1:-1:-1;;;35805:22:0;;;;:15;;;;;:20;;:22;;;;;35761:7;;35805:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35795:4;35800:1;35795:7;;;;;;-1:-1:-1;;;35795:7:0;;;;;;;;;-1:-1:-1;;;;;35795:32:0;;;:7;;;;;;;;;:32;35872:15;;35840:62;;35857:4;;35872:15;35890:11;35840:8;:62::i;:::-;35941:15;;:224;;-1:-1:-1;;;35941:224:0;;-1:-1:-1;;;;;35941:15:0;;;;:66;;:224;;36022:11;;35941:15;;36092:4;;36119;;36139:15;;35941:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36181:416;36294:15;;36262:62;;36279:4;;-1:-1:-1;;;;;36294:15:0;36312:11;36262:8;:62::i;:::-;36337:15;;-1:-1:-1;;;;;36337:15:0;:31;36376:9;36409:4;36429:11;36337:15;;36541:7;8391;8418:6;-1:-1:-1;;;;;8418:6:0;;8353:79;36541:7;36337:252;;;;;;-1:-1:-1;;;;;;36337:252:0;;;-1:-1:-1;;;;;5393:15:1;;;36337:252:0;;;5375:34:1;5425:18;;;5418:34;;;;5468:18;;;5461:34;;;;5511:18;;;5504:34;5575:15;;;5554:19;;;5547:44;36563:15:0;5607:19:1;;;5600:35;5309:19;;36337:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36181:416;;:::o;30737:682::-;30783:7;;:12;:34;;;;-1:-1:-1;30799:13:0;;:18;30783:34;:51;;;;-1:-1:-1;30821:8:0;;:13;30783:51;:81;;;;-1:-1:-1;30848:11:0;;:16;30783:81;:104;;;;-1:-1:-1;30868:14:0;;:19;30783:104;:130;;;;-1:-1:-1;30891:17:0;;:22;30783:130;30780:142;;;30737:682::o;30780:142::-;30963:17;;;30942:18;:38;31011:8;;;30992:16;:27;31064:11;;;31042:19;:33;31126:14;;;31101:22;:39;31186:7;;;31168:15;:25;31228:13;;;31204:21;:37;-1:-1:-1;31262:21:0;;;;31294:12;;;;31317:15;;;;31343:18;;;31372:11;;;31394:17;30737:682::o;38696:641::-;38799:15;38816:23;38841:12;38855:23;38880:12;38894;38908:18;38930:19;38941:7;38930:10;:19::i;:::-;38798:151;;;;;;;;;;;;;;38978:28;38998:7;38978;:15;38986:6;-1:-1:-1;;;;;38978:15:0;-1:-1:-1;;;;;38978:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38960:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39035:7;:15;;;;:28;;39055:7;39035:19;:28::i;:::-;-1:-1:-1;;;;;39017:15:0;;;;;;;:7;:15;;;;;;:46;;;;39095:18;;;;;;;:39;;39118:15;39095:22;:39::i;:::-;-1:-1:-1;;;;;39074:18:0;;;;;;:7;:18;;;;;:60;39150:8;;:12;;;;:27;;;39176:1;39166:7;;:11;39150:27;39147:51;;;39179:19;39185:6;39193:4;39179:5;:19::i;:::-;39209:26;39224:10;39209:14;:26::i;:::-;39246:23;39258:4;39264;39246:11;:23::i;:::-;39302:9;-1:-1:-1;;;;;39285:44:0;39294:6;-1:-1:-1;;;;;39285:44:0;;39313:15;39285:44;;;;14191:25:1;;14179:2;14164:18;;14146:76;39285:44:0;;;;;;;;38696:641;;;;;;;;;;:::o;38035:653::-;38136:15;38153:23;38178:12;38192:23;38217:12;38231;38245:18;38267:19;38278:7;38267:10;:19::i;:::-;38135:151;;;;;;;;;;;;;;38315:28;38335:7;38315;:15;38323:6;-1:-1:-1;;;;;38315:15:0;-1:-1:-1;;;;;38315:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38297:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38375:18;;;;;:7;:18;;;;;:39;;38398:15;38375:22;:39::i;:::-;-1:-1:-1;;;;;38354:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38446:7;:18;;;;:39;;38469:15;38446:22;:39::i;37447:580::-;37546:15;37563:23;37588:12;37602:23;37627:12;37641;37655:18;37677:19;37688:7;37677:10;:19::i;:::-;37545:151;;;;;;;;;;;;;;37725:28;37745:7;37725;:15;37733:6;-1:-1:-1;;;;;37725:15:0;-1:-1:-1;;;;;37725:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;25366:712::-;25469:15;25486:23;25511:12;25525:23;25550:12;25564;25578:18;25600:19;25611:7;25600:10;:19::i;:::-;25468:151;;;;;;;;;;;;;;25648:28;25668:7;25648;:15;25656:6;-1:-1:-1;;;;;25648:15:0;-1:-1:-1;;;;;25648:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25630:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25705:7;:15;;;;:28;;25725:7;25705:19;:28::i;30383:168::-;30454:7;30481:62;30527:5;30481:27;30493:14;;30481:7;:11;;:27;;;;:::i;:::-;:31;;:62::i;30219:156::-;30284:7;30311:56;30351:5;30311:21;30323:8;;30311:7;:11;;:21;;;;:::i;30559:166::-;30629:7;30656:61;30701:5;30656:26;30668:13;;30656:7;:11;;:26;;;;:::i;25092:262::-;-1:-1:-1;;;;;25168:21:0;;25160:67;;;;-1:-1:-1;;;25160:67:0;;11857:2:1;25160:67:0;;;11839:21:1;11896:2;11876:18;;;11869:30;11935:34;11915:18;;;11908:62;-1:-1:-1;;;11986:18:1;;;11979:31;12027:19;;25160:67:0;11829:223:1;25160:67:0;25262:19;;;:7;:19;;;;:31;;25286:6;25262:23;:31::i;:::-;25240:19;;;;:7;:19;;;:53;;;;:19;25309:37;-1:-1:-1;;;;;25309:37:0;;;;;;;25339:6;14191:25:1;;14179:2;14164:18;;14146:76;25309:37:0;;;;;;;;25092:262;;:::o;29852:355::-;29915:19;29938:10;:8;:10::i;:::-;29915:33;-1:-1:-1;29959:18:0;29980:27;:10;29915:33;29980:14;:27::i;:::-;30059:4;30043:22;;;;:7;:22;;;;;;29959:48;;-1:-1:-1;30043:38:0;;29959:48;30043:26;:38::i;:::-;30034:4;30018:22;;;;:7;:22;;;;;;;;:63;;;;30095:11;:26;;;;;;30092:107;;;30177:4;30161:22;;;;:7;:22;;;;;;:38;;30188:10;30161:26;:38::i;:::-;30152:4;30136:22;;;;:7;:22;;;;;:63;29852:355;;;:::o;27560:147::-;27638:7;;:17;;27650:4;27638:11;:17::i;:::-;27628:7;:27;27679:10;;:20;;27694:4;27679:14;:20::i;:::-;27666:10;:33;-1:-1:-1;;27560:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;977:398::-;1045:6;1053;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1171:9;1158:23;1190:31;1215:5;1190:31;:::i;:::-;1240:5;-1:-1:-1;1297:2:1;1282:18;;1269:32;1310:33;1269:32;1310:33;:::i;:::-;1362:7;1352:17;;;1064:311;;;;;:::o;1380:466::-;1457:6;1465;1473;1526:2;1514:9;1505:7;1501:23;1497:32;1494:2;;;1547:6;1539;1532:22;1494:2;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:1;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1484:362;;1782:7;;-1:-1:-1;;;1836:2:1;1821:18;;;;1808:32;;1484:362::o;1851:325::-;1919:6;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:2;;;2001:6;1993;1986:22;1948:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1938:238:1:o;2181:665::-;2267:6;2275;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2349:6;2341;2334:22;2296:2;2394:9;2381:23;2423:18;2464:2;2456:6;2453:14;2450:2;;;2485:6;2477;2470:22;2450:2;2528:6;2517:9;2513:22;2503:32;;2573:7;2566:4;2562:2;2558:13;2554:27;2544:2;;2600:6;2592;2585:22;2544:2;2645;2632:16;2671:2;2663:6;2660:14;2657:2;;;2692:6;2684;2677:22;2657:2;2750:7;2745:2;2735:6;2732:1;2728:14;2724:2;2720:23;2716:32;2713:45;2710:2;;;2776:6;2768;2761:22;2710:2;2812;2804:11;;;;;2834:6;;-1:-1:-1;2286:560:1;;-1:-1:-1;;;;2286:560:1:o;2851:190::-;2907:6;2960:2;2948:9;2939:7;2935:23;2931:32;2928:2;;;2981:6;2973;2966:22;2928:2;3009:26;3025:9;3009:26;:::i;3046:190::-;3105:6;3158:2;3146:9;3137:7;3133:23;3129:32;3126:2;;;3179:6;3171;3164:22;3126:2;-1:-1:-1;3207:23:1;;3116:120;-1:-1:-1;3116:120:1:o;3241:258::-;3306:6;3314;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3388:6;3380;3373:22;3335:2;3429:9;3416:23;3406:33;;3458:35;3489:2;3478:9;3474:18;3458:35;:::i;:::-;3448:45;;3325:174;;;;;:::o;3504:316::-;3592:6;3600;3608;3661:2;3649:9;3640:7;3636:23;3632:32;3629:2;;;3682:6;3674;3667:22;3629:2;3716:9;3710:16;3700:26;;3766:2;3755:9;3751:18;3745:25;3735:35;;3810:2;3799:9;3795:18;3789:25;3779:35;;3619:201;;;;;:::o;3825:463::-;3878:3;3916:5;3910:12;3943:6;3938:3;3931:19;3969:4;3998:2;3993:3;3989:12;3982:19;;4035:2;4028:5;4024:14;4056:3;4068:195;4082:6;4079:1;4076:13;4068:195;;;4147:13;;-1:-1:-1;;;;;4143:39:1;4131:52;;4203:12;;;;4238:15;;;;4179:1;4097:9;4068:195;;;-1:-1:-1;4279:3:1;;3886:402;-1:-1:-1;;;;;3886:402:1:o;6073:603::-;6185:4;6214:2;6243;6232:9;6225:21;6275:6;6269:13;6318:6;6313:2;6302:9;6298:18;6291:34;6343:4;6356:140;6370:6;6367:1;6364:13;6356:140;;;6465:14;;;6461:23;;6455:30;6431:17;;;6450:2;6427:26;6420:66;6385:10;;6356:140;;;6514:6;6511:1;6508:13;6505:2;;;6584:4;6579:2;6570:6;6559:9;6555:22;6551:31;6544:45;6505:2;-1:-1:-1;6660:2:1;6639:15;-1:-1:-1;;6635:29:1;6620:45;;;;6667:2;6616:54;;6194:482;-1:-1:-1;;;6194:482:1:o;10884:356::-;11086:2;11068:21;;;11105:18;;;11098:30;11164:34;11159:2;11144:18;;11137:62;11231:2;11216:18;;11058:182::o;14227:590::-;14534:6;14523:9;14516:25;14577:6;14572:2;14561:9;14557:18;14550:34;14620:3;14615:2;14604:9;14600:18;14593:31;14497:4;14641:57;14693:3;14682:9;14678:19;14670:6;14641:57;:::i;:::-;-1:-1:-1;;;;;14734:32:1;;;;14729:2;14714:18;;14707:60;-1:-1:-1;14798:3:1;14783:19;14776:35;14633:65;14506:311;-1:-1:-1;;;14506:311:1:o;15922:128::-;15962:3;15993:1;15989:6;15986:1;15983:13;15980:2;;;15999:18;;:::i;:::-;-1:-1:-1;16035:9:1;;15970:80::o;16055:217::-;16095:1;16121;16111:2;;-1:-1:-1;;;16146:31:1;;16200:4;16197:1;16190:15;16228:4;16153:1;16218:15;16111:2;-1:-1:-1;16257:9:1;;16101:171::o;16277:422::-;16366:1;16409:5;16366:1;16423:270;16444:7;16434:8;16431:21;16423:270;;;16503:4;16499:1;16495:6;16491:17;16485:4;16482:27;16479:2;;;16512:18;;:::i;:::-;16562:7;16552:8;16548:22;16545:2;;;16582:16;;;;16545:2;16661:22;;;;16621:15;;;;16423:270;;;16427:3;16341:358;;;;;:::o;16704:140::-;16762:5;16791:47;16832:4;16822:8;16818:19;16812:4;16898:5;16928:8;16918:2;;-1:-1:-1;16969:1:1;16983:5;;16918:2;17017:4;17007:2;;-1:-1:-1;17054:1:1;17068:5;;17007:2;17099:4;17117:1;17112:59;;;;17185:1;17180:130;;;;17092:218;;17112:59;17142:1;17133:10;;17156:5;;;17180:130;17217:3;17207:8;17204:17;17201:2;;;17224:18;;:::i;:::-;-1:-1:-1;;17280:1:1;17266:16;;17295:5;;17092:218;;17394:2;17384:8;17381:16;17375:3;17369:4;17366:13;17362:36;17356:2;17346:8;17343:16;17338:2;17332:4;17329:12;17325:35;17322:77;17319:2;;;-1:-1:-1;17431:19:1;;;17463:5;;17319:2;17510:34;17535:8;17529:4;17510:34;:::i;:::-;17580:6;17576:1;17572:6;17568:19;17559:7;17556:32;17553:2;;;17591:18;;:::i;:::-;17629:20;;16908:747;-1:-1:-1;;;16908:747:1:o;17660:168::-;17700:7;17766:1;17762;17758:6;17754:14;17751:1;17748:21;17743:1;17736:9;17729:17;17725:45;17722:2;;;17773:18;;:::i;:::-;-1:-1:-1;17813:9:1;;17712:116::o;17833:125::-;17873:4;17901:1;17898;17895:8;17892:2;;;17906:18;;:::i;:::-;-1:-1:-1;17943:9:1;;17882:76::o;17963:380::-;18042:1;18038:12;;;;18085;;;18106:2;;18160:4;18152:6;18148:17;18138:27;;18106:2;18213;18205:6;18202:14;18182:18;18179:38;18176:2;;;18259:10;18254:3;18250:20;18247:1;18240:31;18294:4;18291:1;18284:15;18322:4;18319:1;18312:15;18176:2;;18018:325;;;:::o;18348:135::-;18387:3;-1:-1:-1;;18408:17:1;;18405:2;;;18428:18;;:::i;:::-;-1:-1:-1;18475:1:1;18464:13;;18395:88::o;18488:127::-;18549:10;18544:3;18540:20;18537:1;18530:31;18580:4;18577:1;18570:15;18604:4;18601:1;18594:15;18620:131;-1:-1:-1;;;;;18695:31:1;;18685:42;;18675:2;;18741:1;18738;18731:12

Swarm Source

ipfs://762cc301bdae8fd4199de68f064bc9465393ee30e4a95e59785d02d39e079d4e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.