Contract 0x47cC5334F65611EA6Be9e933C49485c88C17F5F0 4

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd179b975c8a205554b7a7ff1351ec73bd357b47f0d0dabf880f894a16eb3247fTransfer132817382021-12-07 21:47:144 mins ago0x2a5bb3bbb6f0192c95b4f642830ad5ecd5cd0cfd IN  EpicHero: EPICHERO Token0 BNB0.000776
0x5665dc598e0da2cd6ae79bac966d1aa5de0801afaf21e48013224a3591546b00Claim132815572021-12-07 21:37:4013 mins ago0x80fc2e8ef02809329c919262b54b9aad79430dce IN  EpicHero: EPICHERO Token0 BNB0.00566269
0x3287ab4095917197afe5da62a627e345c04e575d920f72294fffee630795ed62Transfer132815502021-12-07 21:37:1814 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693372
0x6fdc017a1ec48fec75e2346a2f21e6372dc7289ca5d70353bdbf7cb39b4f09a2Approve132815472021-12-07 21:37:0814 mins ago0x58df04ad7933163b9d658ec68e7020016b2e8831 IN  EpicHero: EPICHERO Token0 BNB0.00022297
0xfa53895d8b169f9ba6f425ef6242c98c866471388fed2a7911fc022790078285Transfer132815432021-12-07 21:36:5314 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.00136947
0x053c0e93eef404aceb5123ea1cadcf83bcc241deae140acfd09e8bebc736501bTransfer132815362021-12-07 21:36:3214 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0xb16b3ff7e654eed7557a5450a6f23ce96ce413100f0e29cf6194b1f775ac0a40Transfer132815282021-12-07 21:36:0615 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0x84713ce22ca1b77b757431cf368c14c626efe680b86059d6458e3675725a86eaTransfer132815222021-12-07 21:35:4415 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.00136947
0xba0350b562c136d956482fbb1aba59f12f165048b025c61c3c4c540c7c781058Transfer132815142021-12-07 21:35:1916 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0x570fd1590ca10c32d1888d56baafbb5c60db6fd9e251e325c20062bb74b9a3f6Transfer132815082021-12-07 21:35:0016 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0x3acd609206cdff44f77f2372cff6c3350021ae90147883d3bb9e3167b72fcd60Transfer132815012021-12-07 21:34:3816 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0x39b58f775561e5f9fee147c976cef9ce7d0d14f2d04dea33bbc9e45ea7aedd18Transfer132814942021-12-07 21:34:1517 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0xc5371f18ea0bbeb250ff9291bbd7232d52645fc659d3531642b9ae6dd26dea19Transfer132814842021-12-07 21:33:4317 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.000693444
0x7f6d746722d9684a01878241d070669623aba4435cf993abc1fb1274a5337e77Approve132813962021-12-07 21:29:0922 mins ago0x6d4aadf97a5cfd3526acea4a2298b916dd8ad1d1 IN  EpicHero: EPICHERO Token0 BNB0.00022297
0xcb11eda3efbfdc96ad18031154c7aa35e98f3b283fb9210079c4e5859c8406ebApprove132813892021-12-07 21:28:4822 mins ago0xee96af062f29e3bea4898cb74035db810a775b5f IN  EpicHero: EPICHERO Token0 BNB0.00022297
0x1ea1eecdd8d028c6362d6bff0c30fac3d37daf27eed04be28b3372722d889a54Approve132813222021-12-07 21:25:2725 mins ago0xff67a84e11b22fb32018ca284c598f10f0446934 IN  EpicHero: EPICHERO Token0 BNB0.00022297
0xe3858640bde0107f4d6a6dbf0692ccba33f3b83f86e904fc81fa581b33e96bcaTransfer132810392021-12-07 21:11:0640 mins ago0x7d0a2e1e5b753121ac2618545ae9afd2ba13890d IN  EpicHero: EPICHERO Token0 BNB0.000394325
0xb620e3feec41319e363e3b0503193f237ed742b211ac4eea673b0fdd553c0b3cApprove132808552021-12-07 21:00:0651 mins ago0x0c0d493fbd5ebca396fce70cab1850518bb316fd IN  EpicHero: EPICHERO Token0 BNB0.00022297
0x8dcc1bb09de12fd96951f13528ed1c733a0932d88c764490960bd2148395c52cTransfer132807012021-12-07 20:52:2158 mins ago0x81030b16bb1bde6a59d0a1c2edc969ad285972f0 IN  EpicHero: EPICHERO Token0 BNB0.000373325
0x38b7e514d445bddd937e871e4c1eabb4a878491a767f5c6d60cc281e307aa145Transfer132805232021-12-07 20:43:251 hr 7 mins ago0x97ec4cfefa2bccf3258e45bde35f18c41a0f29e4 IN  EpicHero: EPICHERO Token0 BNB0.000394325
0x064b885849f46db6e762b5d4737d3b5f2c7c111eba5b453c9660244ae8183460Approve132804822021-12-07 20:41:221 hr 9 mins ago0x06e5a9feb9e33bcae23a2f53e70a513fba96bc77 IN  EpicHero: EPICHERO Token0 BNB0.00022297
0x216a907a25d181921bad89631935954a83dc8e59764c9b99bab82f2d4dcf08f1Claim132804152021-12-07 20:37:361 hr 13 mins ago0x92974a9f19b9c6f0cb37b3b5c3e2cf8fa666d891 IN  EpicHero: EPICHERO Token0 BNB0.00551269
0x4ee489d289a9e9776e2e0466d0fcf7fe9b792d2123928d72aef26c7b5010d62dApprove132804142021-12-07 20:37:331 hr 13 mins ago0x6d4aadf97a5cfd3526acea4a2298b916dd8ad1d1 IN  EpicHero: EPICHERO Token0 BNB0.00012697
0x3087fa88946c3e256067259ede497b26ba1aa94e4b32765762eea09b56597e69Approve132804082021-12-07 20:37:111 hr 14 mins ago0x6d4aadf97a5cfd3526acea4a2298b916dd8ad1d1 IN  EpicHero: EPICHERO Token0 BNB0.00022297
0x0493ff83e0d937fbb435b736ea1f3a61c5a1f995387676c979b35c86a528af0bApprove132803352021-12-07 20:32:251 hr 18 mins ago0x08f04c0d104e27c7a838018af6651fe8a6dcd306 IN  EpicHero: EPICHERO Token0 BNB0.00022297
[ Download CSV Export 

OVERVIEW

EpicHero is a 3D NFT War Game on BSC, a P2E game with NFT holders reflection rewards in BNB.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x83d29c8346b74c38e609335bec8c9befaa9ee148d0f1104dfe2a816b8821247d132810102021-12-07 21:09:2041 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token0.199843557867999002 BNB
0x83d29c8346b74c38e609335bec8c9befaa9ee148d0f1104dfe2a816b8821247d132810102021-12-07 21:09:2041 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.320488923586627456 BNB
0x83d29c8346b74c38e609335bec8c9befaa9ee148d0f1104dfe2a816b8821247d132810102021-12-07 21:09:2041 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.680251869726444448 BNB
0x83d29c8346b74c38e609335bec8c9befaa9ee148d0f1104dfe2a816b8821247d132810102021-12-07 21:09:2041 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.000740793313071904 BNB
0xfbe0fcde0930ce3ac0ec8277df24a044ce0d02534d443ac2c1af77d5b80394cb132793422021-12-07 19:41:332 hrs 9 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token0.199818475925525606 BNB
0xfbe0fcde0930ce3ac0ec8277df24a044ce0d02534d443ac2c1af77d5b80394cb132793422021-12-07 19:41:332 hrs 9 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.320313039254418497 BNB
0xfbe0fcde0930ce3ac0ec8277df24a044ce0d02534d443ac2c1af77d5b80394cb132793422021-12-07 19:41:332 hrs 9 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.68016126264621559 BNB
0xfbe0fcde0930ce3ac0ec8277df24a044ce0d02534d443ac2c1af77d5b80394cb132793422021-12-07 19:41:332 hrs 9 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.000474301900634087 BNB
0x45c63c5621c9b8684a4f2e64167f7181c8d16c32c90cb288dd0029367f09fb5e132747052021-12-07 15:25:196 hrs 26 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token0.200508040545339314 BNB
0x45c63c5621c9b8684a4f2e64167f7181c8d16c32c90cb288dd0029367f09fb5e132747052021-12-07 15:25:196 hrs 26 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.324866449710785901 BNB
0x45c63c5621c9b8684a4f2e64167f7181c8d16c32c90cb288dd0029367f09fb5e132747052021-12-07 15:25:196 hrs 26 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.68250695894192001 BNB
0x45c63c5621c9b8684a4f2e64167f7181c8d16c32c90cb288dd0029367f09fb5e132747052021-12-07 15:25:196 hrs 26 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.007373408652705911 BNB
0xab5963741dc538fdc18a0cf3804f382b0368b315f01b7b7e9984d79943d457ef132746892021-12-07 15:24:186 hrs 27 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.324866449710785901 BNB
0xab5963741dc538fdc18a0cf3804f382b0368b315f01b7b7e9984d79943d457ef132746892021-12-07 15:24:186 hrs 27 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.68250695894192001 BNB
0xab5963741dc538fdc18a0cf3804f382b0368b315f01b7b7e9984d79943d457ef132746892021-12-07 15:24:186 hrs 27 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.007373408652705911 BNB
0x03a8e5375b686c3178299bd3c15ba77fcfdcfe951fa89e741486d5da4f60faca132709512021-12-07 11:45:2010 hrs 5 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token0.227241562703681217 BNB
0x03a8e5375b686c3178299bd3c15ba77fcfdcfe951fa89e741486d5da4f60faca132709512021-12-07 11:45:2010 hrs 5 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.501736753726599731 BNB
0x03a8e5375b686c3178299bd3c15ba77fcfdcfe951fa89e741486d5da4f60faca132709512021-12-07 11:45:2010 hrs 5 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.77362196404097562 BNB
0x03a8e5375b686c3178299bd3c15ba77fcfdcfe951fa89e741486d5da4f60faca132709512021-12-07 11:45:2010 hrs 5 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.275358717767575351 BNB
0x7eb04fade8d7c5ef40140a2b131bf6d87f404e9a7fa52193330b489407304c85132671592021-12-07 8:32:2813 hrs 18 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token0.249793641003667859 BNB
0x7eb04fade8d7c5ef40140a2b131bf6d87f404e9a7fa52193330b489407304c85132671592021-12-07 8:32:2813 hrs 18 mins ago EpicHero: EPICHERO Token0x9bf2891fa94f6d9954d6eafa89c759b3c9ddc05a1.650995848811051209 BNB
0x7eb04fade8d7c5ef40140a2b131bf6d87f404e9a7fa52193330b489407304c85132671592021-12-07 8:32:2813 hrs 18 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.850513013023874866 BNB
0x7eb04fade8d7c5ef40140a2b131bf6d87f404e9a7fa52193330b489407304c85132671592021-12-07 8:32:2813 hrs 18 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.501508861834926075 BNB
0xe7a0817e2417502b5c73df06098356799f6433f0d356b9841a17283c68e3b4da132671582021-12-07 8:32:2513 hrs 18 mins ago EpicHero: EPICHERO Token0x02ad160cb2e10984ad492df2ace18ad725b8a70c0.850513013023874866 BNB
0xe7a0817e2417502b5c73df06098356799f6433f0d356b9841a17283c68e3b4da132671582021-12-07 8:32:2513 hrs 18 mins ago PancakeSwap: Router v2 EpicHero: EPICHERO Token2.501508861834926075 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EpicHeroToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

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

abstract 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 virtual 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 lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
}

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

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

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

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

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

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _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 _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "zero address");
        require(recipient != address(0), "zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "zero address");
        require(spender != address(0), "zero address");

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

    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

interface IDividendPayingToken {
    function dividendOf(address _owner) external view returns(uint256);
    function withdrawDividend() external;
    function withdrawableDividendOf(address _owner) external view returns(uint256);
    function withdrawnDividendOf(address _owner) external view returns(uint256);
    function accumulativeDividendOf(address _owner) external view returns(uint256);
    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

contract DividendPayingToken is ERC20, IDividendPayingToken {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 constant internal magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;
    uint256 internal lastAmount;

    address public adminAddress = 0x8E377Cc27aBfB273313791097bcCe590a84F1F97;
    address internal onlyCaller;

    address public dividendToken;
    uint256 public minTokenBeforeSendDividend = 0;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    uint256 public totalDividendsDistributed;

    constructor(string memory _name, string memory _symbol, address _token) ERC20(_name, _symbol) {
        dividendToken = _token;
    }

    receive() external payable {
    }

    function distributeDividends(uint256 amount) public {
        require(msg.sender == onlyCaller, "Only caller");
        require(totalSupply() > 0);

        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);

            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function setOnlyCaller(address _newCaller) external virtual {
        require(tx.origin == adminAddress, "Only admin");
        onlyCaller = _newCaller;
    }

    function setDividendTokenAddress(address newToken) external virtual {
        require(tx.origin == adminAddress, "Only admin");
        dividendToken = newToken;
    }

    function setMinTokenBeforeSendDividend(uint256 newAmount) external virtual {
        require(tx.origin == adminAddress, "Only admin");
        minTokenBeforeSendDividend = newAmount;
    }

    function retrieveTokens(address token, uint amount) external virtual {
        require(tx.origin == adminAddress, "Only admin");
        require(IERC20(token).transfer(msg.sender, amount), "Transfer failed");
    }

    function retrieveBNB(uint amount) external virtual {
        require(tx.origin == adminAddress, "Only admin");
        (bool success,) = payable(msg.sender).call{ value: amount }("");
        require(success, "Failed to retrieve BNB");
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > minTokenBeforeSendDividend) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(dividendToken).transfer(user, _withdrawableDividend);

            if(!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }

            return _withdrawableDividend;
        }

        return 0;
    }

    function dividendOf(address _owner) public view override returns(uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns(uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view override returns(uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns(uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function _transfer(address, address, uint256) internal virtual override {
        require(false, "No allowed");
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if(newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if(newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) public view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

library SafeMathInt {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when multiplying INT256_MIN with -1
        // https://github.com/RequestNetwork/requestNetwork/issues/43
        require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1));

        int256 c = a * b;
        require((b == 0) || (c / b == a));
        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing INT256_MIN by -1
        // https://github.com/RequestNetwork/requestNetwork/issues/43
        require(!(a == - 2**255 && b == -1) && (b > 0));

        return a / b;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        require((b >= 0 && a - b <= a) || (b < 0 && a - b > a));

        return a - b;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

contract ThoreumDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    mapping (address => bool) public excludedFromDividends;
    mapping (address => uint256) public lastClaimTimes;

    constructor() DividendPayingToken("EPICHERO_THOREUM_Dividend_Tracker", "EPICHERO_THOREUM_Dividend_Tracker", 0x580dE58c1BD593A43DaDcF0A739d504621817c05) {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 200000 * (10**18); //must hold 10000+ tokens
    }

    function setDividendTokenAddress(address newToken) external override onlyOwner {
        dividendToken = newToken;
    }

    function updateMinimumTokenBalanceForDividends(uint256 _newMinimumBalance) external onlyOwner {
        minimumTokenBalanceForDividends = _newMinimumBalance;
    }

    function excludeFromDividends(address account) external onlyOwner {
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 60 && newClaimWait <= 86400, "wrong");
        claimWait = newClaimWait;
    }

    function setBalance(address payable account, uint256 newBalance, bool isProcess) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        if(isProcess){
            processAccount(account, true);
        }
    }

    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if(numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while(gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if(_canAutoClaim(lastClaimTimes[account])) {
                if(processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if(gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function _transfer(address, address, uint256) pure internal override {
        require(false, "No allowed");
    }

    function withdrawDividend() pure public override {
        require(false, "disabled");
    }

    function getNumberOfTokenHolders() external view returns(uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getAccount(address _account)
    public view returns (
        address account,
        int256 index,
        int256 iterationsUntilProcessed,
        uint256 withdrawableDividends,
        uint256 totalDividends,
        uint256 lastClaimTime,
        uint256 nextClaimTime,
        uint256 secondsUntilAutoClaimAvailable) {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if(index >= 0) {
            if(uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ?
                tokenHoldersMap.keys.length.sub(lastProcessedIndex) :
                0;


                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }


        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ?
        lastClaimTime.add(claimWait) :
        0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
        nextClaimTime.sub(block.timestamp) :
        0;
    }

    function getAccountAtIndex(uint256 index)
    public view returns (
        address,
        int256,
        int256,
        uint256,
        uint256,
        uint256,
        uint256,
        uint256) {
        if(index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function _canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if(lastClaimTime > block.timestamp)  {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    event ExcludeFromDividends(address indexed account);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
}

contract EpicHeroToken is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 public constant MAX_FEE_RATE = 2500;

    bool private swapping;
    bool public tradingIsEnabled = false;

    bool public sendThoreumInTx = false;
    bool public feesOnNormalTransfers = false;

    IDEXRouter public dexRouter;
    address dexPair;

    address deadAddress = 0x000000000000000000000000000000000000dEaD;

    address public teamWallet = 0x9bf2891Fa94F6d9954d6EAfA89C759b3C9dDc05A;
    address public marketingWallet = 0x02Ad160Cb2e10984Ad492Df2AcE18ad725b8A70C;

    address public thoreumDividendToken = 0x580dE58c1BD593A43DaDcF0A739d504621817c05;
    ThoreumDividendTracker public thoreumDividendTracker;

    address public wbnbReflectToken = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address public wbnbReflectTracker = 0x4FBEe542a42216e5aBf8b361D975d8f55c4D01A9;
    address public toBurnAllianceToken = 0x580dE58c1BD593A43DaDcF0A739d504621817c05;
    address public gameTreasury = 0xb7497Bb4dEC6b4Be62f77dBdEb90F4E179d8fcFe;

    uint256 public buyBackFee = 0;
    uint256 public liquidityFee = 0;
    uint256 public toBurnAllianceFee = 0;

    uint256 public toBurnTokenFee = 25;
    uint256 public wbnbReflectRewardsFee = 125;
    uint256 public thoreumDividendRewardsFee = 75;
    uint256 public marketingFee = 250;
    uint256 public gameTreasuryFee = 25;

    uint256 public sellFeeIncreaseFactor = 300;
    uint256 public gasForProcessing = 1000000;

    uint256 public totalFees;

    uint256 public maxBuyTransactionAmount = 1000000 * 10 ** 18;
    uint256 public maxSellTransactionAmount = 100000 * 10 ** 18;
    uint256 public swapTokensAtAmount = 50000 * 10 ** 18;
    uint256 public maxWalletToken = 1000000000 * 10 ** 18;

    uint256 public minBNBAfterBuyback = 1 * 10 ** 18;   //1 BNB
    uint256 public minSellToTriggerBuyback = 1000 * 10 ** 18;
    uint256 public buybackUpperLimitBNB = 1 * 10 ** 18;        //1 BNB

    mapping (address => bool) public isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) isBlacklisted;

    constructor() ERC20("EpicHero.io 3D NFT", "EPICHERO") {
        thoreumDividendTracker = new ThoreumDividendTracker();

        IDEXRouter _dexRouter = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);

        address _dexPair = IDEXFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());

        dexRouter = _dexRouter;
        dexPair = _dexPair;

        _setAutomatedMarketMakerPair(_dexPair, true);

        excludeFromDividend(address(thoreumDividendTracker));
        excludeFromDividend(address(this));
        excludeFromDividend(address(_dexRouter));
        excludeFromDividend(deadAddress);

        excludeFromFees(marketingWallet, true);
        excludeFromFees(teamWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);

        _mint(owner(), 1000000000 * (10**18));
    }

    receive() external payable {
    }

    function afterPreSale() external onlyOwner {
        _updateTotalFee();
        tradingIsEnabled = true;
    }

    function prepareForPartner(address _partnerOrExchangeAddress) external onlyOwner {
        thoreumDividendTracker.excludeFromDividends(_partnerOrExchangeAddress);
        excludeFromFees(_partnerOrExchangeAddress, true);
    }

    function setMaxBuyTransaction(uint256 _maxTxn) external onlyOwner {
        maxBuyTransactionAmount = _maxTxn;
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        maxSellTransactionAmount = _maxTxn;
    }

    function setThoreumDividendToken(address _newContract) external onlyOwner {
        thoreumDividendToken = _newContract;
        thoreumDividendTracker.setDividendTokenAddress(_newContract);
    }

    function setMinThoreumBeforeSendDividend(uint256 _newAmount) external onlyOwner {
        thoreumDividendTracker.setMinTokenBeforeSendDividend(_newAmount);
    }

    function setSendThoreumInTx(bool _newStatus) external onlyOwner {
        sendThoreumInTx = _newStatus;
    }

    function setWbnbReflectToken(address _newContract) external onlyOwner {
        wbnbReflectToken = _newContract;
    }

    function setWbnbReflectTracker(address _newContract) external onlyOwner {
        wbnbReflectTracker = _newContract;
    }

    function setTeamWallet(address _newWallet) external onlyOwner {
        excludeFromFees(_newWallet, true);
        teamWallet = _newWallet;
    }

    function setMarketingWallet(address _newWallet) external onlyOwner {
        excludeFromFees(_newWallet, true);
        marketingWallet = _newWallet;
    }

    function setBurnAllianceToken(address _newAddress) external onlyOwner {
        toBurnAllianceToken = _newAddress;
    }

    function setToBurnAllianceFee(uint256 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        toBurnAllianceFee = newFee;
        _updateTotalFee();
    }

    function setToBurnTokenFee(uint256 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        toBurnTokenFee = newFee;
        _updateTotalFee();
    }

    function setGameTreasuryFee(uint256 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        gameTreasuryFee = newFee;
        _updateTotalFee();
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
        maxWalletToken = _maxToken;
    }

    function setSwapTokensAtAmount(uint256 _swapAmount) external onlyOwner {
        swapTokensAtAmount = _swapAmount;
    }

    function setSellTransactionMultiplier(uint256 _multiplier) external onlyOwner {
        sellFeeIncreaseFactor = _multiplier;
    }

    function setTradingIsEnabled(bool _enabled) external onlyOwner {
        tradingIsEnabled = _enabled;
    }

    function setMinBNBAfterBuyback(uint256 _newAmount) public onlyOwner {
        require(_newAmount >= 0, "newAmount error");
        minBNBAfterBuyback = _newAmount;
    }

    function setMinSellToTriggerBuyback(uint256 _newAmount) public onlyOwner {
        require(_newAmount > 0, "newAmount error");
        minSellToTriggerBuyback = _newAmount;
    }

    function setBuyBackUpperLimitBNB(uint256 buyBackLimit) external onlyOwner() {
        require(buyBackLimit > 0, "buyBackLimit error");
        buybackUpperLimitBNB = buyBackLimit;
    }

    function setThoreumDividendTracker(address newAddress) external onlyOwner {
        ThoreumDividendTracker newThoreumDividendTracker = ThoreumDividendTracker(payable(newAddress));

        require(newThoreumDividendTracker.owner() == address(this), "must be owned by EpicHero");

        newThoreumDividendTracker.excludeFromDividends(address(newThoreumDividendTracker));
        newThoreumDividendTracker.excludeFromDividends(address(this));
        newThoreumDividendTracker.excludeFromDividends(address(dexRouter));
        newThoreumDividendTracker.excludeFromDividends(address(deadAddress));

        thoreumDividendTracker = newThoreumDividendTracker;
    }

    function setThoreumDividendRewardFee(uint8 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        thoreumDividendRewardsFee = newFee;
        _updateTotalFee();
    }

    function setWbnbReflectRewardFee(uint8 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        wbnbReflectRewardsFee = newFee;
        _updateTotalFee();
    }

    function setMarketingFee(uint8 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        marketingFee = newFee;
        _updateTotalFee();
    }

    function setBuyBackFee(uint8 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        buyBackFee = newFee;
        _updateTotalFee();
    }

    function setLiquidityFee(uint8 newFee) external onlyOwner {
        require(newFee <= MAX_FEE_RATE, "wrong");
        liquidityFee = newFee;
        _updateTotalFee();
    }

    function setDexRouter(address newAddress) external onlyOwner {
        dexRouter = IDEXRouter(newAddress);
    }

    function setIsBlacklisted(address adr, bool blacklisted) external onlyOwner {
        isBlacklisted[adr] = blacklisted;
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        feesOnNormalTransfers = _enabled;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != dexPair, "cannot be removed");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private onlyOwner {
        automatedMarketMakerPairs[pair] = value;

        if(value) {
            thoreumDividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setGasForProcessing(uint256 newValue) external onlyOwner {
        gasForProcessing = newValue;
    }

    function setMinimumBalanceForDividends(uint256 newMinimumBalance) external onlyOwner {
        thoreumDividendTracker.updateMinimumTokenBalanceForDividends(newMinimumBalance);
    }

    function setClaimWait(uint256 claimWait) external onlyOwner {
        thoreumDividendTracker.updateClaimWait(claimWait);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(isExcludedFromFees[account] != excluded, "Already excluded");
        isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeFromDividend(address account) public onlyOwner {
        thoreumDividendTracker.excludeFromDividends(address(account));
    }

    function processDividendTracker(uint256 gas) external onlyOwner {
        (uint256 aIterations, uint256 aClaims, uint256 aLastProcessedIndex) = thoreumDividendTracker.process(gas);
        emit ProcessedThoreumDividendTracker(aIterations, aClaims, aLastProcessedIndex, false, gas, tx.origin);
    }

    function manualBuyBackAndBurn(uint256 _amount) public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance >= minBNBAfterBuyback.add(_amount), "amount is too big");

        if (!swapping) {
            _buyBackAndBurn(_amount);
        }
    }

    function retrieveTokens(address token, uint amount) external onlyOwner {
        require(IERC20(token).transfer(msg.sender, amount), "Transfer failed");
    }

    function retrieveBNB(uint amount) external onlyOwner {
        (bool success,) = payable(msg.sender).call{ value: amount }("");
        require(success, "Failed to retrieve BNB");
    }

    function claim() external {
        thoreumDividendTracker.processAccount(payable(msg.sender), false);
    }

    function _updateTotalFee() internal {
        totalFees = buyBackFee
        .add(liquidityFee)
        .add(marketingFee)
        .add(thoreumDividendRewardsFee)
        .add(wbnbReflectRewardsFee)
        .add(toBurnAllianceFee)
        .add(toBurnTokenFee)
        .add(gameTreasuryFee);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "zero address");
        require(to != address(0), "zero address");
        require(!isBlacklisted[from], "Address is blacklisted");

        require(tradingIsEnabled || (isExcludedFromFees[from] || isExcludedFromFees[to]), "Trading not started");

        bool excludedAccount = isExcludedFromFees[from] || isExcludedFromFees[to];

        if (
            tradingIsEnabled &&
            automatedMarketMakerPairs[from] &&
            !excludedAccount
        ) {
            require(amount <= maxBuyTransactionAmount, "Error amount");

            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWalletToken, "Error amount");
        } else if (
            tradingIsEnabled &&
            automatedMarketMakerPairs[to] &&
            !excludedAccount
        ) {
            require(amount <= maxSellTransactionAmount, "Error amount");

            uint256 contractTokenBalance = balanceOf(address(this));

            if (!swapping && contractTokenBalance >= swapTokensAtAmount) {
                swapping = true;

                if (marketingFee > 0) {
                    uint256 swapTokens = contractTokenBalance.mul(marketingFee).div(totalFees);

                    uint256 beforeAmount = address(this).balance;
                    _swapTokensForBNB(swapTokens);
                    uint256 increaseAmount = address(this).balance.sub(beforeAmount);

                    if(increaseAmount > 0){
                        uint256 teamPortion = increaseAmount.mul(66).div(10**2);
                        uint256 marketingPortion = increaseAmount.sub(teamPortion);
                        _transferToWallet(payable(marketingWallet), marketingPortion);
                        _transferToWallet(payable(teamWallet), teamPortion);
                    }
                }

                if(buyBackFee > 0){
                    _swapTokensForBNB(contractTokenBalance.mul(buyBackFee).div(totalFees));
                }

                if(liquidityFee > 0){
                    _swapAndLiquify(contractTokenBalance.mul(liquidityFee).div(totalFees));
                }

                if(toBurnAllianceFee > 0){
                    uint256 swapTokensToBurnAlliance = contractTokenBalance.mul(toBurnAllianceFee).div(totalFees);
                    _buyBackAllianceTokenAndBurn(swapTokensToBurnAlliance);
                }

                if(toBurnTokenFee > 0){
                    uint256 tokensToBurn = contractTokenBalance.mul(toBurnTokenFee).div(totalFees);
                    super._transfer(address(this), deadAddress, tokensToBurn);
                }

                if(gameTreasuryFee > 0){
                    uint256 tokensToTreasury = contractTokenBalance.mul(gameTreasuryFee).div(totalFees);
                    super._transfer(address(this), gameTreasury, tokensToTreasury);
                }

                if (thoreumDividendRewardsFee > 0) {
                    uint256 sellTokens = contractTokenBalance.mul(thoreumDividendRewardsFee).div(totalFees);
                    _swapAndSendThoreumDividends(sellTokens.sub(1300));
                }

                if (wbnbReflectRewardsFee > 0) {
                    uint256 sellTokens = contractTokenBalance.mul(wbnbReflectRewardsFee).div(totalFees);
                    _swapAndSendWbnbReflects(sellTokens.sub(1300));
                }

                swapping = false;
            }

            if (!swapping && buyBackFee > 0) {
                uint256 buyBackBalanceBNB = address(this).balance;
                if (buyBackBalanceBNB >= minBNBAfterBuyback && amount >= minSellToTriggerBuyback) {
                    swapping = true;

                    if (buyBackBalanceBNB > buybackUpperLimitBNB) {
                        buyBackBalanceBNB = buybackUpperLimitBNB;
                    }

                    _buyBackAndBurn(buyBackBalanceBNB.div(10**2));

                    swapping = false;
                }
            }
        }

        if(tradingIsEnabled && !swapping && !excludedAccount) {
            uint256 fees = amount.mul(totalFees).div(10000);

            // if sell, multiply by sellFeeIncreaseFactor
            if(automatedMarketMakerPairs[to]) {
                fees = fees.mul(sellFeeIncreaseFactor).div(100);
            }else if(!automatedMarketMakerPairs[from] && !feesOnNormalTransfers){
                fees = 0;
            }

            if(fees > 0){
                amount = amount.sub(fees);
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);

        try thoreumDividendTracker.setBalance(payable(from), balanceOf(from), sendThoreumInTx) {} catch {}
        try thoreumDividendTracker.setBalance(payable(to), balanceOf(to), sendThoreumInTx) {} catch {}

        if(!swapping && to != deadAddress && sendThoreumInTx && thoreumDividendRewardsFee > 0){
                uint256 gas = gasForProcessing;

                try thoreumDividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                    emit ProcessedThoreumDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
                }
                catch {

                }
        }
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForBNB(half);

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

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);

        dexRouter.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(this),
            block.timestamp.add(300)
        );
    }

    function _buyBackAllianceTokenAndBurn(uint256 amount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        path[2] = toBurnAllianceToken;

        _approve(address(this), address(dexRouter), amount);

        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            deadAddress,
            block.timestamp.add(300)
        );
    }

    function _buyBackAndBurn(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            deadAddress,
            block.timestamp.add(300)
        );
    }

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

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp.add(300)
        );
    }

    function _swapTokensForDividendToken(uint256 _tokenAmount, address _recipient, address _dividendAddress) private {
        address[] memory path;

        if(dexRouter.WETH() == _dividendAddress){
            path = new address[](2);
            path[0] = address(this);
            path[1] = _dividendAddress;
        }else{
            path = new address[](3);
            path[0] = address(this);
            path[1] = dexRouter.WETH();
            path[2] = _dividendAddress;
        }

        _approve(address(this), address(dexRouter), _tokenAmount);

        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            _tokenAmount,
            0,
            path,
            _recipient,
            block.timestamp.add(300)
        );
    }

    function _swapAndSendThoreumDividends(uint256 tokens) private {
        uint256 beforeAmount = IERC20(thoreumDividendToken).balanceOf(address(thoreumDividendTracker));

        _swapTokensForDividendToken(tokens, address(thoreumDividendTracker), thoreumDividendToken);

        uint256 thoreumDividends = IERC20(thoreumDividendToken).balanceOf(address(thoreumDividendTracker)).sub(beforeAmount);

        if(thoreumDividends > 0){
            thoreumDividendTracker.distributeDividends(thoreumDividends);
            emit SendThoreumDividends(thoreumDividends);
        }
    }

    function _swapAndSendWbnbReflects(uint256 tokens) private {
        uint256 beforeAmount = IERC20(wbnbReflectToken).balanceOf(address(wbnbReflectTracker));

        _swapTokensForDividendToken(tokens, address(wbnbReflectTracker), wbnbReflectToken);

        uint256 wbnbDividends = IERC20(wbnbReflectToken).balanceOf(address(wbnbReflectTracker)).sub(beforeAmount);

        if(wbnbDividends > 0){
            emit SendWbnbDividends(wbnbDividends);
        }
    }

    function _transferToWallet(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SendThoreumDividends(uint256 amount);
    event SendWbnbDividends(uint256 amount);
    event ProcessedThoreumDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedThoreumDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendThoreumDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendWbnbDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackUpperLimitBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualBuyBackAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBNBAfterBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSellToTriggerBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_partnerOrExchangeAddress","type":"address"}],"name":"prepareForPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"retrieveBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"retrieveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeIncreaseFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendThoreumInTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setBurnAllianceToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setBuyBackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuyBackUpperLimitBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"setClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setGameTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMinBNBAfterBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMinSellToTriggerBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMinThoreumBeforeSendDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinimumBalance","type":"uint256"}],"name":"setMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setSellTransactionMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newStatus","type":"bool"}],"name":"setSendThoreumInTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setThoreumDividendRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"}],"name":"setThoreumDividendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setThoreumDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setToBurnAllianceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setToBurnTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingIsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newFee","type":"uint8"}],"name":"setWbnbReflectRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"}],"name":"setWbnbReflectToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"}],"name":"setWbnbReflectTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thoreumDividendRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thoreumDividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thoreumDividendTracker","outputs":[{"internalType":"contract ThoreumDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toBurnAllianceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toBurnAllianceToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toBurnTokenFee","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":[],"name":"tradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"wbnbReflectRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wbnbReflectToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wbnbReflectTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805463ffffff0019169055600a80546001600160a01b031990811661dead17909155600b80548216739bf2891fa94f6d9954d6eafa89c759b3c9ddc05a179055600c805482167302ad160cb2e10984ad492df2ace18ad725b8a70c179055600d8054821673580de58c1bd593a43dadcf0a739d504621817c05908117909155600f8054831673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c179055601080548316734fbee542a42216e5abf8b361d975d8f55c4d01a917905560118054831690911790556012805490911673b7497bb4dec6b4be62f77dbdeb90f4e179d8fcfe17905560006013819055601481905560155560196016819055607d601755604b60185560fa8155601a5561012c601b55620f4240601c5569d3c21bcecceda1000000601e5569152d02c7e14af6800000601f55690a968163f0a57b4000006020556b033b2e3c9fd0803ce8000000602155670de0b6b3a76400006022819055683635c9adc5dea000006023556024553480156200018457600080fd5b506040805180820182526012815271115c1a58d2195c9bcb9a5bc80cd10813919560721b602080830191825283518085019094526008845267455049434845524f60c01b908401528151919291620001df916003916200099b565b508051620001f59060049060208401906200099b565b50506005805460ff191660121790555060006200020f3390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604051620002739062000a2a565b604051809103906000f08015801562000290573d6000803e3d6000fd5b50600e60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060007310ed43c718714eb63d5aa57b78b54704e256024e90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030c57600080fd5b505afa15801562000321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000347919062000a4f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000a4f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200041457600080fd5b505af115801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000a4f565b60088054600160201b600160c01b0319166401000000006001600160a01b038681169190910291909117909155600980546001600160a01b0319169183169190911790559050620004a281600162000580565b600e54620004b9906001600160a01b0316620006a1565b620004c430620006a1565b620004cf82620006a1565b600a54620004e6906001600160a01b0316620006a1565b600c54620004ff906001600160a01b0316600162000756565b600b5462000518906001600160a01b0316600162000756565b6200052530600162000756565b620005496200054160055461010090046001600160a01b031690565b600162000756565b620005786200056560055461010090046001600160a01b031690565b6b033b2e3c9fd0803ce80000006200086a565b505062000ada565b6005546001600160a01b03610100909104163314620005d55760405162461bcd60e51b81526020600482018190526024820152600080516020620077dc83398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000908152602660205260409020805460ff191682158015919091179091556200066557600e5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200064b57600080fd5b505af115801562000660573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03610100909104163314620006f25760405162461bcd60e51b81526020600482018190526024820152600080516020620077dc8339815191526044820152606401620005cc565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156200073a57600080fd5b505af11580156200074f573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03610100909104163314620007a75760405162461bcd60e51b81526020600482018190526024820152600080516020620077dc8339815191526044820152606401620005cc565b6001600160a01b03821660009081526025602052604090205460ff16151581151514156200080b5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401620005cc565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620008c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005cc565b620008de816002546200093160201b6200279a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620009119183906200279a62000931821b17901c565b6001600160a01b0390921660009081526020819052604090209190915550565b60008062000940838562000a78565b905083811015620009945760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005cc565b9392505050565b828054620009a99062000a9d565b90600052602060002090601f016020900481019282620009cd576000855562000a18565b82601f10620009e857805160ff191683800117855562000a18565b8280016001018555821562000a18579182015b8281111562000a18578251825591602001919060010190620009fb565b5062000a2692915062000a38565b5090565b61260380620051d983390190565b5b8082111562000a26576000815560010162000a39565b60006020828403121562000a61578081fd5b81516001600160a01b038116811462000994578182fd5b6000821982111562000a9857634e487b7160e01b81526011600452602481fd5b500190565b600181811c9082168062000ab257607f821691505b6020821081141562000ad457634e487b7160e01b600052602260045260246000fd5b50919050565b6146ef8062000aea6000396000f3fe6080604052600436106104e55760003560e01c8063731c094611610281578063b62496f51161015a578063df040251116100cc578063f0c9a48011610085578063f0c9a48014610f37578063f2fde38b14610f4d578063f3a54f2c14610f6d578063f72f863b14610f8d578063f942f3d114610fad578063fb7f634a14610fc357600080fd5b8063df04025114610e8b578063df0e5b6014610eab578063e27ad5eb14610ecb578063e2f4560514610eeb578063e36151f814610f01578063e6c75f7114610f2157600080fd5b8063cf634f7a1161011e578063cf634f7a14610daf578063d2f9efab14610dc5578063d80ceac414610de5578063dd3b777d14610e05578063dd46706414610e25578063dd62ed3e14610e4557600080fd5b8063b62496f514610cff578063c024666814610d2f578063c143644f14610d4f578063c1c4a99314610d6f578063c8ca438614610d8f57600080fd5b80639a7a23d6116101f3578063a9059cbb116101b7578063a9059cbb14610c49578063ad2146ab14610c69578063afa4f3b214610c89578063b13f725d14610ca9578063b21faabd14610cc9578063b3b5e04314610cdf57600080fd5b80639a7a23d614610bbd5780639c1b8af514610bdd578063a0e3849214610bf3578063a457c2d714610c13578063a5caf56f14610c3357600080fd5b806391c5476b1161024557806391c5476b14610b1c57806391d55f4114610b3c5780639201158f14610b5c57806392f6576e14610b7c57806395d89b4114610b9257806398118cb414610ba757600080fd5b8063731c094614610a8357806375f0a87414610aa357806383814cdb14610ac35780638800b9f914610ad95780638da5cb5b14610af957600080fd5b806339509351116103be5780635abe6711116103305780636a682507116102e95780636a682507146109c25780636aa87533146109e25780636b67c4df14610a02578063700bb19114610a1857806370a0823114610a38578063715018a614610a6e57600080fd5b80635abe6711146109015780635c38ffe2146109225780635cf40b2e146109425780635d098b38146109625780635d3aff1b1461098257806362547989146109a257600080fd5b80634fbee193116103825780634fbee1931461084f578063524f81aa1461087f57806353781360146108955780635960e46d146108ab57806359927044146108cb5780635aa821a9146108eb57600080fd5b806339509351146107c45780633d6eefc2146107e45780634be8f8b1146108045780634cee65921461081a5780634e71d92d1461083a57600080fd5b80631e32987111610457578063233c09e31161041b578063233c09e31461070257806323b872dd1461072257806329fe077d14610742578063313ce5671461076257806334e8c679146107845780633881ed0d146107a457600080fd5b80631e3298711461066c5780631fa95cbd1461068c5780632025fc7b146106ac57806320ec5c3e146106cc57806322bd3f7f146106ec57600080fd5b806309c58fcd116104a957806309c58fcd146105c25780630adb6296146105e15780630bc229441461060157806313114a9d146106215780631525ff7d1461063757806318160ddd1461065757600080fd5b806302259e9e146104f157806306fdde031461051a5780630758d9241461053c57806307efbfdc1461057b578063095ea7b31461059257600080fd5b366104ec57005b600080fd5b3480156104fd57600080fd5b50610507601f5481565b6040519081526020015b60405180910390f35b34801561052657600080fd5b5061052f610fe3565b604051610511919061445b565b34801561054857600080fd5b5060085461056390600160201b90046001600160a01b031681565b6040516001600160a01b039091168152602001610511565b34801561058757600080fd5b50610590611075565b005b34801561059e57600080fd5b506105b26105ad366004614302565b6110c7565b6040519015158152602001610511565b3480156105ce57600080fd5b506008546105b290610100900460ff1681565b3480156105ed57600080fd5b506105906105fc366004614365565b6110de565b34801561060d57600080fd5b5061059061061c366004614365565b611158565b34801561062d57600080fd5b50610507601d5481565b34801561064357600080fd5b50610590610652366004614225565b6111ea565b34801561066357600080fd5b50600254610507565b34801561067857600080fd5b50601154610563906001600160a01b031681565b34801561069857600080fd5b50600d54610563906001600160a01b031681565b3480156106b857600080fd5b506105906106c736600461432d565b611247565b3480156106d857600080fd5b506105906106e7366004614365565b611293565b3480156106f857600080fd5b50610507601b5481565b34801561070e57600080fd5b5061059061071d366004614225565b6112f5565b34801561072e57600080fd5b506105b261073d366004614295565b61136e565b34801561074e57600080fd5b5061059061075d3660046143c2565b6113d7565b34801561076e57600080fd5b5060055460405160ff9091168152602001610511565b34801561079057600080fd5b5061059061079f366004614302565b61143b565b3480156107b057600080fd5b50600f54610563906001600160a01b031681565b3480156107d057600080fd5b506105b26107df366004614302565b61152d565b3480156107f057600080fd5b506105906107ff366004614365565b611563565b34801561081057600080fd5b5061050760135481565b34801561082657600080fd5b50610590610835366004614225565b6115c2565b34801561084657600080fd5b50610590611864565b34801561085b57600080fd5b506105b261086a366004614225565b60256020526000908152604090205460ff1681565b34801561088b57600080fd5b5061050760225481565b3480156108a157600080fd5b5061050760165481565b3480156108b757600080fd5b506105906108c6366004614365565b6118e8565b3480156108d757600080fd5b50600b54610563906001600160a01b031681565b3480156108f757600080fd5b50610507601e5481565b34801561090d57600080fd5b506008546105b2906301000000900460ff1681565b34801561092e57600080fd5b5061059061093d366004614365565b61191d565b34801561094e57600080fd5b5061059061095d366004614365565b611952565b34801561096e57600080fd5b5061059061097d366004614225565b6119b3565b34801561098e57600080fd5b5061059061099d366004614365565b611a10565b3480156109ae57600080fd5b506105906109bd366004614365565b611a45565b3480156109ce57600080fd5b506105906109dd3660046143c2565b611abc565b3480156109ee57600080fd5b506105906109fd366004614225565b611b20565b348015610a0e57600080fd5b5061050760195481565b348015610a2457600080fd5b50610590610a33366004614365565b611b72565b348015610a4457600080fd5b50610507610a53366004614225565b6001600160a01b031660009081526020819052604090205490565b348015610a7a57600080fd5b50610590611c83565b348015610a8f57600080fd5b50610590610a9e366004614225565b611d03565b348015610aaf57600080fd5b50600c54610563906001600160a01b031681565b348015610acf57600080fd5b5061050760155481565b348015610ae557600080fd5b50610590610af4366004614225565b611d55565b348015610b0557600080fd5b5060055461010090046001600160a01b0316610563565b348015610b2857600080fd5b50610590610b37366004614365565b611da7565b348015610b4857600080fd5b50610590610b57366004614365565b611e06565b348015610b6857600080fd5b50610590610b77366004614365565b611e3b565b348015610b8857600080fd5b506105076109c481565b348015610b9e57600080fd5b5061052f611ed0565b348015610bb357600080fd5b5061050760145481565b348015610bc957600080fd5b50610590610bd83660046142d5565b611edf565b348015610be957600080fd5b50610507601c5481565b348015610bff57600080fd5b50610590610c0e3660046142d5565b611f6b565b348015610c1f57600080fd5b506105b2610c2e366004614302565b611fc6565b348015610c3f57600080fd5b5061050760235481565b348015610c5557600080fd5b506105b2610c64366004614302565b612015565b348015610c7557600080fd5b50601054610563906001600160a01b031681565b348015610c9557600080fd5b50610590610ca4366004614365565b612022565b348015610cb557600080fd5b50610590610cc4366004614225565b612057565b348015610cd557600080fd5b5061050760175481565b348015610ceb57600080fd5b50610590610cfa366004614365565b6120b9565b348015610d0b57600080fd5b506105b2610d1a366004614225565b60266020526000908152604090205460ff1681565b348015610d3b57600080fd5b50610590610d4a3660046142d5565b6120ee565b348015610d5b57600080fd5b50610590610d6a366004614365565b6121df565b348015610d7b57600080fd5b50610590610d8a366004614365565b6122a0565b348015610d9b57600080fd5b50610590610daa3660046143c2565b612301565b348015610dbb57600080fd5b5061050760245481565b348015610dd157600080fd5b50601254610563906001600160a01b031681565b348015610df157600080fd5b50610590610e00366004614225565b612365565b348015610e1157600080fd5b50600e54610563906001600160a01b031681565b348015610e3157600080fd5b50610590610e40366004614365565b6123ff565b348015610e5157600080fd5b50610507610e6036600461425d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610e9757600080fd5b50610590610ea63660046143c2565b6124ac565b348015610eb757600080fd5b50610590610ec63660046143c2565b612510565b348015610ed757600080fd5b50610590610ee636600461432d565b612574565b348015610ef757600080fd5b5061050760205481565b348015610f0d57600080fd5b506008546105b29062010000900460ff1681565b348015610f2d57600080fd5b5061050760215481565b348015610f4357600080fd5b50610507601a5481565b348015610f5957600080fd5b50610590610f68366004614225565b6125be565b348015610f7957600080fd5b50610590610f8836600461432d565b6126ba565b348015610f9957600080fd5b50610590610fa8366004614225565b612708565b348015610fb957600080fd5b5061050760185481565b348015610fcf57600080fd5b50610590610fde366004614365565b612765565b606060038054610ff2906145f8565b80601f016020809104026020016040519081016040528092919081815260200182805461101e906145f8565b801561106b5780601f106110405761010080835404028352916020019161106b565b820191906000526020600020905b81548152906001019060200180831161104e57829003601f168201915b5050505050905090565b6005546001600160a01b036101009091041633146110ae5760405162461bcd60e51b81526004016110a5906144f3565b60405180910390fd5b6110b6612800565b6008805461ff001916610100179055565b60006110d4338484612846565b5060015b92915050565b6005546001600160a01b0361010090910416331461110e5760405162461bcd60e51b81526004016110a5906144f3565b600081116111535760405162461bcd60e51b8152602060048201526012602482015271313abca130b1b5a634b6b4ba1032b93937b960711b60448201526064016110a5565b602455565b6005546001600160a01b036101009091041633146111885760405162461bcd60e51b81526004016110a5906144f3565b600e5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c7906024015b600060405180830381600087803b1580156111cf57600080fd5b505af11580156111e3573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0361010090910416331461121a5760405162461bcd60e51b81526004016110a5906144f3565b6112258160016120ee565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146112775760405162461bcd60e51b81526004016110a5906144f3565b60088054911515620100000262ff000019909216919091179055565b6005546001600160a01b036101009091041633146112c35760405162461bcd60e51b81526004016110a5906144f3565b6109c48111156112e55760405162461bcd60e51b81526004016110a5906144d4565b60168190556112f2612800565b50565b6005546001600160a01b036101009091041633146113255760405162461bcd60e51b81526004016110a5906144f3565b600d80546001600160a01b0319166001600160a01b03838116918217909255600e54604051633f1f3fe960e11b8152600481019290925290911690637e3e7fd2906024016111b5565b600061137b8484846128f4565b6113cd84336113c88560405180606001604052806028815260200161466d602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906131b0565b612846565b5060019392505050565b6005546001600160a01b036101009091041633146114075760405162461bcd60e51b81526004016110a5906144f3565b6109c48160ff16111561142c5760405162461bcd60e51b81526004016110a5906144d4565b60ff81166019556112f2612800565b6005546001600160a01b0361010090910416331461146b5760405162461bcd60e51b81526004016110a5906144f3565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b1580156114b357600080fd5b505af11580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190614349565b6115295760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016110a5565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916110d49185906113c8908661279a565b6005546001600160a01b036101009091041633146115935760405162461bcd60e51b81526004016110a5906144f3565b6109c48111156115b55760405162461bcd60e51b81526004016110a5906144d4565b601a8190556112f2612800565b6005546001600160a01b036101009091041633146115f25760405162461bcd60e51b81526004016110a5906144f3565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561163a57600080fd5b505afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190614241565b6001600160a01b0316146116c85760405162461bcd60e51b815260206004820152601960248201527f6d757374206265206f776e656420627920457069634865726f0000000000000060448201526064016110a5565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561170a57600080fd5b505af115801561171e573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b505060085460405163031e79db60e41b8152600160201b9091046001600160a01b039081166004830152841692506331e79db09150602401600060405180830381600087803b1580156117c957600080fd5b505af11580156117dd573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561182857600080fd5b505af115801561183c573d6000803e3d6000fd5b5050600e80546001600160a01b0319166001600160a01b039490941693909317909255505050565b600e5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b3790604401602060405180830381600087803b1580156118b057600080fd5b505af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190614349565b6005546001600160a01b036101009091041633146119185760405162461bcd60e51b81526004016110a5906144f3565b601c55565b6005546001600160a01b0361010090910416331461194d5760405162461bcd60e51b81526004016110a5906144f3565b601f55565b6005546001600160a01b036101009091041633146119825760405162461bcd60e51b81526004016110a5906144f3565b600e5460405163bd0a238160e01b8152600481018390526001600160a01b039091169063bd0a2381906024016111b5565b6005546001600160a01b036101009091041633146119e35760405162461bcd60e51b81526004016110a5906144f3565b6119ee8160016120ee565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314611a405760405162461bcd60e51b81526004016110a5906144f3565b602255565b6005546001600160a01b03610100909104163314611a755760405162461bcd60e51b81526004016110a5906144f3565b60008111611ab75760405162461bcd60e51b815260206004820152600f60248201526e3732bba0b6b7bab73a1032b93937b960891b60448201526064016110a5565b602355565b6005546001600160a01b03610100909104163314611aec5760405162461bcd60e51b81526004016110a5906144f3565b6109c48160ff161115611b115760405162461bcd60e51b81526004016110a5906144d4565b60ff81166018556112f2612800565b6005546001600160a01b03610100909104163314611b505760405162461bcd60e51b81526004016110a5906144f3565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314611ba25760405162461bcd60e51b81526004016110a5906144f3565b600e546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c47990602401606060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c289190614395565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fed2beadcd5e7bc8081fdbd85d470f827bb9d5b6a4c812dc6879652f356eb5a979060800160405180910390a350505050565b6005546001600160a01b03610100909104163314611cb35760405162461bcd60e51b81526004016110a5906144f3565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314611d335760405162461bcd60e51b81526004016110a5906144f3565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314611d855760405162461bcd60e51b81526004016110a5906144f3565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314611dd75760405162461bcd60e51b81526004016110a5906144f3565b6109c4811115611df95760405162461bcd60e51b81526004016110a5906144d4565b60158190556112f2612800565b6005546001600160a01b03610100909104163314611e365760405162461bcd60e51b81526004016110a5906144f3565b602155565b6005546001600160a01b03610100909104163314611e6b5760405162461bcd60e51b81526004016110a5906144f3565b6022544790611e7a908361279a565b811015611ebd5760405162461bcd60e51b8152602060048201526011602482015270616d6f756e7420697320746f6f2062696760781b60448201526064016110a5565b60085460ff1661152957611529826131e7565b606060048054610ff2906145f8565b6005546001600160a01b03610100909104163314611f0f5760405162461bcd60e51b81526004016110a5906144f3565b6009546001600160a01b0383811691161415611f615760405162461bcd60e51b815260206004820152601160248201527018d85b9b9bdd081899481c995b5bdd9959607a1b60448201526064016110a5565b6115298282613387565b6005546001600160a01b03610100909104163314611f9b5760405162461bcd60e51b81526004016110a5906144f3565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b60006110d433846113c885604051806060016040528060258152602001614695602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906131b0565b60006110d43384846128f4565b6005546001600160a01b036101009091041633146120525760405162461bcd60e51b81526004016110a5906144f3565b602055565b6005546001600160a01b036101009091041633146120875760405162461bcd60e51b81526004016110a5906144f3565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024016111b5565b6005546001600160a01b036101009091041633146120e95760405162461bcd60e51b81526004016110a5906144f3565b601e55565b6005546001600160a01b0361010090910416331461211e5760405162461bcd60e51b81526004016110a5906144f3565b6001600160a01b03821660009081526025602052604090205460ff16151581151514156121805760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b60448201526064016110a5565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331461220f5760405162461bcd60e51b81526004016110a5906144f3565b604051600090339083908381818185875af1925050503d8060008114612251576040519150601f19603f3d011682016040523d82523d6000602084013e612256565b606091505b50509050806115295760405162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932ba3934b2bb329021272160511b60448201526064016110a5565b6005546001600160a01b036101009091041633146122d05760405162461bcd60e51b81526004016110a5906144f3565b600e54604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e89906024016111b5565b6005546001600160a01b036101009091041633146123315760405162461bcd60e51b81526004016110a5906144f3565b6109c48160ff1611156123565760405162461bcd60e51b81526004016110a5906144d4565b60ff81166017556112f2612800565b6005546001600160a01b036101009091041633146123955760405162461bcd60e51b81526004016110a5906144f3565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506112f28160016120ee565b6005546001600160a01b0361010090910416331461242f5760405162461bcd60e51b81526004016110a5906144f3565b60058054600680546001600160a01b0319166001600160a01b03610100840416179055610100600160a81b0319169055612469814261458a565b60075560055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6005546001600160a01b036101009091041633146124dc5760405162461bcd60e51b81526004016110a5906144f3565b6109c48160ff1611156125015760405162461bcd60e51b81526004016110a5906144d4565b60ff81166014556112f2612800565b6005546001600160a01b036101009091041633146125405760405162461bcd60e51b81526004016110a5906144f3565b6109c48160ff1611156125655760405162461bcd60e51b81526004016110a5906144d4565b60ff81166013556112f2612800565b6005546001600160a01b036101009091041633146125a45760405162461bcd60e51b81526004016110a5906144f3565b600880549115156101000261ff0019909216919091179055565b6005546001600160a01b036101009091041633146125ee5760405162461bcd60e51b81526004016110a5906144f3565b6001600160a01b0381166126535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016110a5565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b036101009091041633146126ea5760405162461bcd60e51b81526004016110a5906144f3565b6008805491151563010000000263ff00000019909216919091179055565b6005546001600160a01b036101009091041633146127385760405162461bcd60e51b81526004016110a5906144f3565b600880546001600160a01b03909216600160201b02640100000000600160c01b0319909216919091179055565b6005546001600160a01b036101009091041633146127955760405162461bcd60e51b81526004016110a5906144f3565b601b55565b6000806127a7838561458a565b9050838110156127f95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016110a5565b9392505050565b612841601a5461283b60165461283b60155461283b60175461283b60185461283b60195461283b60145460135461279a90919063ffffffff16565b9061279a565b601d55565b6001600160a01b03831661286c5760405162461bcd60e51b81526004016110a590614528565b6001600160a01b0382166128925760405162461bcd60e51b81526004016110a590614528565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661291a5760405162461bcd60e51b81526004016110a590614528565b6001600160a01b0382166129405760405162461bcd60e51b81526004016110a590614528565b6001600160a01b03831660009081526027602052604090205460ff16156129a25760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b60448201526064016110a5565b600854610100900460ff16806129f257506001600160a01b03831660009081526025602052604090205460ff16806129f257506001600160a01b03821660009081526025602052604090205460ff165b612a345760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b60448201526064016110a5565b6001600160a01b03831660009081526025602052604081205460ff1680612a7357506001600160a01b03831660009081526025602052604090205460ff165b600854909150610100900460ff168015612aa557506001600160a01b03841660009081526026602052604090205460ff165b8015612aaf575080155b15612b2057601e54821115612ad65760405162461bcd60e51b81526004016110a5906144ae565b6001600160a01b038316600090815260208190526040902054602154612afc848361458a565b1115612b1a5760405162461bcd60e51b81526004016110a5906144ae565b50612e5c565b600854610100900460ff168015612b4f57506001600160a01b03831660009081526026602052604090205460ff165b8015612b59575080155b15612e5c57601f54821115612b805760405162461bcd60e51b81526004016110a5906144ae565b3060009081526020819052604090205460085460ff16158015612ba557506020548110155b15612de9576008805460ff1916600117905560195415612c58576000612be2601d54612bdc6019548561348090919063ffffffff16565b906134ff565b905047612bee8261355a565b6000612bfa4783613710565b90508015612c54576000612c146064612bdc846042613480565b90506000612c228383613710565b600c54909150612c3b906001600160a01b03168261376c565b600b54612c51906001600160a01b03168361376c565b50505b5050505b60135415612c8357612c83612c7e601d54612bdc6013548561348090919063ffffffff16565b61355a565b60145415612cae57612cae612ca9601d54612bdc6014548561348090919063ffffffff16565b6137a7565b60155415612ce0576000612cd3601d54612bdc6015548561348090919063ffffffff16565b9050612cde8161382e565b505b60165415612d22576000612d05601d54612bdc6016548561348090919063ffffffff16565b600a54909150612d209030906001600160a01b0316836139d9565b505b601a5415612d64576000612d47601d54612bdc601a548561348090919063ffffffff16565b601254909150612d629030906001600160a01b0316836139d9565b505b60185415612da1576000612d89601d54612bdc6018548561348090919063ffffffff16565b9050612d9f612d9a82610514613710565b613af1565b505b60175415612dde576000612dc6601d54612bdc6017548561348090919063ffffffff16565b9050612ddc612dd782610514613710565b613cc9565b505b6008805460ff191690555b60085460ff16158015612dfe57506000601354115b15612e5a5760225447908110801590612e1957506023548410155b15612e58576008805460ff19166001179055602454811115612e3a57506024545b612e4d612e488260646134ff565b6131e7565b6008805460ff191690555b505b505b600854610100900460ff168015612e76575060085460ff16155b8015612e80575080155b15612f42576000612ea2612710612bdc601d548661348090919063ffffffff16565b6001600160a01b03851660009081526026602052604090205490915060ff1615612ee757612ee06064612bdc601b548461348090919063ffffffff16565b9050612f23565b6001600160a01b03851660009081526026602052604090205460ff16158015612f1a57506008546301000000900460ff16155b15612f23575060005b8015612f4057612f338382613710565b9250612f408530836139d9565b505b612f4d8484846139d9565b600e546001600160a01b031663059ef8d785612f7e816001600160a01b031660009081526020819052604090205490565b60085460405160e085901b6001600160e01b03191681526001600160a01b039093166004840152602483019190915262010000900460ff1615156044820152606401600060405180830381600087803b158015612fda57600080fd5b505af1925050508015612feb575060015b50600e546001600160a01b031663059ef8d78461301d816001600160a01b031660009081526020819052604090205490565b60085460405160e085901b6001600160e01b03191681526001600160a01b039093166004840152602483019190915262010000900460ff1615156044820152606401600060405180830381600087803b15801561307957600080fd5b505af192505050801561308a575060015b5060085460ff161580156130ac5750600a546001600160a01b03848116911614155b80156130c0575060085462010000900460ff165b80156130ce57506000601854115b156131aa57601c54600e546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401606060405180830381600087803b15801561311f57600080fd5b505af192505050801561314f575060408051601f3d908101601f1916820190925261314c91810190614395565b60015b613158576111e3565b60408051848152602081018490529081018290526060810185905232906001907fed2beadcd5e7bc8081fdbd85d470f827bb9d5b6a4c812dc6879652f356eb5a979060800160405180910390a3505050505b50505050565b600081848411156131d45760405162461bcd60e51b81526004016110a5919061445b565b506131df83856145e1565b949350505050565b604080516002808252606082018352600092602083019080368337019050509050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561325657600080fd5b505afa15801561326a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328e9190614241565b816000815181106132af57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106132f157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600854600a54600160201b90910482169163b6f9de959185916000918691166133324261012c61279a565b6040518663ffffffff1660e01b81526004016133519493929190614426565b6000604051808303818588803b15801561336a57600080fd5b505af115801561337e573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b036101009091041633146133b75760405162461bcd60e51b81526004016110a5906144f3565b6001600160a01b0382166000908152602660205260409020805460ff1916821580159190911790915561344457600e5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561342b57600080fd5b505af115801561343f573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008261348f575060006110d8565b600061349b83856145c2565b9050826134a885836145a2565b146127f95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016110a5565b60008082116135505760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016110a5565b6127f982846145a2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061359d57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561360b57600080fd5b505afa15801561361f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136439190614241565b8160018151811061366457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600854613691913091600160201b90041684612846565b600854600160201b90046001600160a01b031663791ac94783600084306136ba4261012c61279a565b6040518663ffffffff1660e01b81526004016136da95949392919061454e565b600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050505050565b6000828211156137625760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016110a5565b6127f982846145e1565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156137a2573d6000803e3d6000fd5b505050565b60006137b48260026134ff565b905060006137c28383613710565b9050476137ce8361355a565b60006137da4783613710565b90506137e68382613de3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061387357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138e157600080fd5b505afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190614241565b8160018151811061393a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115482519116908290600290811061397957634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526008546139a6913091600160201b90041684612846565b600854600a546001600160a01b03600160201b909204821691635c11d7959185916000918691166136ba4261012c61279a565b6001600160a01b0383166139ff5760405162461bcd60e51b81526004016110a590614528565b6001600160a01b038216613a255760405162461bcd60e51b81526004016110a590614528565b604080518082018252600f81526e657863656564732062616c616e636560881b6020808301919091526001600160a01b0386166000908152908190529190912054613a719183906131b0565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613aa0908261279a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016128e7565b600d54600e546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a082319060240160206040518083038186803b158015613b3d57600080fd5b505afa158015613b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b75919061437d565b600e54600d54919250613b969184916001600160a01b039081169116613ece565b600d54600e546040516370a0823160e01b81526001600160a01b039182166004820152600092613c259285929116906370a08231906024015b60206040518083038186803b158015613be757600080fd5b505afa158015613bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1f919061437d565b90613710565b905080156137a257600e54604051633243c79160e01b8152600481018390526001600160a01b0390911690633243c79190602401600060405180830381600087803b158015613c7357600080fd5b505af1158015613c87573d6000803e3d6000fd5b505050507fd02cffe2a59140ae37fbcb7f7b0c402b6faaeb0be2adc2319a273cb4745fee9781604051613cbc91815260200190565b60405180910390a1505050565b600f546010546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a082319060240160206040518083038186803b158015613d1557600080fd5b505afa158015613d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4d919061437d565b601054600f54919250613d6e9184916001600160a01b039081169116613ece565b600f546010546040516370a0823160e01b81526001600160a01b039182166004820152600092613dab9285929116906370a0823190602401613bcf565b905080156137a2576040518181527f7b4348e1d588eeea26709e4474fd9cee8c55772ca58078723a47433bdc654ecc90602001613cbc565b600854613e02903090600160201b90046001600160a01b031684612846565b600854600160201b90046001600160a01b031663f305d71982308560008083613e2d4261012c61279a565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015613e9557600080fd5b505af1158015613ea9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111e39190614395565b6060816001600160a01b0316600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2857600080fd5b505afa158015613f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f609190614241565b6001600160a01b031614156140185760408051600280825260608201835290916020830190803683370190505090503081600081518110613fb157634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600181518110613ff357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050614185565b604080516003808252608082019092529060208201606080368337019050509050308160008151811061405b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140c957600080fd5b505afa1580156140dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141019190614241565b8160018151811061412257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050818160028151811061416457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6008546141a4903090600160201b90046001600160a01b031686612846565b600854600160201b90046001600160a01b0316635c11d79585600084876141cd4261012c61279a565b6040518663ffffffff1660e01b81526004016141ed95949392919061454e565b600060405180830381600087803b15801561420757600080fd5b505af115801561421b573d6000803e3d6000fd5b5050505050505050565b600060208284031215614236578081fd5b81356127f981614649565b600060208284031215614252578081fd5b81516127f981614649565b6000806040838503121561426f578081fd5b823561427a81614649565b9150602083013561428a81614649565b809150509250929050565b6000806000606084860312156142a9578081fd5b83356142b481614649565b925060208401356142c481614649565b929592945050506040919091013590565b600080604083850312156142e7578182fd5b82356142f281614649565b9150602083013561428a8161465e565b60008060408385031215614314578182fd5b823561431f81614649565b946020939093013593505050565b60006020828403121561433e578081fd5b81356127f98161465e565b60006020828403121561435a578081fd5b81516127f98161465e565b600060208284031215614376578081fd5b5035919050565b60006020828403121561438e578081fd5b5051919050565b6000806000606084860312156143a9578283fd5b8351925060208401519150604084015190509250925092565b6000602082840312156143d3578081fd5b813560ff811681146127f9578182fd5b6000815180845260208085019450808401835b8381101561441b5781516001600160a01b0316875295820195908201906001016143f6565b509495945050505050565b84815260806020820152600061443f60808301866143e3565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156144875785810183015185820160400152820161446b565b818111156144985783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b115c9c9bdc88185b5bdd5b9d60a21b604082015260600190565b60208082526005908201526477726f6e6760d81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b85815284602082015260a06040820152600061456d60a08301866143e3565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561459d5761459d614633565b500190565b6000826145bd57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156145dc576145dc614633565b500290565b6000828210156145f3576145f3614633565b500390565b600181811c9082168061460c57607f821691505b6020821081141561462d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146112f257600080fd5b80151581146112f257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fc00773313eb7aa35e32afeb839a3562125d1d2a5a37d92f60514028627fe87f64736f6c634300080400336080604052600880546001600160a01b031916738e377cc27abfb273313791097bcce590a84f1f971790556000600b553480156200003c57600080fd5b50604051806060016040528060218152602001620025e260219139604051806060016040528060218152602001620025e26021913973580de58c1bd593a43dadcf0a739d504621817c0582828160039080519060200190620000a09291906200015c565b508051620000b69060049060208401906200015c565b50506005805460ff1916601217905550600a80546001600160a01b039092166001600160a01b03199092169190911790555060009050620000f43390565b600f80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610e10601755692a5a058fc295ed0000006018556200023f565b8280546200016a9062000202565b90600052602060002090601f0160209004810192826200018e5760008555620001d9565b82601f10620001a957805160ff1916838001178555620001d9565b82800160010185558215620001d9579182015b82811115620001d9578251825591602001919060010190620001bc565b50620001e7929150620001eb565b5090565b5b80821115620001e75760008155600101620001ec565b600181811c908216806200021757607f821691505b602082108114156200023957634e487b7160e01b600052602260045260246000fd5b50919050565b612393806200024f6000396000f3fe60806040526004361061026b5760003560e01c80637e3e7fd211610144578063bd0a2381116100b6578063dd62ed3e1161007a578063dd62ed3e1461079b578063e98030c7146107e1578063f2fde38b14610801578063fbcbc0f114610821578063fc6f946814610841578063ffb2c4791461086157600080fd5b8063bd0a238114610705578063be10b61414610725578063c143644f1461073b578063d64039ae1461075b578063dd4670641461077b57600080fd5b806395d89b411161010857806395d89b411461063a578063a457c2d71461064f578063a8b9d2401461066f578063a9059cbb1461068f578063aafd847a146106af578063bc4c4b37146106e557600080fd5b80637e3e7fd2146105b057806385552f60146105d057806385a6b3ae146105e65780638da5cb5b146105fc57806391b89fba1461061a57600080fd5b8063313ce567116101dd5780634e7b827f116101a15780634e7b827f146104a55780635183d6fd146104d55780636a4740021461053a5780636f2789ec1461054f57806370a0823114610565578063715018a61461059b57600080fd5b8063313ce5671461040357806331e79db0146104255780633243c7911461044557806334e8c67914610465578063395093511461048557600080fd5b80631582358e1161022f5780631582358e1461033357806318160ddd1461036b578063226cfa3d1461038057806323b872dd146103ad57806327ce0147146103cd5780633009a609146103ed57600080fd5b8063059ef8d71461027757806306fdde0314610299578063095ea7b3146102c457806309bbedde146102f45780630dcb2e891461031357600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611f9c565b61089c565b005b3480156102a557600080fd5b506102ae610a1c565b6040516102bb91906120c1565b60405180910390f35b3480156102d057600080fd5b506102e46102df36600461204a565b610aae565b60405190151581526020016102bb565b34801561030057600080fd5b506012545b6040519081526020016102bb565b34801561031f57600080fd5b5061029761032e3660046120a9565b610ac5565b34801561033f57600080fd5b50600a54610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561037757600080fd5b50600254610305565b34801561038c57600080fd5b5061030561039b366004611f2c565b601a6020526000908152604090205481565b3480156103b957600080fd5b506102e46103c836600461200a565b610af4565b3480156103d957600080fd5b506103056103e8366004611f2c565b610b5d565b3480156103f957600080fd5b5061030560165481565b34801561040f57600080fd5b5060055460405160ff90911681526020016102bb565b34801561043157600080fd5b50610297610440366004611f2c565b610bb9565b34801561045157600080fd5b506102976104603660046120a9565b610cba565b34801561047157600080fd5b5061029761048036600461204a565b610d96565b34801561049157600080fd5b506102e46104a036600461204a565b610e82565b3480156104b157600080fd5b506102e46104c0366004611f2c565b60196020526000908152604090205460ff1681565b3480156104e157600080fd5b506104f56104f03660046120a9565b610eb8565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016102bb565b34801561054657600080fd5b5061029761102a565b34801561055b57600080fd5b5061030560175481565b34801561057157600080fd5b50610305610580366004611f2c565b6001600160a01b031660009081526020819052604090205490565b3480156105a757600080fd5b5061029761105d565b3480156105bc57600080fd5b506102976105cb366004611f2c565b6110d1565b3480156105dc57600080fd5b50610305600b5481565b3480156105f257600080fd5b50610305600e5481565b34801561060857600080fd5b50600f546001600160a01b0316610353565b34801561062657600080fd5b50610305610635366004611f2c565b61111d565b34801561064657600080fd5b506102ae611128565b34801561065b57600080fd5b506102e461066a36600461204a565b611137565b34801561067b57600080fd5b5061030561068a366004611f2c565b611186565b34801561069b57600080fd5b506102e46106aa36600461204a565b6111b2565b3480156106bb57600080fd5b506103056106ca366004611f2c565b6001600160a01b03166000908152600d602052604090205490565b3480156106f157600080fd5b506102e4610700366004611f64565b6111bf565b34801561071157600080fd5b506102976107203660046120a9565b61126d565b34801561073157600080fd5b5061030560185481565b34801561074757600080fd5b506102976107563660046120a9565b61129c565b34801561076757600080fd5b50610297610776366004611f2c565b611357565b34801561078757600080fd5b506102976107963660046120a9565b6113a3565b3480156107a757600080fd5b506103056107b6366004611fdd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ed57600080fd5b506102976107fc3660046120a9565b61143a565b34801561080d57600080fd5b5061029761081c366004611f2c565b6114b1565b34801561082d57600080fd5b506104f561083c366004611f2c565b61159c565b34801561084d57600080fd5b50600854610353906001600160a01b031681565b34801561086d57600080fd5b5061088161087c3660046120a9565b611714565b604080519384526020840192909252908201526060016102bb565b600f546001600160a01b031633146108cf5760405162461bcd60e51b81526004016108c690612138565b60405180910390fd5b6001600160a01b03831660009081526019602052604090205460ff16156108f557505050565b601854821061098657610908838361183d565b604051632f0ad01760e21b8152601260048201526001600160a01b03841660248201526044810183905273acb8b3d78cad79154940b98e24dfc095556067e79063bc2b405c9060640160006040518083038186803b15801561096957600080fd5b505af415801561097d573d6000803e3d6000fd5b50505050610a04565b61099183600061183d565b60405163131836e760e21b8152601260048201526001600160a01b038416602482015273acb8b3d78cad79154940b98e24dfc095556067e790634c60db9c9060440160006040518083038186803b1580156109eb57600080fd5b505af41580156109ff573d6000803e3d6000fd5b505050505b8015610a1757610a158360016111bf565b505b505050565b606060038054610a2b90612281565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5790612281565b8015610aa45780601f10610a7957610100808354040283529160200191610aa4565b820191906000526020600020905b815481529060010190602001808311610a8757829003601f168201915b5050505050905090565b6000610abb338484611896565b5060015b92915050565b600f546001600160a01b03163314610aef5760405162461bcd60e51b81526004016108c690612138565b601855565b6000610b01848484611943565b610b538433610b4e85604051806060016040528060288152602001612311602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611978565b611896565b5060019392505050565b6001600160a01b0381166000908152600c602090815260408083205491839052822054600654600160801b92610baf92610baa92610ba491610b9f91906119af565b611a35565b90611a45565b611a83565b610abf91906121ec565b600f546001600160a01b03163314610be35760405162461bcd60e51b81526004016108c690612138565b6001600160a01b0381166000908152601960205260408120805460ff19166001179055610c1190829061183d565b60405163131836e760e21b8152601260048201526001600160a01b038216602482015273acb8b3d78cad79154940b98e24dfc095556067e790634c60db9c9060440160006040518083038186803b158015610c6b57600080fd5b505af4158015610c7f573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b6009546001600160a01b03163314610d025760405162461bcd60e51b815260206004820152600b60248201526a27b7363c9031b0b63632b960a91b60448201526064016108c6565b6000610d0d60025490565b11610d1757600080fd5b8015610d9357610d4a610d2960025490565b610d3783600160801b6119af565b610d4191906121ec565b60065490611a96565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600e54610d8f9082611a96565b600e555b50565b6008546001600160a01b03163214610dc05760405162461bcd60e51b81526004016108c690612114565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610e0857600080fd5b505af1158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e409190612075565b610e7e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108c6565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610abb918590610b4e9086611a96565b600080600080600080600080601273acb8b3d78cad79154940b98e24dfc095556067e763deb3d89690916040518263ffffffff1660e01b8152600401610f0091815260200190565b60206040518083038186803b158015610f1857600080fd5b505af4158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f509190612091565b8910610f7557506000965060001995508594508693508392508291508190508061101f565b6040516368d54f3f60e11b815260126004820152602481018a905260009073acb8b3d78cad79154940b98e24dfc095556067e79063d1aa9e7e9060440160206040518083038186803b158015610fca57600080fd5b505af4158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190611f48565b905061100d8161159c565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b8152602060048201526008602482015267191a5cd8589b195960c21b60448201526064016108c6565b600f546001600160a01b031633146110875760405162461bcd60e51b81526004016108c690612138565b600f546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600f80546001600160a01b0319169055565b600f546001600160a01b031633146110fb5760405162461bcd60e51b81526004016108c690612138565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610abf82611186565b606060048054610a2b90612281565b6000610abb3384610b4e85604051806060016040528060258152602001612339602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611978565b6001600160a01b0381166000908152600d6020526040812054610abf906111ac84610b5d565b90611af5565b6000610abb338484611943565b600f546000906001600160a01b031633146111ec5760405162461bcd60e51b81526004016108c690612138565b60006111f784611b51565b90508015611263576001600160a01b0384166000818152601a6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092906112519085815260200190565b60405180910390a36001915050610abf565b5060009392505050565b6008546001600160a01b031632146112975760405162461bcd60e51b81526004016108c690612114565b600b55565b6008546001600160a01b031632146112c65760405162461bcd60e51b81526004016108c690612114565b604051600090339083908381818185875af1925050503d8060008114611308576040519150601f19603f3d011682016040523d82523d6000602084013e61130d565b606091505b5050905080610e7e5760405162461bcd60e51b81526020600482015260166024820152752330b4b632b2103a37903932ba3934b2bb329021272160511b60448201526064016108c6565b6008546001600160a01b031632146113815760405162461bcd60e51b81526004016108c690612114565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031633146113cd5760405162461bcd60e51b81526004016108c690612138565b600f8054601080546001600160a01b03199081166001600160a01b038416179091551690556113fc81426121d4565b601155600f546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b600f546001600160a01b031633146114645760405162461bcd60e51b81526004016108c690612138565b603c81101580156114785750620151808111155b6114ac5760405162461bcd60e51b815260206004820152600560248201526477726f6e6760d81b60448201526064016108c6565b601755565b600f546001600160a01b031633146114db5760405162461bcd60e51b81526004016108c690612138565b6001600160a01b0381166115405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c6565b600f546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152601260048201526001600160a01b0382166024820152819060009081908190819081908190819073acb8b3d78cad79154940b98e24dfc095556067e7906317e142d19060440160206040518083038186803b15801561160757600080fd5b505af415801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f9190612091565b96506000199550600087126116a15760165487111561166d57601654611666908890611cc9565b95506116a1565b60165460125460009110611682576000611691565b60165460125461169191611af5565b905061169d8882611a45565b9650505b6116aa88611186565b94506116b588610b5d565b6001600160a01b0389166000908152601a60205260409020549094509250826116df5760006116ed565b6017546116ed908490611a96565b91504282116116fd576000611707565b6117078242611af5565b9050919395975091939597565b601254600090819081908061173457505060165460009250829150611836565b6016546000805a90506000805b898410801561174f57508582105b15611825578461175e816122bc565b6012549096508610905061177157600094505b60006012600001868154811061179757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316808352601a9091526040909120549091506117c890611d15565b156117eb576117d88160016111bf565b156117eb57816117e7816122bc565b9250505b826117f5816122bc565b93505060005a90508085111561181c576118196118128683611af5565b8790611a96565b95505b93506117419050565b601685905590975095509193505050505b9193909250565b6001600160a01b0382166000908152602081905260409020548082111561187657600061186a8383611af5565b9050610a158482611d3c565b80821015610a1757600061188a8284611af5565b9050610a158482611da0565b6001600160a01b0383166118bc5760405162461bcd60e51b81526004016108c69061216d565b6001600160a01b0382166118e25760405162461bcd60e51b81526004016108c69061216d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152600a602482015269139bc8185b1b1bddd95960b21b60448201526064016108c6565b6000818484111561199c5760405162461bcd60e51b81526004016108c691906120c1565b506119a7838561226a565b949350505050565b6000826119be57506000610abf565b60006119ca838561220c565b9050826119d785836121ec565b14611a2e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108c6565b9392505050565b60008181811215610abf57600080fd5b600080611a528385612193565b905060008312158015611a655750838112155b80611a7a5750600083128015611a7a57508381125b611a2e57600080fd5b600080821215611a9257600080fd5b5090565b600080611aa383856121d4565b905083811015611a2e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108c6565b600082821115611b475760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016108c6565b611a2e828461226a565b600080611b5d83611186565b9050600b54811115611cc0576001600160a01b0383166000908152600d6020526040902054611b8c9082611a96565b6001600160a01b0384166000818152600d6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90611bdb9084815260200190565b60405180910390a2600a5460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb90604401602060405180830381600087803b158015611c3257600080fd5b505af1158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a9190612075565b905080611cb9576001600160a01b0384166000908152600d6020526040902054611c949083611af5565b6001600160a01b039094166000908152600d6020526040812094909455509192915050565b5092915050565b50600092915050565b6000808212158015611ce4575082611ce1838261222b565b13155b80611d025750600082128015611d02575082611d00838261222b565b135b611d0b57600080fd5b611a2e828461222b565b600042821115611d2757506000919050565b601754611d344284611af5565b101592915050565b611d468282611de4565b611d80611d61610b9f836006546119af90919063ffffffff16565b6001600160a01b0384166000908152600c602052604090205490611cc9565b6001600160a01b039092166000908152600c602052604090209190915550565b611daa8282611e8d565b611d80611dc5610b9f836006546119af90919063ffffffff16565b6001600160a01b0384166000908152600c602052604090205490611a45565b6001600160a01b038216611e3a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108c6565b600254611e479082611a96565b6002556001600160a01b038216600090815260208190526040902054611e6d9082611a96565b6001600160a01b0390921660009081526020819052604090209190915550565b6001600160a01b038216611eb35760405162461bcd60e51b81526004016108c69061216d565b604080518082018252600f81526e657863656564732062616c616e636560881b6020808301919091526001600160a01b0385166000908152908190529190912054611eff918390611978565b6001600160a01b038316600090815260208190526040902055600254611f259082611af5565b6002555050565b600060208284031215611f3d578081fd5b8135611a2e816122ed565b600060208284031215611f59578081fd5b8151611a2e816122ed565b60008060408385031215611f76578081fd5b8235611f81816122ed565b91506020830135611f9181612302565b809150509250929050565b600080600060608486031215611fb0578081fd5b8335611fbb816122ed565b9250602084013591506040840135611fd281612302565b809150509250925092565b60008060408385031215611fef578182fd5b8235611ffa816122ed565b91506020830135611f91816122ed565b60008060006060848603121561201e578283fd5b8335612029816122ed565b92506020840135612039816122ed565b929592945050506040919091013590565b6000806040838503121561205c578182fd5b8235612067816122ed565b946020939093013593505050565b600060208284031215612086578081fd5b8151611a2e81612302565b6000602082840312156120a2578081fd5b5051919050565b6000602082840312156120ba578081fd5b5035919050565b6000602080835283518082850152825b818110156120ed578581018301518582016040015282016120d1565b818111156120fe5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b600080821280156001600160ff1b03849003851316156121b5576121b56122d7565b600160ff1b83900384128116156121ce576121ce6122d7565b50500190565b600082198211156121e7576121e76122d7565b500190565b60008261220757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612226576122266122d7565b500290565b60008083128015600160ff1b850184121615612249576122496122d7565b6001600160ff1b0384018313811615612264576122646122d7565b50500390565b60008282101561227c5761227c6122d7565b500390565b600181811c9082168061229557607f821691505b602082108114156122b657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122d0576122d06122d7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610d9357600080fd5b8015158114610d9357600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122030fb03ccb49f1696ce62b9f43ab656693428a5d18addd2fe5fea635e978cca5a64736f6c63430008040033455049434845524f5f54484f5245554d5f4469766964656e645f547261636b65724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Library Used


Deployed ByteCode Sourcemap

25374:21658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26992:59;;;;;;;;;;;;;;;;;;;14792:25:1;;;14780:2;14765:18;26992:59:0;;;;;;;;2762:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25674:27::-;;;;;;;;;;-1:-1:-1;25674:27:0;;;;-1:-1:-1;;;25674:27:0;;-1:-1:-1;;;;;25674:27:0;;;;;;-1:-1:-1;;;;;4510:32:1;;;4492:51;;4480:2;4465:18;25674:27:0;4447:102:1;28488:113:0;;;;;;;;;;;;;:::i;:::-;;3656:169;;;;;;;;;;-1:-1:-1;3656:169:0;;;;;:::i;:::-;;:::i;:::-;;;6291:14:1;;6284:22;6266:41;;6254:2;6239:18;3656:169:0;6221:92:1;25537:36:0;;;;;;;;;;-1:-1:-1;25537:36:0;;;;;;;;;;;31764:188;;;;;;;;;;-1:-1:-1;31764:188:0;;;;;:::i;:::-;;:::i;34810:128::-;;;;;;;;;;-1:-1:-1;34810:128:0;;;;;:::i;:::-;;:::i;26893:24::-;;;;;;;;;;;;;;;;29857:148;;;;;;;;;;-1:-1:-1;29857:148:0;;;;;:::i;:::-;;:::i;3063:108::-;;;;;;;;;;-1:-1:-1;3151:12:0;;3063:108;;26282:79;;;;;;;;;;-1:-1:-1;26282:79:0;;;;-1:-1:-1;;;;;26282:79:0;;;25966:80;;;;;;;;;;-1:-1:-1;25966:80:0;;;;-1:-1:-1;;;;;25966:80:0;;;29478:111;;;;;;;;;;-1:-1:-1;29478:111:0;;;;;:::i;:::-;;:::i;30506:183::-;;;;;;;;;;-1:-1:-1;30506:183:0;;;;;:::i;:::-;;:::i;26794:42::-;;;;;;;;;;;;;;;;29100:199;;;;;;;;;;-1:-1:-1;29100:199:0;;;;;:::i;:::-;;:::i;3833:321::-;;;;;;;;;;-1:-1:-1;3833:321:0;;;;;:::i;:::-;;:::i;33054:177::-;;;;;;;;;;-1:-1:-1;33054:177:0;;;;;:::i;:::-;;:::i;2964:91::-;;;;;;;;;;-1:-1:-1;3038:9:0;;2964:91;;3038:9;;;;16277:36:1;;16265:2;16250:18;2964:91:0;16232:87:1;35967:160:0;;;;;;;;;;-1:-1:-1;35967:160:0;;;;;:::i;:::-;;:::i;26114:76::-;;;;;;;;;;-1:-1:-1;26114:76:0;;;;-1:-1:-1;;;;;26114:76:0;;;4162:218;;;;;;;;;;-1:-1:-1;4162:218:0;;;;;:::i;:::-;;:::i;30697:185::-;;;;;;;;;;-1:-1:-1;30697:185:0;;;;;:::i;:::-;;:::i;26449:29::-;;;;;;;;;;;;;;;;31960:674;;;;;;;;;;-1:-1:-1;31960:674:0;;;;;:::i;:::-;;:::i;36331:110::-;;;;;;;;;;;;;:::i;27381:51::-;;;;;;;;;;-1:-1:-1;27381:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27179:48;;;;;;;;;;;;;;;;26568:34;;;;;;;;;;;;;;;;34499:112;;;;;;;;;;-1:-1:-1;34499:112:0;;;;;:::i;:::-;;:::i;25805:70::-;;;;;;;;;;-1:-1:-1;25805:70:0;;;;-1:-1:-1;;;;;25805:70:0;;;26926:59;;;;;;;;;;;;;;;;25624:41;;;;;;;;;;-1:-1:-1;25624:41:0;;;;;;;;;;;28972:120;;;;;;;;;;-1:-1:-1;28972:120:0;;;;;:::i;:::-;;:::i;29307:163::-;;;;;;;;;;-1:-1:-1;29307:163:0;;;;;:::i;:::-;;:::i;30013:158::-;;;;;;;;;;-1:-1:-1;30013:158:0;;;;;:::i;:::-;;:::i;31395:172::-;;;;;;;;;;-1:-1:-1;31395:172:0;;;;;:::i;:::-;;:::i;31575:181::-;;;;;;;;;;-1:-1:-1;31575:181:0;;;;;:::i;:::-;;:::i;32642:202::-;;;;;;;;;;-1:-1:-1;32642:202:0;;;;;:::i;:::-;;:::i;29597:120::-;;;;;;;;;;-1:-1:-1;29597:120:0;;;;;:::i;:::-;;:::i;26710:33::-;;;;;;;;;;;;;;;;35367:301;;;;;;;;;;-1:-1:-1;35367:301:0;;;;;:::i;:::-;;:::i;3179:127::-;;;;;;;;;;-1:-1:-1;3179:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3280:18:0;3253:7;3280:18;;;;;;;;;;;;3179:127;960:148;;;;;;;;;;;;;:::i;30179:122::-;;;;;;;;;;-1:-1:-1;30179:122:0;;;;;:::i;:::-;;:::i;25882:75::-;;;;;;;;;;-1:-1:-1;25882:75:0;;;;-1:-1:-1;;;;;25882:75:0;;;26523:36;;;;;;;;;;;;;;;;29725:124;;;;;;;;;;-1:-1:-1;29725:124:0;;;;;:::i;:::-;;:::i;737:87::-;;;;;;;;;;-1:-1:-1;810:6:0;;;;;-1:-1:-1;;;;;810:6:0;737:87;;30309:189;;;;;;;;;;-1:-1:-1;30309:189:0;;;;;:::i;:::-;;:::i;30890:110::-;;;;;;;;;;-1:-1:-1;30890:110:0;;;;;:::i;:::-;;:::i;35676:283::-;;;;;;;;;;-1:-1:-1;35676:283:0;;;;;:::i;:::-;;:::i;25457:43::-;;;;;;;;;;;;25496:4;25457:43;;2861:95;;;;;;;;;;;;;:::i;26485:31::-;;;;;;;;;;;;;;;;33989:198;;;;;;;;;;-1:-1:-1;33989:198:0;;;;;:::i;:::-;;:::i;26843:41::-;;;;;;;;;;;;;;;;33727:127;;;;;;;;;;-1:-1:-1;33727:127:0;;;;;:::i;:::-;;:::i;4388:269::-;;;;;;;;;;-1:-1:-1;4388:269:0;;;;;:::i;:::-;;:::i;27244:56::-;;;;;;;;;;;;;;;;3314:175;;;;;;;;;;-1:-1:-1;3314:175:0;;;;;:::i;:::-;;:::i;26197:78::-;;;;;;;;;;-1:-1:-1;26197:78:0;;;;-1:-1:-1;;;;;26197:78:0;;;31008:122;;;;;;;;;;-1:-1:-1;31008:122:0;;;;;:::i;:::-;;:::i;35216:143::-;;;;;;;;;;-1:-1:-1;35216:143:0;;;;;:::i;:::-;;:::i;26609:42::-;;;;;;;;;;;;;;;;28846:118;;;;;;;;;;-1:-1:-1;28846:118:0;;;;;:::i;:::-;;:::i;27439:58::-;;;;;;;;;;-1:-1:-1;27439:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34946:262;;;;;;;;;;-1:-1:-1;34946:262:0;;;;;:::i;:::-;;:::i;36135:188::-;;;;;;;;;;-1:-1:-1;36135:188:0;;;;;:::i;:::-;;:::i;34619:183::-;;;;;;;;;;-1:-1:-1;34619:183:0;;;;;:::i;:::-;;:::i;32852:194::-;;;;;;;;;;-1:-1:-1;32852:194:0;;;;;:::i;:::-;;:::i;27307:50::-;;;;;;;;;;;;;;;;26368:72;;;;;;;;;;-1:-1:-1;26368:72:0;;;;-1:-1:-1;;;;;26368:72:0;;;28609:229;;;;;;;;;;-1:-1:-1;28609:229:0;;;;;:::i;:::-;;:::i;26053:52::-;;;;;;;;;;-1:-1:-1;26053:52:0;;;;-1:-1:-1;;;;;26053:52:0;;;1368:226;;;;;;;;;;-1:-1:-1;1368:226:0;;;;;:::i;:::-;;:::i;3497:151::-;;;;;;;;;;-1:-1:-1;3497:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3613:18:0;;;3586:7;3613:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3497:151;33420:177;;;;;;;;;;-1:-1:-1;33420:177:0;;;;;:::i;:::-;;:::i;33239:173::-;;;;;;;;;;-1:-1:-1;33239:173:0;;;;;:::i;:::-;;:::i;31278:109::-;;;;;;;;;;-1:-1:-1;31278:109:0;;;;;:::i;:::-;;:::i;27058:52::-;;;;;;;;;;;;;;;;25582:35;;;;;;;;;;-1:-1:-1;25582:35:0;;;;;;;;;;;27117:53;;;;;;;;;;;;;;;;26750:35;;;;;;;;;;;;;;;;1116:244;;;;;;;;;;-1:-1:-1;1116:244:0;;;;;:::i;:::-;;:::i;33862:119::-;;;;;;;;;;-1:-1:-1;33862:119:0;;;;;:::i;:::-;;:::i;33605:114::-;;;;;;;;;;-1:-1:-1;33605:114:0;;;;;:::i;:::-;;:::i;26658:45::-;;;;;;;;;;;;;;;;31138:132;;;;;;;;;;-1:-1:-1;31138:132:0;;;;;:::i;:::-;;:::i;2762:91::-;2807:13;2840:5;2833:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2762:91;:::o;28488:113::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;;;;;;;;;28542:17:::1;:15;:17::i;:::-;28570:16;:23:::0;;-1:-1:-1;;28570:23:0::1;;;::::0;;28488:113::o;3656:169::-;3739:4;3756:39;191:10;3779:7;3788:6;3756:8;:39::i;:::-;-1:-1:-1;3813:4:0;3656:169;;;;;:::o;31764:188::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31874:1:::1;31859:12;:16;31851:47;;;::::0;-1:-1:-1;;;31851:47:0;;14155:2:1;31851:47:0::1;::::0;::::1;14137:21:1::0;14194:2;14174:18;;;14167:30;-1:-1:-1;;;14213:18:1;;;14206:48;14271:18;;31851:47:0::1;14127:168:1::0;31851:47:0::1;31909:20;:35:::0;31764:188::o;34810:128::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;34881:22:::1;::::0;:49:::1;::::0;-1:-1:-1;;;34881:49:0;;::::1;::::0;::::1;14792:25:1::0;;;-1:-1:-1;;;;;34881:22:0;;::::1;::::0;:38:::1;::::0;14765:18:1;;34881:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34810:128:::0;:::o;29857:148::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29930:33:::1;29946:10;29958:4;29930:15;:33::i;:::-;29974:10;:23:::0;;-1:-1:-1;;;;;;29974:23:0::1;-1:-1:-1::0;;;;;29974:23:0;;;::::1;::::0;;;::::1;::::0;;29857:148::o;29478:111::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29553:15:::1;:28:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29553:28:0;;::::1;::::0;;;::::1;::::0;;29478:111::o;30506:183::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;30587:6;:22;;30579:40;;;;-1:-1:-1::0;;;30579:40:0::1;;;;;;;:::i;:::-;30630:14;:23:::0;;;30664:17:::1;:15;:17::i;:::-;30506:183:::0;:::o;29100:199::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29185:20:::1;:35:::0;;-1:-1:-1;;;;;;29185:35:0::1;-1:-1:-1::0;;;;;29185:35:0;;::::1;::::0;;::::1;::::0;;;29231:22:::1;::::0;:60:::1;::::0;-1:-1:-1;;;29231:60:0;;::::1;::::0;::::1;4492:51:1::0;;;;29231:22:0;;::::1;::::0;:46:::1;::::0;4465:18:1;;29231:60:0::1;4447:102:1::0;3833:321:0;3939:4;3956:36;3966:6;3974:9;3985:6;3956:9;:36::i;:::-;4003:121;4012:6;191:10;4034:89;4072:6;4034:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4034:19:0;;;;;;:11;:19;;;;;;;;191:10;4034:33;;;;;;;;;;:37;:89::i;:::-;4003:8;:121::i;:::-;-1:-1:-1;4142:4:0;3833:321;;;;;:::o;33054:177::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;33131:6;:22;;;;33123:40;;;;-1:-1:-1::0;;;33123:40:0::1;;;;;;;:::i;:::-;33174:21;::::0;::::1;:12;:21:::0;33206:17:::1;:15;:17::i;35967:160::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;36057:42:::1;::::0;-1:-1:-1;;;36057:42:0;;36080:10:::1;36057:42;::::0;::::1;5409:51:1::0;5476:18;;;5469:34;;;-1:-1:-1;;;;;36057:22:0;::::1;::::0;::::1;::::0;5382:18:1;;36057:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36049:70;;;::::0;-1:-1:-1;;;36049:70:0;;8524:2:1;36049:70:0::1;::::0;::::1;8506:21:1::0;8563:2;8543:18;;;8536:30;-1:-1:-1;;;8582:18:1;;;8575:45;8637:18;;36049:70:0::1;8496:165:1::0;36049:70:0::1;35967:160:::0;;:::o;4162:218::-;191:10;4250:4;4299:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4299:34:0;;;;;;;;;;4250:4;;4267:83;;4290:7;;4299:50;;4338:10;4299:38;:50::i;30697:185::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;30779:6;:22;;30771:40;;;;-1:-1:-1::0;;;30771:40:0::1;;;;;;;:::i;:::-;30822:15;:24:::0;;;30857:17:::1;:15;:17::i;31960:674::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;32045:48:::1;32127:10;32045:94;;32205:4;-1:-1:-1::0;;;;;32160:50:0::1;:25;-1:-1:-1::0;;;;;32160:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32160:50:0::1;;32152:88;;;::::0;-1:-1:-1;;;32152:88:0;;9224:2:1;32152:88:0::1;::::0;::::1;9206:21:1::0;9263:2;9243:18;;;9236:30;9302:27;9282:18;;;9275:55;9347:18;;32152:88:0::1;9196:175:1::0;32152:88:0::1;32253:82;::::0;-1:-1:-1;;;32253:82:0;;-1:-1:-1;;;;;32253:46:0;::::1;:82;::::0;::::1;4492:51:1::0;;;32253:46:0;::::1;::::0;4465:18:1;;32253:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32346:61:0::1;::::0;-1:-1:-1;;;32346:61:0;;32401:4:::1;32346:61;::::0;::::1;4492:51:1::0;-1:-1:-1;;;;;32346:46:0;::::1;::::0;-1:-1:-1;32346:46:0::1;::::0;-1:-1:-1;4465:18:1;;32346:61:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32473:9:0::1;::::0;32418:66:::1;::::0;-1:-1:-1;;;32418:66:0;;-1:-1:-1;;;32473:9:0;;::::1;-1:-1:-1::0;;;;;32473:9:0;;::::1;;32418:66:::0;::::1;4492:51:1::0;32418:46:0;::::1;::::0;-1:-1:-1;32418:46:0::1;::::0;-1:-1:-1;4465:18:1;;32418:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32550:11:0::1;::::0;32495:68:::1;::::0;-1:-1:-1;;;32495:68:0;;-1:-1:-1;;;;;32550:11:0;;::::1;32495:68;::::0;::::1;4492:51:1::0;32495:46:0;;::::1;::::0;-1:-1:-1;32495:46:0::1;::::0;-1:-1:-1;4465:18:1;;32495:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32576:22:0::1;:50:::0;;-1:-1:-1;;;;;;32576:50:0::1;-1:-1:-1::0;;;;;32576:50:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;31960:674:0:o;36331:110::-;36368:22;;:65;;-1:-1:-1;;;36368:65:0;;36414:10;36368:65;;;4738:51:1;36368:22:0;4805:18:1;;;4798:50;-1:-1:-1;;;;;36368:22:0;;;;:37;;4711:18:1;;36368:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34499:112::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;34576:16:::1;:27:::0;34499:112::o;28972:120::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29050:24:::1;:34:::0;28972:120::o;29307:163::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29398:22:::1;::::0;:64:::1;::::0;-1:-1:-1;;;29398:64:0;;::::1;::::0;::::1;14792:25:1::0;;;-1:-1:-1;;;;;29398:22:0;;::::1;::::0;:52:::1;::::0;14765:18:1;;29398:64:0::1;14747:76:1::0;30013:158:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;30091:33:::1;30107:10;30119:4;30091:15;:33::i;:::-;30135:15;:28:::0;;-1:-1:-1;;;;;;30135:28:0::1;-1:-1:-1::0;;;;;30135:28:0;;;::::1;::::0;;;::::1;::::0;;30013:158::o;31395:172::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31528:18:::1;:31:::0;31395:172::o;31575:181::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31680:1:::1;31667:10;:14;31659:42;;;::::0;-1:-1:-1;;;31659:42:0;;11659:2:1;31659:42:0::1;::::0;::::1;11641:21:1::0;11698:2;11678:18;;;11671:30;-1:-1:-1;;;11717:18:1;;;11710:45;11772:18;;31659:42:0::1;11631:165:1::0;31659:42:0::1;31712:23;:36:::0;31575:181::o;32642:202::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;32731:6;:22;;;;32723:40;;;;-1:-1:-1::0;;;32723:40:0::1;;;;;;;:::i;:::-;32774:34;::::0;::::1;:25;:34:::0;32819:17:::1;:15;:17::i;29597:120::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29678:16:::1;:31:::0;;-1:-1:-1;;;;;;29678:31:0::1;-1:-1:-1::0;;;;;29678:31:0;;;::::1;::::0;;;::::1;::::0;;29597:120::o;35367:301::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;35512:22:::1;::::0;:35:::1;::::0;-1:-1:-1;;;;;;35512:35:0;;::::1;::::0;::::1;14792:25:1::0;;;35443:19:0::1;::::0;;;;;-1:-1:-1;;;;;35512:22:0::1;::::0;:30:::1;::::0;14765:18:1;;35512:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35563:97;::::0;;15970:25:1;;;16026:2;16011:18;;16004:34;;;16054:18;;;16047:34;;;16112:2;16097:18;;16090:34;;;35442:105:0;;-1:-1:-1;35442:105:0;;-1:-1:-1;35442:105:0;-1:-1:-1;35650:9:0::1;::::0;35638:5:::1;::::0;35563:97:::1;::::0;15957:3:1;15942:19;35563:97:0::1;;;;;;;943:1;;;35367:301:::0;:::o;960:148::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;1051:6:::1;::::0;1030:40:::1;::::0;1067:1:::1;::::0;1051:6:::1;::::0;::::1;-1:-1:-1::0;;;;;1051:6:0::1;::::0;1030:40:::1;::::0;1067:1;;1030:40:::1;1081:6;:19:::0;;-1:-1:-1;;;;;;1081:19:0::1;::::0;;960:148::o;30179:122::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;30260:19:::1;:33:::0;;-1:-1:-1;;;;;;30260:33:0::1;-1:-1:-1::0;;;;;30260:33:0;;;::::1;::::0;;;::::1;::::0;;30179:122::o;29725:124::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;29808:18:::1;:33:::0;;-1:-1:-1;;;;;;29808:33:0::1;-1:-1:-1::0;;;;;29808:33:0;;;::::1;::::0;;;::::1;::::0;;29725:124::o;30309:189::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;30393:6;:22;;30385:40;;;;-1:-1:-1::0;;;30385:40:0::1;;;;;;;:::i;:::-;30436:17;:26:::0;;;30473:17:::1;:15;:17::i;30890:110::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;30966:14:::1;:26:::0;30890:110::o;35676:283::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;35820:18:::1;::::0;35769:21:::1;::::0;35820:31:::1;::::0;35843:7;35820:22:::1;:31::i;:::-;35809:7;:42;;35801:72;;;::::0;-1:-1:-1;;;35801:72:0;;12405:2:1;35801:72:0::1;::::0;::::1;12387:21:1::0;12444:2;12424:18;;;12417:30;-1:-1:-1;;;12463:18:1;;;12456:47;12520:18;;35801:72:0::1;12377:167:1::0;35801:72:0::1;35891:8;::::0;::::1;;35886:66;;35916:24;35932:7;35916:15;:24::i;2861:95::-:0;2908:13;2941:7;2934:14;;;;;:::i;33989:198::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;34096:7:::1;::::0;-1:-1:-1;;;;;34088:15:0;;::::1;34096:7:::0;::::1;34088:15;;34080:45;;;::::0;-1:-1:-1;;;34080:45:0;;14502:2:1;34080:45:0::1;::::0;::::1;14484:21:1::0;14541:2;14521:18;;;14514:30;-1:-1:-1;;;14560:18:1;;;14553:47;14617:18;;34080:45:0::1;14474:167:1::0;34080:45:0::1;34138:41;34167:4;34173:5;34138:28;:41::i;33727:127::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33814:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:32;;-1:-1:-1;;33814:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33727:127::o;4388:269::-;4481:4;4498:129;191:10;4521:7;4530:96;4569:15;4530:96;;;;;;;;;;;;;;;;;191:10;4530:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4530:34:0;;;;;;;;;;;;:38;:96::i;3314:175::-;3400:4;3417:42;191:10;3441:9;3452:6;3417:9;:42::i;31008:122::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31090:18:::1;:32:::0;31008:122::o;35216:143::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;35290:22:::1;::::0;:61:::1;::::0;-1:-1:-1;;;35290:61:0;;-1:-1:-1;;;;;4510:32:1;;;35290:61:0::1;::::0;::::1;4492:51:1::0;35290:22:0;;::::1;::::0;:43:::1;::::0;4465:18:1;;35290:61:0::1;4447:102:1::0;28846:118:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;28923:23:::1;:33:::0;28846:118::o;34946:262::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35039:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;:39;;::::0;::::1;;;;35031:68;;;::::0;-1:-1:-1;;;35031:68:0;;10292:2:1;35031:68:0::1;::::0;::::1;10274:21:1::0;10331:2;10311:18;;;10304:30;-1:-1:-1;;;10350:18:1;;;10343:46;10406:18;;35031:68:0::1;10264:166:1::0;35031:68:0::1;-1:-1:-1::0;;;;;35110:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;35110:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35166:34;;6266:41:1;;;35166:34:0::1;::::0;6239:18:1;35166:34:0::1;;;;;;;34946:262:::0;;:::o;36135:188::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;36217:45:::1;::::0;36200:12:::1;::::0;36225:10:::1;::::0;36250:6;;36200:12;36217:45;36200:12;36217:45;36250:6;36225:10;36217:45:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36199:63;;;36281:7;36273:42;;;::::0;-1:-1:-1;;;36273:42:0;;13804:2:1;36273:42:0::1;::::0;::::1;13786:21:1::0;13843:2;13823:18;;;13816:30;-1:-1:-1;;;13862:18:1;;;13855:52;13924:18;;36273:42:0::1;13776:172:1::0;34619:183:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;34715:22:::1;::::0;:79:::1;::::0;-1:-1:-1;;;34715:79:0;;::::1;::::0;::::1;14792:25:1::0;;;-1:-1:-1;;;;;34715:22:0;;::::1;::::0;:60:::1;::::0;14765:18:1;;34715:79:0::1;14747:76:1::0;32852:194:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;32937:6;:22;;;;32929:40;;;;-1:-1:-1::0;;;32929:40:0::1;;;;;;;:::i;:::-;32980:30;::::0;::::1;:21;:30:::0;33021:17:::1;:15;:17::i;28609:229::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;28701:22:::1;::::0;:70:::1;::::0;-1:-1:-1;;;28701:70:0;;-1:-1:-1;;;;;4510:32:1;;;28701:70:0::1;::::0;::::1;4492:51:1::0;28701:22:0;;::::1;::::0;:43:::1;::::0;4465:18:1;;28701:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28782:48;28798:25;28825:4;28782:15;:48::i;1368:226::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;1449:6:::1;::::0;;1432:14:::1;:23:::0;;-1:-1:-1;;;;;;1432:23:0::1;-1:-1:-1::0;;;;;1449:6:0::1;::::0;::::1;;1432:23;::::0;;-1:-1:-1;;;;;;1466:19:0::1;::::0;;1508:22:::1;1526:4:::0;1508:15:::1;:22;:::i;:::-;1496:9;:34:::0;1567:6:::1;::::0;1546:40:::1;::::0;1583:1:::1;::::0;1567:6:::1;::::0;::::1;-1:-1:-1::0;;;;;1567:6:0::1;::::0;1546:40:::1;::::0;1583:1;;1546:40:::1;1368:226:::0;:::o;33420:177::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;33497:6;:22;;;;33489:40;;;;-1:-1:-1::0;;;33489:40:0::1;;;;;;;:::i;:::-;33540:21;::::0;::::1;:12;:21:::0;33572:17:::1;:15;:17::i;33239:173::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;25496:4:::1;33314:6;:22;;;;33306:40;;;;-1:-1:-1::0;;;33306:40:0::1;;;;;;;:::i;:::-;33357:19;::::0;::::1;:10;:19:::0;33387:17:::1;:15;:17::i;31278:109::-:0;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31352:16:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;31352:27:0;;::::1;::::0;;;::::1;::::0;;31278:109::o;1116:244::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1205:22:0;::::1;1197:73;;;::::0;-1:-1:-1;;;1197:73:0;;8117:2:1;1197:73:0::1;::::0;::::1;8099:21:1::0;8156:2;8136:18;;;8129:30;8195:34;8175:18;;;8168:62;-1:-1:-1;;;8246:18:1;;;8239:36;8292:19;;1197:73:0::1;8089:228:1::0;1197:73:0::1;1307:6;::::0;1286:38:::1;::::0;-1:-1:-1;;;;;1286:38:0;;::::1;::::0;1307:6:::1;::::0;::::1;;::::0;1286:38:::1;::::0;;;::::1;1335:6;:17:::0;;-1:-1:-1;;;;;1335:17:0;;::::1;;;-1:-1:-1::0;;;;;;1335:17:0;;::::1;::::0;;;::::1;::::0;;1116:244::o;33862:119::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;33941:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33941:32:0;;::::1;::::0;;;::::1;::::0;;33862:119::o;33605:114::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;33677:9:::1;:34:::0;;-1:-1:-1;;;;;33677:34:0;;::::1;-1:-1:-1::0;;;33677:34:0::1;-1:-1:-1::0;;;;;;33677:34:0;;::::1;::::0;;;::::1;::::0;;33605:114::o;31138:132::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;31227:21:::1;:35:::0;31138:132::o;16191:179::-;16249:7;;16281:5;16285:1;16281;:5;:::i;:::-;16269:17;;16310:1;16305;:6;;16297:46;;;;-1:-1:-1;;;16297:46:0;;8868:2:1;16297:46:0;;;8850:21:1;8907:2;8887:18;;;8880:30;8946:29;8926:18;;;8919:57;8993:18;;16297:46:0;8840:177:1;16297:46:0;16361:1;16191:179;-1:-1:-1;;;16191:179:0:o;36449:305::-;36508:238;36730:15;;36508:207;36700:14;;36508:177;36667:17;;36508:144;36630:21;;36508:107;36589:25;;36508:66;36561:12;;36508:38;36533:12;;36508:10;;:24;;:38;;;;:::i;:::-;:52;;:66::i;:238::-;36496:9;:250;36449:305::o;5807:300::-;-1:-1:-1;;;;;5909:19:0;;5901:44;;;;-1:-1:-1;;;5901:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5964:21:0;;5956:46;;;;-1:-1:-1;;;5956:46:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6015:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6067:32;;14792:25:1;;;6067:32:0;;14765:18:1;6067:32:0;;;;;;;;5807:300;;;:::o;36762:5520::-;-1:-1:-1;;;;;36860:18:0;;36852:43;;;;-1:-1:-1;;;36852:43:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36914:16:0;;36906:41;;;;-1:-1:-1;;;36906:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36967:19:0;;;;;;:13;:19;;;;;;;;36966:20;36958:55;;;;-1:-1:-1;;;36958:55:0;;13453:2:1;36958:55:0;;;13435:21:1;13492:2;13472:18;;;13465:30;-1:-1:-1;;;13511:18:1;;;13504:52;13573:18;;36958:55:0;13425:172:1;36958:55:0;37034:16;;;;;;;;:72;;-1:-1:-1;;;;;;37055:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37083:22:0;;;;;;:18;:22;;;;;;;;37055:50;37026:104;;;;-1:-1:-1;;;37026:104:0;;10978:2:1;37026:104:0;;;10960:21:1;11017:2;10997:18;;;10990:30;-1:-1:-1;;;11036:18:1;;;11029:49;11095:18;;37026:104:0;10950:169:1;37026:104:0;-1:-1:-1;;;;;37166:24:0;;37143:20;37166:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37194:22:0;;;;;;:18;:22;;;;;;;;37166:50;37247:16;;37143:73;;-1:-1:-1;37247:16:0;;;;;:64;;;;-1:-1:-1;;;;;;37280:31:0;;;;;;:25;:31;;;;;;;;37247:64;:97;;;;;37329:15;37328:16;37247:97;37229:3717;;;37389:23;;37379:6;:33;;37371:58;;;;-1:-1:-1;;;37371:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3280:18:0;;37446:32;3280:18;;;;;;;;;;;37554:14;;37517:33;37544:6;3280:18;37517:33;:::i;:::-;:51;;37509:76;;;;-1:-1:-1;;;37509:76:0;;;;;;;:::i;:::-;37229:3717;;;;37621:16;;;;;;;:62;;;;-1:-1:-1;;;;;;37654:29:0;;;;;;:25;:29;;;;;;;;37621:62;:95;;;;;37701:15;37700:16;37621:95;37603:3343;;;37761:24;;37751:6;:34;;37743:59;;;;-1:-1:-1;;;37743:59:0;;;;;;;:::i;:::-;37868:4;37819:28;3280:18;;;;;;;;;;;37896:8;;;;37895:9;:55;;;;;37932:18;;37908:20;:42;;37895:55;37891:2481;;;37971:8;:15;;-1:-1:-1;;37971:15:0;37982:4;37971:15;;;38011:12;;:16;38007:750;;38052:18;38073:53;38116:9;;38073:38;38098:12;;38073:20;:24;;:38;;;;:::i;:::-;:42;;:53::i;:::-;38052:74;-1:-1:-1;38174:21:0;38218:29;38052:74;38218:17;:29::i;:::-;38270:22;38295:39;:21;38321:12;38295:25;:39::i;:::-;38270:64;-1:-1:-1;38362:18:0;;38359:379;;38408:19;38430:33;38457:5;38430:22;:14;38449:2;38430:18;:22::i;:33::-;38408:55;-1:-1:-1;38490:24:0;38517:31;:14;38408:55;38517:18;:31::i;:::-;38601:15;;38490:58;;-1:-1:-1;38575:61:0;;-1:-1:-1;;;;;38601:15:0;38490:58;38575:17;:61::i;:::-;38689:10;;38663:51;;-1:-1:-1;;;;;38689:10:0;38702:11;38663:17;:51::i;:::-;38359:379;;;38007:750;;;;38780:10;;:14;38777:131;;38818:70;38836:51;38877:9;;38836:36;38861:10;;38836:20;:24;;:36;;;;:::i;:51::-;38818:17;:70::i;:::-;38931:12;;:16;38928:133;;38971:70;38987:53;39030:9;;38987:38;39012:12;;38987:20;:24;;:38;;;;:::i;:53::-;38971:15;:70::i;:::-;39084:17;;:21;39081:238;;39129:32;39164:58;39212:9;;39164:43;39189:17;;39164:20;:24;;:43;;;;:::i;:58::-;39129:93;;39245:54;39274:24;39245:28;:54::i;:::-;39081:238;;39342:14;;:18;39339:223;;39384:20;39407:55;39452:9;;39407:40;39432:14;;39407:20;:24;;:40;;;;:::i;:55::-;39516:11;;39384:78;;-1:-1:-1;39485:57:0;;39509:4;;-1:-1:-1;;;;;39516:11:0;39384:78;39485:15;:57::i;:::-;39339:223;;39585:15;;:19;39582:234;;39628:24;39655:56;39701:9;;39655:41;39680:15;;39655:20;:24;;:41;;;;:::i;:56::-;39765:12;;39628:83;;-1:-1:-1;39734:62:0;;39758:4;;-1:-1:-1;;;;;39765:12:0;39628:83;39734:15;:62::i;:::-;39582:234;;39840:25;;:29;39836:238;;39894:18;39915:66;39971:9;;39915:51;39940:25;;39915:20;:24;;:51;;;;:::i;:66::-;39894:87;-1:-1:-1;40004:50:0;40033:20;39894:87;40048:4;40033:14;:20::i;:::-;40004:28;:50::i;:::-;39836:238;;40098:21;;:25;40094:226;;40148:18;40169:62;40221:9;;40169:47;40194:21;;40169:20;:24;;:47;;;;:::i;:62::-;40148:83;-1:-1:-1;40254:46:0;40279:20;40148:83;40294:4;40279:14;:20::i;:::-;40254:24;:46::i;:::-;40094:226;;40340:8;:16;;-1:-1:-1;;40340:16:0;;;37891:2481;40393:8;;;;40392:9;:27;;;;;40418:1;40405:10;;:14;40392:27;40388:547;;;40533:18;;40468:21;;40512:39;;;;;:76;;;40565:23;;40555:6;:33;;40512:76;40508:412;;;40613:8;:15;;-1:-1:-1;;40613:15:0;40624:4;40613:15;;;40677:20;;40657:40;;40653:137;;;-1:-1:-1;40746:20:0;;40653:137;40814:45;40830:28;:17;40852:5;40830:21;:28::i;:::-;40814:15;:45::i;:::-;40884:8;:16;;-1:-1:-1;;40884:16:0;;;40508:412;40388:547;;37603:3343;;40961:16;;;;;;;:29;;;;-1:-1:-1;40982:8:0;;;;40981:9;40961:29;:49;;;;;40995:15;40994:16;40961:49;40958:578;;;41027:12;41042:32;41068:5;41042:21;41053:9;;41042:6;:10;;:21;;;;:::i;:32::-;-1:-1:-1;;;;;41153:29:0;;;;;;:25;:29;;;;;;41027:47;;-1:-1:-1;41153:29:0;;41150:226;;;41210:40;41246:3;41210:31;41219:21;;41210:4;:8;;:31;;;;:::i;:40::-;41203:47;;41150:226;;;-1:-1:-1;;;;;41275:31:0;;;;;;:25;:31;;;;;;;;41274:32;:58;;;;-1:-1:-1;41311:21:0;;;;;;;41310:22;41274:58;41271:105;;;-1:-1:-1;41359:1:0;41271:105;41395:8;;41392:133;;41432:16;:6;41443:4;41432:10;:16::i;:::-;41423:25;;41467:42;41483:4;41497;41504;41467:15;:42::i;:::-;40958:578;;41548:33;41564:4;41570:2;41574:6;41548:15;:33::i;:::-;41598:22;;-1:-1:-1;;;;;41598:22:0;:33;41640:4;41647:15;41640:4;-1:-1:-1;;;;;3280:18:0;3253:7;3280:18;;;;;;;;;;;;3179:127;41647:15;41664;;41598:82;;;;;;-1:-1:-1;;;;;;41598:82:0;;;-1:-1:-1;;;;;5089:32:1;;;41598:82:0;;;5071:51:1;5138:18;;;5131:34;;;;41664:15:0;;;;;5208:14:1;5201:22;5181:18;;;5174:50;5044:18;;41598:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41594:98;41706:22;;-1:-1:-1;;;;;41706:22:0;:33;41748:2;41753:13;41748:2;-1:-1:-1;;;;;3280:18:0;3253:7;3280:18;;;;;;;;;;;;3179:127;41753:13;41768:15;;41706:78;;;;;;-1:-1:-1;;;;;;41706:78:0;;;-1:-1:-1;;;;;5089:32:1;;;41706:78:0;;;5071:51:1;5138:18;;;5131:34;;;;41768:15:0;;;;;5208:14:1;5201:22;5181:18;;;5174:50;5044:18;;41706:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41702:94;41812:8;;;;41811:9;:30;;;;-1:-1:-1;41830:11:0;;-1:-1:-1;;;;;41824:17:0;;;41830:11;;41824:17;;41811:30;:49;;;;-1:-1:-1;41845:15:0;;;;;;;41811:49;:82;;;;;41892:1;41864:25;;:29;41811:82;41808:467;;;41927:16;;41968:22;;:35;;-1:-1:-1;;;;;;41968:35:0;;;;;14792:25:1;;;-1:-1:-1;;;;;41968:22:0;;;;:30;;14765:18:1;;41968:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41968:35:0;;;;;;;;-1:-1:-1;;41968:35:0;;;;;;;;;;;;:::i;:::-;;;41964:300;;;;;42105:93;;;15970:25:1;;;16026:2;16011:18;;16004:34;;;16054:18;;;16047:34;;;16112:2;16097:18;;16090:34;;;42188:9:0;;42177:4;;42105:93;;15957:3:1;15942:19;42105:93:0;;;;;;;42004:214;;;41808:467;;36762:5520;;;;:::o;17082:166::-;17168:7;17204:12;17196:6;;;;17188:29;;;;-1:-1:-1;;;17188:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17235:5:0;17239:1;17235;:5;:::i;:::-;17228:12;17082:166;-1:-1:-1;;;;17082:166:0:o;43649:378::-;43733:16;;;43747:1;43733:16;;;;;;;;43709:21;;43733:16;;;;;;;;;;-1:-1:-1;43733:16:0;43709:40;;43770:9;;;;;;;;;-1:-1:-1;;;;;43770:9:0;-1:-1:-1;;;;;43770:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43760:4;43765:1;43760:7;;;;;;-1:-1:-1;;;43760:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;43760:26:0;;;-1:-1:-1;;;;;43760:26:0;;;;;43815:4;43797;43802:1;43797:7;;;;;;-1:-1:-1;;;43797:7:0;;;;;;;;;-1:-1:-1;;;;;43797:23:0;;;:7;;;;;;;;;:23;43833:9;;43958:11;;-1:-1:-1;;;43833:9:0;;;;;;:60;;43901:6;;43923:1;;43939:4;;43958:11;43984:24;:15;44004:3;43984:19;:24::i;:::-;43833:186;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43649:378;;:::o;34195:296::-;810:6;;-1:-1:-1;;;;;810:6:0;;;;;191:10;872:23;864:68;;;;-1:-1:-1;;;864:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34288:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;34288:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34340:86:::1;;34365:22;::::0;:49:::1;::::0;-1:-1:-1;;;34365:49:0;;-1:-1:-1;;;;;4510:32:1;;;34365:49:0::1;::::0;::::1;4492:51:1::0;34365:22:0;;::::1;::::0;:43:::1;::::0;4465:18:1;;34365:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34340:86;34443:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;34443:40:0;::::1;::::0;::::1;::::0;;;::::1;34195:296:::0;;:::o;16540:220::-;16598:7;16622:6;16618:20;;-1:-1:-1;16637:1:0;16630:8;;16618:20;16649:9;16661:5;16665:1;16661;:5;:::i;:::-;16649:17;-1:-1:-1;16694:1:0;16685:5;16689:1;16649:17;16685:5;:::i;:::-;:10;16677:56;;;;-1:-1:-1;;;16677:56:0;;12003:2:1;16677:56:0;;;11985:21:1;12042:2;12022:18;;;12015:30;12081:34;12061:18;;;12054:62;-1:-1:-1;;;12132:18:1;;;12125:31;12173:19;;16677:56:0;11975:223:1;16766:153:0;16824:7;16856:1;16852;:5;16844:44;;;;-1:-1:-1;;;16844:44:0;;9937:2:1;16844:44:0;;;9919:21:1;9976:2;9956:18;;;9949:30;10015:28;9995:18;;;9988:56;10061:18;;16844:44:0;9909:176:1;16844:44:0;16906:5;16910:1;16906;:5;:::i;44035:467::-;44126:16;;;44140:1;44126:16;;;;;;;;44102:21;;44126:16;;;;;;;;;;-1:-1:-1;44126:16:0;44102:40;;44171:4;44153;44158:1;44153:7;;;;;;-1:-1:-1;;;44153:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;44153:23:0;;;-1:-1:-1;;;;;44153:23:0;;;;;44197:9;;;;;;;;;-1:-1:-1;;;;;44197:9:0;-1:-1:-1;;;;;44197:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44187:4;44192:1;44187:7;;;;;;-1:-1:-1;;;44187:7:0;;;;;;;;;-1:-1:-1;;;;;44187:26:0;;;:7;;;;;;;;;:26;44258:9;;44226:56;;44243:4;;-1:-1:-1;;;44258:9:0;;;44270:11;44226:8;:56::i;:::-;44295:9;;-1:-1:-1;;;44295:9:0;;-1:-1:-1;;;;;44295:9:0;:60;44370:11;44396:1;44412:4;44439;44459:24;:15;44479:3;44459:19;:24::i;:::-;44295:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44035:467;;:::o;16376:158::-;16434:7;16467:1;16462;:6;;16454:49;;;;-1:-1:-1;;;16454:49:0;;9578:2:1;16454:49:0;;;9560:21:1;9617:2;9597:18;;;9590:30;9656:32;9636:18;;;9629:60;9706:18;;16454:49:0;9550:180:1;16454:49:0;16521:5;16525:1;16521;:5;:::i;46386:123::-;46475:26;;-1:-1:-1;;;;;46475:18:0;;;:26;;;;;46494:6;;46475:26;;;;46494:6;46475:18;:26;;;;;;;;;;;;;;;;;;;;;46386:123;;:::o;42290:465::-;42364:12;42379:27;:20;42404:1;42379:24;:27::i;:::-;42364:42;-1:-1:-1;42417:17:0;42437:30;:20;42364:42;42437:24;:30::i;:::-;42417:50;-1:-1:-1;42505:21:0;42539:23;42557:4;42539:17;:23::i;:::-;42575:18;42596:41;:21;42622:14;42596:25;:41::i;:::-;42575:62;;42650:36;42664:9;42675:10;42650:13;:36::i;:::-;42704:43;;;15617:25:1;;;15673:2;15658:18;;15651:34;;;15701:18;;;15694:34;;;42704:43:0;;15605:2:1;15590:18;42704:43:0;;;;;;;42290:465;;;;;:::o;43137:504::-;43234:16;;;43248:1;43234:16;;;;;;;;;43210:21;;43234:16;;;;;;;;;;-1:-1:-1;43234:16:0;43210:40;;43279:4;43261;43266:1;43261:7;;;;;;-1:-1:-1;;;43261:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;43261:23:0;;;-1:-1:-1;;;;;43261:23:0;;;;;43305:9;;;;;;;;;-1:-1:-1;;;;;43305:9:0;-1:-1:-1;;;;;43305:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43295:4;43300:1;43295:7;;;;;;-1:-1:-1;;;43295:7:0;;;;;;;;;-1:-1:-1;;;;;43295:26:0;;;:7;;;;;;;;;:26;43342:19;;43332:7;;43342:19;;;43332:4;;43337:1;;43332:7;;;;-1:-1:-1;;;43332:7:0;;;;;;;;;-1:-1:-1;;;;;43332:29:0;;;:7;;;;;;;;;:29;43406:9;;43374:51;;43391:4;;-1:-1:-1;;;43406:9:0;;;43418:6;43374:8;:51::i;:::-;43438:9;;43572:11;;-1:-1:-1;;;;;;;;43438:9:0;;;;;;:63;;43516:6;;43537:1;;43553:4;;43572:11;43598:24;:15;43618:3;43598:19;:24::i;4665:468::-;-1:-1:-1;;;;;4771:20:0;;4763:45;;;;-1:-1:-1;;;4763:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4827:23:0;;4819:48;;;;-1:-1:-1;;;4819:48:0;;;;;;;:::i;:::-;4960;;;;;;;;;;;-1:-1:-1;;;4960:48:0;;;;;;;;-1:-1:-1;;;;;4960:17:0;;-1:-1:-1;4960:17:0;;;;;;;;;;;;:48;;4982:6;;4960:21;:48::i;:::-;-1:-1:-1;;;;;4940:17:0;;;:9;:17;;;;;;;;;;;:68;;;;5042:20;;;;;;;:32;;5067:6;5042:24;:32::i;:::-;-1:-1:-1;;;;;5019:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5090:35;14792:25:1;;;5019:20:0;;5090:35;;;;;;14765:18:1;5090:35:0;14747:76:1;45309:588:0;45412:20;;45452:22;;45405:71;;-1:-1:-1;;;45405:71:0;;-1:-1:-1;;;;;45452:22:0;;;45405:71;;;4492:51:1;45382:20:0;;45412;;;;;45405:38;;4465:18:1;;45405:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45533:22;;45558:20;;45382:94;;-1:-1:-1;45489:90:0;;45517:6;;-1:-1:-1;;;;;45533:22:0;;;;45558:20;45489:27;:90::i;:::-;45626:20;;45666:22;;45619:71;;-1:-1:-1;;;45619:71:0;;-1:-1:-1;;;;;45666:22:0;;;45619:71;;;4492:51:1;45592:24:0;;45619:89;;45695:12;;45626:20;;;45619:38;;4465:18:1;;45619:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;:89::i;:::-;45592:116;-1:-1:-1;45724:20:0;;45721:169;;45760:22;;:60;;-1:-1:-1;;;45760:60:0;;;;;14792:25:1;;;-1:-1:-1;;;;;45760:22:0;;;;:42;;14765:18:1;;45760:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45840:38;45861:16;45840:38;;;;14792:25:1;;14780:2;14765:18;;14747:76;45840:38:0;;;;;;;;45309:588;;;:::o;45905:473::-;46004:16;;46040:18;;45997:63;;-1:-1:-1;;;45997:63:0;;-1:-1:-1;;;;;46040:18:0;;;45997:63;;;4492:51:1;45974:20:0;;46004:16;;;;;45997:34;;4465:18:1;;45997:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46117:18;;46138:16;;45974:86;;-1:-1:-1;46073:82:0;;46101:6;;-1:-1:-1;;;;;46117:18:0;;;;46138:16;46073:27;:82::i;:::-;46199:16;;46235:18;;46192:63;;-1:-1:-1;;;46192:63:0;;-1:-1:-1;;;;;46235:18:0;;;46192:63;;;4492:51:1;46168:21:0;;46192:81;;46260:12;;46199:16;;;46192:34;;4465:18:1;;46192:63:0;4447:102:1;46192:81:0;46168:105;-1:-1:-1;46289:17:0;;46286:85;;46327:32;;14792:25:1;;;46327:32:0;;14780:2:1;14765:18;46327:32:0;14747:76:1;42763:366:0;42877:9;;42845:56;;42862:4;;-1:-1:-1;;;42877:9:0;;-1:-1:-1;;;;;42877:9:0;42889:11;42845:8;:56::i;:::-;42914:9;;-1:-1:-1;;;42914:9:0;;-1:-1:-1;;;;;42914:9:0;:25;42947:9;42980:4;43000:11;43026:1;;42980:4;43086:24;:15;43106:3;43086:19;:24::i;:::-;42914:207;;;;;;-1:-1:-1;;;;;;42914:207:0;;;-1:-1:-1;;;;;5873:15:1;;;42914:207:0;;;5855:34:1;5905:18;;;5898:34;;;;5948:18;;;5941:34;;;;5991:18;;;5984:34;;;;6055:15;;;6034:19;;;6027:44;6087:19;;;6080:35;;;;5789:19;;42914:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44510:791::-;44634:21;44691:16;-1:-1:-1;;;;;44671:36:0;:9;;;;;;;;;-1:-1:-1;;;;;44671:9:0;-1:-1:-1;;;;;44671:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44671:36:0;;44668:343;;;44730:16;;;44744:1;44730:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44730:16:0;44723:23;;44779:4;44761;44766:1;44761:7;;;;;;-1:-1:-1;;;44761:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;44761:23:0;;;-1:-1:-1;;;;;44761:23:0;;;;;44809:16;44799:4;44804:1;44799:7;;;;;;-1:-1:-1;;;44799:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;44799:26:0;;;-1:-1:-1;;;;;44799:26:0;;;;;44668:343;;;44863:16;;;44877:1;44863:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44863:16:0;44856:23;;44912:4;44894;44899:1;44894:7;;;;;;-1:-1:-1;;;44894:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;44894:23:0;;;-1:-1:-1;;;;;44894:23:0;;;;;44942:9;;;;;;;;;-1:-1:-1;;;;;44942:9:0;-1:-1:-1;;;;;44942:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44932:4;44937:1;44932:7;;;;;;-1:-1:-1;;;44932:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;44932:26:0;;;-1:-1:-1;;;;;44932:26:0;;;;;44983:16;44973:4;44978:1;44973:7;;;;;;-1:-1:-1;;;44973:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;44973:26:0;;;-1:-1:-1;;;;;44973:26:0;;;;;44668:343;45055:9;;45023:57;;45040:4;;-1:-1:-1;;;45055:9:0;;-1:-1:-1;;;;;45055:9:0;45067:12;45023:8;:57::i;:::-;45093:9;;-1:-1:-1;;;45093:9:0;;-1:-1:-1;;;;;45093:9:0;:63;45171:12;45198:1;45214:4;45233:10;45258:24;:15;45278:3;45258:19;:24::i;:::-;45093:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44510:791;;;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:392::-;1481:6;1489;1542:2;1530:9;1521:7;1517:23;1513:32;1510:2;;;1563:6;1555;1548:22;1510:2;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;-1:-1:-1;1733:2:1;1718:18;;1705:32;1746:30;1705:32;1746:30;:::i;1813:325::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;2128:2;2113:18;;;;2100:32;;-1:-1:-1;;;1900:238:1:o;2143:251::-;2199:6;2252:2;2240:9;2231:7;2227:23;2223:32;2220:2;;;2273:6;2265;2258:22;2220:2;2317:9;2304:23;2336:28;2358:5;2336:28;:::i;2399:255::-;2466:6;2519:2;2507:9;2498:7;2494:23;2490:32;2487:2;;;2540:6;2532;2525:22;2487:2;2577:9;2571:16;2596:28;2618:5;2596:28;:::i;2659:190::-;2718:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:2;;;2792:6;2784;2777:22;2739:2;-1:-1:-1;2820:23:1;;2729:120;-1:-1:-1;2729:120:1:o;2854:194::-;2924:6;2977:2;2965:9;2956:7;2952:23;2948:32;2945:2;;;2998:6;2990;2983:22;2945:2;-1:-1:-1;3026:16:1;;2935:113;-1:-1:-1;2935:113:1:o;3053:316::-;3141:6;3149;3157;3210:2;3198:9;3189:7;3185:23;3181:32;3178:2;;;3231:6;3223;3216:22;3178:2;3265:9;3259:16;3249:26;;3315:2;3304:9;3300:18;3294:25;3284:35;;3359:2;3348:9;3344:18;3338:25;3328:35;;3168:201;;;;;:::o;3374:289::-;3431:6;3484:2;3472:9;3463:7;3459:23;3455:32;3452:2;;;3505:6;3497;3490:22;3452:2;3549:9;3536:23;3599:4;3592:5;3588:16;3581:5;3578:27;3568:2;;3624:6;3616;3609:22;3668:463;3721:3;3759:5;3753:12;3786:6;3781:3;3774:19;3812:4;3841:2;3836:3;3832:12;3825:19;;3878:2;3871:5;3867:14;3899:3;3911:195;3925:6;3922:1;3919:13;3911:195;;;3990:13;;-1:-1:-1;;;;;3986:39:1;3974:52;;4046:12;;;;4081:15;;;;4022:1;3940:9;3911:195;;;-1:-1:-1;4122:3:1;;3729:402;-1:-1:-1;;;;;3729:402:1:o;6792:510::-;7063:6;7052:9;7045:25;7106:3;7101:2;7090:9;7086:18;7079:31;7026:4;7127:57;7179:3;7168:9;7164:19;7156:6;7127:57;:::i;:::-;-1:-1:-1;;;;;7220:32:1;;;;7215:2;7200:18;;7193:60;-1:-1:-1;7284:2:1;7269:18;7262:34;7119:65;7035:267;-1:-1:-1;;7035:267:1:o;7307:603::-;7419:4;7448:2;7477;7466:9;7459:21;7509:6;7503:13;7552:6;7547:2;7536:9;7532:18;7525:34;7577:4;7590:140;7604:6;7601:1;7598:13;7590:140;;;7699:14;;;7695:23;;7689:30;7665:17;;;7684:2;7661:26;7654:66;7619:10;;7590:140;;;7748:6;7745:1;7742:13;7739:2;;;7818:4;7813:2;7804:6;7793:9;7789:22;7785:31;7778:45;7739:2;-1:-1:-1;7894:2:1;7873:15;-1:-1:-1;;7869:29:1;7854:45;;;;7901:2;7850:54;;7428:482;-1:-1:-1;;;7428:482:1:o;10435:336::-;10637:2;10619:21;;;10676:2;10656:18;;;10649:30;-1:-1:-1;;;10710:2:1;10695:18;;10688:42;10762:2;10747:18;;10609:162::o;11124:328::-;11326:2;11308:21;;;11365:1;11345:18;;;11338:29;-1:-1:-1;;;11398:2:1;11383:18;;11376:35;11443:2;11428:18;;11298:154::o;12549:356::-;12751:2;12733:21;;;12770:18;;;12763:30;12829:34;12824:2;12809:18;;12802:62;12896:2;12881:18;;12723:182::o;12910:336::-;13112:2;13094:21;;;13151:2;13131:18;;;13124:30;-1:-1:-1;;;13185:2:1;13170:18;;13163:42;13237:2;13222:18;;13084:162::o;14828:582::-;15127:6;15116:9;15109:25;15170:6;15165:2;15154:9;15150:18;15143:34;15213:3;15208:2;15197:9;15193:18;15186:31;15090:4;15234:57;15286:3;15275:9;15271:19;15263:6;15234:57;:::i;:::-;-1:-1:-1;;;;;15327:32:1;;;;15322:2;15307:18;;15300:60;-1:-1:-1;15391:3:1;15376:19;15369:35;15226:65;15099:311;-1:-1:-1;;;15099:311:1:o;16324:128::-;16364:3;16395:1;16391:6;16388:1;16385:13;16382:2;;;16401:18;;:::i;:::-;-1:-1:-1;16437:9:1;;16372:80::o;16457:217::-;16497:1;16523;16513:2;;-1:-1:-1;;;16548:31:1;;16602:4;16599:1;16592:15;16630:4;16555:1;16620:15;16513:2;-1:-1:-1;16659:9:1;;16503:171::o;16679:168::-;16719:7;16785:1;16781;16777:6;16773:14;16770:1;16767:21;16762:1;16755:9;16748:17;16744:45;16741:2;;;16792:18;;:::i;:::-;-1:-1:-1;16832:9:1;;16731:116::o;16852:125::-;16892:4;16920:1;16917;16914:8;16911:2;;;16925:18;;:::i;:::-;-1:-1:-1;16962:9:1;;16901:76::o;16982:380::-;17061:1;17057:12;;;;17104;;;17125:2;;17179:4;17171:6;17167:17;17157:27;;17125:2;17232;17224:6;17221:14;17201:18;17198:38;17195:2;;;17278:10;17273:3;17269:20;17266:1;17259:31;17313:4;17310:1;17303:15;17341:4;17338:1;17331:15;17195:2;;17037:325;;;:::o;17367:127::-;17428:10;17423:3;17419:20;17416:1;17409:31;17459:4;17456:1;17449:15;17483:4;17480:1;17473:15;17499:131;-1:-1:-1;;;;;17574:31:1;;17564:42;;17554:2;;17620:1;17617;17610:12;17635:118;17721:5;17714:13;17707:21;17700:5;17697:32;17687:2;;17743:1;17740;17733:12

Swarm Source

ipfs://30fb03ccb49f1696ce62b9f43ab656693428a5d18addd2fe5fea635e978cca5a
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.