ETH Price: $3,098.10 (-1.66%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer189109162024-01-01 6:49:35394 days ago1704091775IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.001007119.52372536
Transfer189097562024-01-01 2:54:59394 days ago1704077699IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0015406311.00859187
Approve184467702023-10-28 5:59:47459 days ago1698472787IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.000228658.6654044
Approve184467652023-10-28 5:58:47459 days ago1698472727IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.000210928.64903272
Withdraw Dev ETH170204972023-04-10 21:40:59659 days ago1681162859IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0007946723.74011075
Approve170204922023-04-10 21:39:35659 days ago1681162775IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0010885323.46832939
Withdraw Dev ETH170204902023-04-10 21:39:11659 days ago1681162751IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0008490721.13486963
Approve165364832023-02-01 20:54:47727 days ago1675284887IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0025760255.19538383
Approve165205292023-01-30 15:26:59730 days ago1675092419IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0009354420.06913951
Withdraw Dev ETH152395572022-07-29 20:30:49914 days ago1659126649IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.000297487.44529414
Approve151545112022-07-16 15:21:52928 days ago1657984912IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0017370137.21831065
Approve147904122022-05-17 4:28:40988 days ago1652761720IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0011046223.66834597
Approve147463732022-05-10 3:53:50995 days ago1652154830IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0013214354.1860939
Approve145771842022-04-13 12:45:531022 days ago1649853953IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.001902440.76214224
Approve144612672022-03-26 10:21:161040 days ago1648290076IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0004651219.07271992
Approve144138092022-03-19 1:08:481047 days ago1647652128IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0023262649.84381232
Approve143753892022-03-13 1:16:091053 days ago1647134169IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0012202226.1453161
Approve143679342022-03-11 21:34:511054 days ago1647034491IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0018496739.6321619
Approve143636752022-03-11 5:24:181055 days ago1646976258IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0012421626.61527303
Approve143630302022-03-11 2:56:351055 days ago1646967395IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0011020623.61346763
Approve143606102022-03-10 18:08:421055 days ago1646935722IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0019686842.18223243
Approve143605912022-03-10 18:04:351055 days ago1646935475IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.002666457.13195202
Approve143584752022-03-10 10:08:101056 days ago1646906890IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0010474622.44368883
Approve143559012022-03-10 0:32:211056 days ago1646872341IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0013569929.07587056
Approve143556722022-03-09 23:44:511056 days ago1646869491IN
0x32e478Ab...a3a2Bb2d9
0 ETH0.0008748318.7447836
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
170204902023-04-10 21:39:11659 days ago1681162751
0x32e478Ab...a3a2Bb2d9
0.04503639 ETH
169488482023-03-31 18:05:35669 days ago1680285935
0x32e478Ab...a3a2Bb2d9
0.04503639 ETH
169488482023-03-31 18:05:35669 days ago1680285935
0x32e478Ab...a3a2Bb2d9
0.06382339 ETH
169488482023-03-31 18:05:35669 days ago1680285935
0x32e478Ab...a3a2Bb2d9
0.04254892 ETH
169488482023-03-31 18:05:35669 days ago1680285935
0x32e478Ab...a3a2Bb2d9
0.17019571 ETH
169488482023-03-31 18:05:35669 days ago1680285935
0x32e478Ab...a3a2Bb2d9
0.27656804 ETH
152395572022-07-29 20:30:49914 days ago1659126649
0x32e478Ab...a3a2Bb2d9
0.15614614 ETH
144395302022-03-23 1:07:071043 days ago1647997627
0x32e478Ab...a3a2Bb2d9
0.00034261 ETH
144395302022-03-23 1:07:071043 days ago1647997627
0x32e478Ab...a3a2Bb2d9
0.00079041 ETH
144395302022-03-23 1:07:071043 days ago1647997627
0x32e478Ab...a3a2Bb2d9
0.00052694 ETH
144395302022-03-23 1:07:071043 days ago1647997627
0x32e478Ab...a3a2Bb2d9
0.00210777 ETH
144395302022-03-23 1:07:071043 days ago1647997627
0x32e478Ab...a3a2Bb2d9
0.00342513 ETH
144108472022-03-18 13:57:331048 days ago1647611853
0x32e478Ab...a3a2Bb2d9
0.00068517 ETH
144108472022-03-18 13:57:331048 days ago1647611853
0x32e478Ab...a3a2Bb2d9
0.00157937 ETH
144108472022-03-18 13:57:331048 days ago1647611853
0x32e478Ab...a3a2Bb2d9
0.00105291 ETH
144108472022-03-18 13:57:331048 days ago1647611853
0x32e478Ab...a3a2Bb2d9
0.00421165 ETH
144108472022-03-18 13:57:331048 days ago1647611853
0x32e478Ab...a3a2Bb2d9
0.00684394 ETH
144030952022-03-17 9:02:221049 days ago1647507742
0x32e478Ab...a3a2Bb2d9
0.00057188 ETH
144030952022-03-17 9:02:221049 days ago1647507742
0x32e478Ab...a3a2Bb2d9
0.00131863 ETH
144030952022-03-17 9:02:221049 days ago1647507742
0x32e478Ab...a3a2Bb2d9
0.00087908 ETH
144030952022-03-17 9:02:221049 days ago1647507742
0x32e478Ab...a3a2Bb2d9
0.00351635 ETH
144030952022-03-17 9:02:221049 days ago1647507742
0x32e478Ab...a3a2Bb2d9
0.00571407 ETH
143844432022-03-14 11:26:291052 days ago1647257189
0x32e478Ab...a3a2Bb2d9
0.00066983 ETH
143844432022-03-14 11:26:291052 days ago1647257189
0x32e478Ab...a3a2Bb2d9
0.00154412 ETH
143844432022-03-14 11:26:291052 days ago1647257189
0x32e478Ab...a3a2Bb2d9
0.00102941 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Konsato

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-09
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: 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), "ERC20Ownable: new owner is the zero address");
        _owner = newOwner;
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
contract Konsato is Context, ERC20Ownable, IERC20 {
    using SafeMath for uint256;
    using Address for address;
    string private constant _nomenclature = "KONSATO";
    string private constant _sym = "KONSATO";
    uint8 private constant _deci = 18;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isMaxWalletExclude;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private _isExcludeContracts;
    mapping(address => bool) private _whiteListAddrRewards;
    mapping (address => bool) public isBot;
	mapping(address => bool) public isBoughtEarly;
    address payable private MWaddress;
    address payable private PWaddress;
    address payable private BBaddress;
    address payable private DWaddress;
    address dead = address(0xdead);
    IUniswapV2Router02 public uniV2Router;
    address public uniV2Pair;
    address public uniV3Router;
    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e13 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _maxWallet;
    uint256 private taxTokensMin;
    uint256 private LiqTokens;
    uint256 private MwTokens;
    uint256 private PbTokens;
    uint256 public ethForBuyBack;
    uint256 public totalBurnedTokens;
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;
    uint256 private gasPriceLimit = 498 * 1 gwei;
    uint256 private _marketingTax = 8;
    uint256 private _previousMarketingTax = _marketingTax;
    uint256 private _plotTax = 2;
    uint256 private _previousPlotTax = _plotTax;
    uint256 private _reflectionsTax = 0;
    uint256 private _previousReflectionsTax = _reflectionsTax;
    uint256 private _liquidityTax = 3;
    uint256 private _previousLiquidityTax = _liquidityTax;
    uint256 private _liqDiv = _marketingTax + _plotTax + _liquidityTax;
    uint256 public taxBuyMarketing = 8;
    uint256 public taxBuyPlot = 2;
    uint256 public taxBuyReflections = 0;
    uint256 public taxBuyLiquidity = 3;
    uint256 public taxSellMarketing = 8;
    uint256 public taxSellPlot = 2;
    uint256 public taxSellReflections = 0;
    uint256 public taxSellLiquidity = 3;
    uint256 public tradingActiveBlock = 0;
    uint256 public earlyBuyPenaltyStart;
    uint256 public earlyBuyPenaltyEnd;
    uint256 public maxTransactionAmount;
    uint256 private totalTax = _liqDiv + _reflectionsTax;
    bool public transferDelayEnabled = false;
    bool public limitsInEffect = false;
    bool public gasLimitActive = false;
    bool public contractBlocker = false;
    bool private collectBuyBackEth = false;
    bool private holdToMax = false;
    bool private _addLiq = true;
    bool public maxWalletOn = false;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SwapTokensForETH(uint256 amountIn, address[] path);
    event ExcludeFromFee(address excludedAddress);
    event IncludeInFee(address includedAddress);
    event OwnerForcedSwapBack(uint256 timestamp);
    event BoughtEarly(address indexed sniper);
    event RemovedSniper(address indexed notsnipersupposedly);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
        
    }
    constructor() payable {
        _rOwned[_msgSender()] = _rTotal;
        maxTransactionAmount = _tTotal / 100; 
        _maxWallet = _tTotal * 3 / 100;
        taxTokensMin = _tTotal * 5 / 10000;
        MWaddress = payable(0x3d537Fd469B3578354b093988988A01c6E0e2616); 
        PWaddress = payable(0x6AF047Fceb38034e905F3067cdb25f92bD9e63Bb);
        BBaddress = payable(0x3d537Fd469B3578354b093988988A01c6E0e2616);
        DWaddress = payable(0x4629D224c10773fAa4EFa96D9302c800C358e0c5);
        _isExcluded[dead] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[dead] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[MWaddress] = true;
        _isExcludedFromFee[PWaddress] = true;
        _isExcludedFromFee[DWaddress] = true;
        _isExcludeContracts[address(this)] = true;
        _isMaxWalletExclude[address(this)] = true;
        _isMaxWalletExclude[_msgSender()] = true;
        _isMaxWalletExclude[dead] = true;
        _isMaxWalletExclude[MWaddress] = true;
        _isMaxWalletExclude[PWaddress] = true;
        _isMaxWalletExclude[DWaddress] = true;
        _isExcludedMaxTransactionAmount[_msgSender()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[dead] = true;
        _isExcludedMaxTransactionAmount[MWaddress] = true;
        _isExcludedMaxTransactionAmount[PWaddress] = true;
        _isExcludedMaxTransactionAmount[DWaddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    receive() external payable {}
    function name() public pure override returns (string memory) {
        return _nomenclature;
    }
    function symbol() public pure override returns (string memory) {
        return _sym;
    }
    function decimals() public pure override returns (uint8) {
        return _deci;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    function _getValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256,uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }
    function _getTValues(uint256 tAmount)private view returns (uint256,uint256,uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }
    function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 currentRate) private pure returns (uint256,uint256,uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            MwTokens += tLiquidity * taxBuyMarketing / _liqDiv;
            PbTokens += tLiquidity * taxBuyPlot / _liqDiv;
            LiqTokens += tLiquidity * taxBuyLiquidity / _liqDiv;
        } else if(buyOrSellSwitch == SELL){
            MwTokens += tLiquidity * taxSellMarketing / _liqDiv;
            PbTokens += tLiquidity * taxSellPlot / _liqDiv;
            LiqTokens += tLiquidity * taxSellLiquidity / _liqDiv;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionsTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityTax + _marketingTax + _plotTax).div(10**2);
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBot[from]);
        if (maxWalletOn == true && ! _isMaxWalletExclude[to]) {
            require(balanceOf(to) + amount <= _maxWallet, "Max amount of tokens for wallet reached");
        }
        if(_addLiq == true) {
            IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            uniV3Router = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45; // only Used to not block router
            uniV2Router = _uniV2Router;
            uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).getPair(address(this), _uniV2Router.WETH());
            tradingActiveBlock = block.number;
            earlyBuyPenaltyStart = block.timestamp;
            earlyBuyPenaltyEnd = block.timestamp + 96 hours;
            _isMaxWalletExclude[address(uniV2Pair)] = true;
            _isMaxWalletExclude[address(uniV2Router)] = true;
            _isExcludedMaxTransactionAmount[address(uniV2Router)] = true;
            _isExcludedMaxTransactionAmount[address(uniV2Pair)] = true;
            _isExcludeContracts[address(uniV2Pair)] = true;
            _isExcludeContracts[address(uniV2Router)] = true;
            _isExcludeContracts[address(uniV3Router)] = true;
            limitsInEffect = true;
            maxWalletOn = true;
            swapAndLiquifyEnabled = true;
            transferDelayEnabled = true;
            _addLiq = false;
        }
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != dead && !inSwapAndLiquify) {
                if(from != owner() && to != uniV2Pair) {
                    for (uint x = 0; x < 2; x++) {
                    if(block.number == tradingActiveBlock + x) {
                        isBoughtEarly[to] = true;
                        emit BoughtEarly(to);
                        }
                    }
                }
                if (gasLimitActive && from == uniV2Pair) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniV2Router) && to != address(uniV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                if (from == uniV2Pair && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        uint256 totalTokensToSwap = LiqTokens.add(MwTokens).add(PbTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= taxTokensMin;
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && to == uniV2Pair && overMinimumTokenBalance) {
            swapTokens();
            }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            if (from == uniV2Pair) {
                if(contractBlocker == true){
                    require(isContract(to) == false && _isExcludeContracts[from]);
                }
                removeAllFee();
                _marketingTax = taxBuyMarketing;
                _plotTax = taxBuyPlot;
                _reflectionsTax = taxBuyReflections;
                _liquidityTax = taxBuyLiquidity;
                buyOrSellSwitch = BUY;
            } 
            else if (to == uniV2Pair) {
                if(contractBlocker == true){
                    require(isContract(from) == false && _isExcludeContracts[to]);
                }
                removeAllFee();
                _marketingTax = taxSellMarketing;
                _plotTax = taxSellPlot;
                _reflectionsTax = taxSellReflections;
                _liquidityTax = taxSellLiquidity;
                buyOrSellSwitch = SELL;
                if(isBoughtEarly[from] && earlyBuyPenaltyEnd >= block.timestamp){
                    _marketingTax = _marketingTax * 9;
                    _plotTax = _plotTax * 3;
                    _liquidityTax = _liquidityTax * 5;
                }
            } else {
                require(!isBoughtEarly[from], "Snipers can't transfer tokens to sell cheaper.  DM a Mod.");
                if(contractBlocker == true) {
                    require(isContract(to) == false);
                }
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function swapTokens() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MwTokens + PbTokens + LiqTokens;
        uint256 tokensForLiquidity = LiqTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MwTokens).div(totalTokensToSwap);
        uint256 ethForMetaPlot = ethBalance.mul(PbTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForMetaPlot);
        MwTokens = 0;
        PbTokens = 0;
        LiqTokens = 0;
        (bool success,) = address(MWaddress).call{value: ethForMarketing}("");
        (success,) = address(PWaddress).call{value: ethForMetaPlot}("");
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        if(address(this).balance > 5 * 10**17){
            uint256 initalBuyBackEth = ethForBuyBack;
            uint256 afterEthBalance = address(this).balance.sub(initalBuyBackEth);
            if(collectBuyBackEth == true){
                ethForBuyBack += afterEthBalance * 5 / 10**2;
                uint256 ethForDevs = afterEthBalance - afterEthBalance * 5 / 10**2;
                (success,) = address(DWaddress).call{value: ethForDevs}("");
            } else {
                uint256 ethForDevs = afterEthBalance;
                (success,) = address(DWaddress).call{value: ethForDevs}("");
            }
        }
    }
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        _approve(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp
        );
    }
    function removeAllFee() private {
        if (_reflectionsTax == 0 && _liquidityTax == 0 && _marketingTax == 0 && _plotTax == 0) return;
        _previousMarketingTax = _marketingTax;
        _previousLiquidityTax = _liquidityTax;
        _previousReflectionsTax = _reflectionsTax;
        _previousLiquidityTax = _liquidityTax;

        _marketingTax = 0;
        _plotTax = 0;
        _reflectionsTax = 0;
        _liquidityTax = 0;
    }
    function restoreAllFee() private {
        _marketingTax = _previousMarketingTax;
        _plotTax = _previousPlotTax;
        _reflectionsTax = _previousReflectionsTax;
        _liquidityTax = _previousLiquidityTax;
    }
    function buyBackTokens(uint256 amount) public onlyOwner lockTheSwap {
        require(amount <= ethForBuyBack);
        swapETHForTokens(amount);
        ethForBuyBack = ethForBuyBack.sub(amount);
    }
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            BBaddress, // Burn address
            block.timestamp.add(300)
        );
    }
    function excludeContract(address account) external onlyOwner {
        _isExcludeContracts[account] = true;
    }
    function includeContract(address account) external onlyOwner {
        _isExcludeContracts[account] = false;
    }
    function isExcludedContract(address account) public view returns (bool) {
        return _isExcludeContracts[account];
    }
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    function excludeFromMaxWallet(address account) external onlyOwner {
        _isMaxWalletExclude[account] = true;
    }
    function includeInMaxWallet(address account) external onlyOwner {
        _isMaxWalletExclude[account] = false;
    }
    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isMaxWalletExclude[account];
    }
    function excludeFromMaxTransaction(address account) external onlyOwner {
        _isExcludedMaxTransactionAmount[account] = true;
    }
    function includeInMaxTransaction(address account) external onlyOwner {
        _isExcludedMaxTransactionAmount[account] = false;
    }
    function isExcludedFromMaxTransaction(address account) public view returns (bool) {
        return _isExcludedMaxTransactionAmount[account];
    }
    function excludeFromReward(address account) external onlyOwner {
        _isExcluded[account] = true;
    }
    function includeInReward(address account) external onlyOwner {
        _isExcluded[account] = false;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function addBot(address _user) public onlyOwner {
        require(!isBot[_user]);
        isBot[_user] = true;
    }
	function removeBot(address _user) public onlyOwner {
        require(isBot[_user]);
        isBot[_user] = false;
    }
	function removeSniper(address account) external onlyOwner {
        isBoughtEarly[account] = false;
    }
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 30);
        gasPriceLimit = gas * 1 gwei;
    }
    function enableLimits() external onlyOwner {
        limitsInEffect = true;
        transferDelayEnabled = true;
    }
    function disableLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
    }
    function StartLiqAdd() external onlyOwner {
		_addLiq = true;
	}
	function StopLiqAdd() external onlyOwner {
		_addLiq = false;
	}
    function TaxSwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function TaxSwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function enableTransferDelay() external onlyOwner {
        transferDelayEnabled = true;
    }
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    function enableGasLimit() external onlyOwner {
        gasLimitActive = true;
    }
    function disableGasLimit() external onlyOwner {
        gasLimitActive = false;
    }
    function enableMaxWallet() external onlyOwner {
        maxWalletOn = true;
    }
    function disableMaxWallet() external onlyOwner {
        maxWalletOn = false;
    }
    function disableContractBlocker() external onlyOwner {
        contractBlocker = false;
    }
    function enableContractBlocker() external onlyOwner {
        contractBlocker = true;
    }
    function enableDevEthHold() external onlyOwner {
        holdToMax = true;
    }
    function disableDevEthHold() external onlyOwner {
        holdToMax = false;
    }
    function enableCollectBuyBack() external onlyOwner {
        collectBuyBackEth = true;
    }
    function disableCollectBuyBack() external onlyOwner {
        collectBuyBackEth = false;
    }
    function setBuyTax(uint256 _buyLiquidityTax, uint256 _buyReflectionsTax, uint256 _buyMarketingTax, uint256 _buyPlotTax) external onlyOwner {
        taxBuyReflections = _buyReflectionsTax;
        taxBuyMarketing = _buyMarketingTax;
        taxBuyPlot = _buyPlotTax;
        taxBuyLiquidity = _buyLiquidityTax;
        require(taxBuyLiquidity + taxBuyReflections + taxBuyMarketing + taxBuyPlot <= 20, "Must keep buy taxes below 20%");
    }
    function setSellTax(uint256 _sellLiquidityTax, uint256 _sellReflectionsTax, uint256 _sellMarketingTax, uint256 _sellPlotTax) external onlyOwner {
        taxSellReflections = _sellReflectionsTax;
        taxSellMarketing = _sellMarketingTax;
        taxSellPlot = _sellPlotTax;
        taxSellLiquidity = _sellLiquidityTax;
        require(taxSellLiquidity + taxSellReflections + taxSellMarketing + taxSellPlot <= 20, "Must keep sell taxes below 20%");
    }
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "address cannot be 0");
        _isExcludedFromFee[MWaddress] = false;
        MWaddress = payable(_marketingAddress);
        _isExcludedFromFee[MWaddress] = true;
    }
    function setMetaPlotAddress(address _metaPlotAddress) public onlyOwner {
        require(_metaPlotAddress != address(0), "address cannot be 0");
        PWaddress = payable(_metaPlotAddress);
    }
    function setBuyBackEth(uint256 EthValueInPointOnes) external onlyOwner {
        uint256 contBal = address(this).balance;
        ethForBuyBack = EthValueInPointOnes;
        require(ethForBuyBack <= contBal, "Can not set value for more eth than contract has");
    }
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= _tTotal * 5 / 10000, "Can only swap back if more than 0.05% of tokens stuck on contract");
        swapTokens();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    function withdrawDevETH(bool takeBuyBackEth) public onlyOwner {
        if(holdToMax == true) {
            require(address(this).balance >= 1*10**18);
        }
        if(takeBuyBackEth == true) {
            ethForBuyBack = 0*10**18;
        }
        uint256 initalBuyBackEth = ethForBuyBack;
        uint256 afterEthBalance = address(this).balance.sub(initalBuyBackEth);
        bool success;
        if(collectBuyBackEth == true){
            ethForBuyBack += afterEthBalance * 5 / 10**2;
            uint256 ethForDevs = afterEthBalance - afterEthBalance * 5 / 10**2;
            (success,) = address(DWaddress).call{value: ethForDevs}("");
        } else {
            uint256 ethForDevs = afterEthBalance;
            (success,) = address(DWaddress).call{value: ethForDevs}("");
        }
    }
    function manualBurnTokens(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance * percent / 10**2;
        if (amountToBurn > 0){
            _transfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= _tTotal * 50 / 10**2, "Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
    function isContract(address account) public view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"StartLiqAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StopLiqAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBot","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"disableCollectBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableDevEthHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableCollectBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableDevEthHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethForBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBoughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"EthValueInPointOnes","type":"uint256"}],"name":"setBuyBackEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionsTax","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyPlotTax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metaPlotAddress","type":"address"}],"name":"setMetaPlotAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionsTax","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellPlotTax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxBuyLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyPlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSellLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSellPlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSellReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"takeBuyBackEth","type":"bool"}],"name":"withdrawDevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052601180546001600160a01b03191661dead179055620000336c7e37be2022c0914b268000000060001962000528565b62000041906000196200050e565b6016556473f31cf40060205560086021556021546022556002602355602354602455600060255560255460265560036027556027546028556027546023546021546200008e9190620004ba565b6200009a9190620004ba565b6029556008602a556002602b556000602c556003602d556008602e556002602f55600060305560036031556000603255602554602954620000dc9190620004ba565b60365560378054600161ff0160401b03191666010000000000001790556000620001033390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601654336000908152600160205260409020556200017a60646c7e37be2022c0914b2680000000620004d5565b6035556064620001996c7e37be2022c0914b26800000006003620004ec565b620001a59190620004d5565b601855612710620001c56c7e37be2022c0914b26800000006005620004ec565b620001d19190620004d5565b601955600d80546001600160a01b0319908116733d537fd469b3578354b093988988a01c6e0e2616908117909255600e80548216736af047fceb38034e905f3067cdb25f92bd9e63bb179055600f8054821690921790915560108054909116734629d224c10773faa4efa96d9302c800c358e0c51790556011546001600160a01b03166000908152600660205260408120805460ff19166001908117909155906005906200027c3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556011548216815260058452828120805486166001908117909155308083528483208054881683179055600d54841683528483208054881683179055600e548416835284832080548816831790556010549093168252838220805487168217905591815260098452828120805486168317905560079384905291822080549094168117909355620003373390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601154821681526007909352818320805485166001908117909155600d54821684528284208054861682179055600e54821684528284208054861682179055601054909116835290822080549093168117909255600890620003c43390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155601154821684528284208054861682179055600d54821684528284208054861682179055600e54821684528284208054861682179055601054909116835291208054909216179055620004593390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c7e37be2022c0914b2680000000604051620004ac91815260200190565b60405180910390a36200056b565b60008219821115620004d057620004d06200053f565b500190565b600082620004e757620004e762000555565b500490565b60008160001904831182151516156200050957620005096200053f565b500290565b6000828210156200052357620005236200053f565b500390565b6000826200053a576200053a62000555565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b614657806200057b6000396000f3fe6080604052600436106104cf5760003560e01c8063715018a611610276578063a9059cbb1161014f578063e884f260116100c1578063f2f8ff2a11610085578063f2f8ff2a14610eb3578063f2fde38b14610ec9578063f901796614610ee9578063f928364c14610f09578063fc155d1d14610f1e578063ffecf51614610f3e57600080fd5b8063e884f26014610e3e578063ea2f0b3714610e53578063eb8fa2b014610e73578063ee40166e14610e88578063f22857a814610e9e57600080fd5b8063c8c8ebe411610113578063c8c8ebe414610d82578063cee180e714610d98578063d3f6b79d14610dad578063dd62ed3e14610dc3578063e056364714610e09578063e0a7241014610e1e57600080fd5b8063a9059cbb14610d08578063a94ac71214610d28578063a98a934a14610d3d578063c8144b2214610d52578063c876d0b914610d6857600080fd5b80638ea00c85116101e857806395d89b41116101ac57806395d89b41146104db57806396c9b44214610c59578063a20d961514610c7a578063a27de25014610cb3578063a457c2d714610cc8578063a82cfe8b14610ce857600080fd5b80638ea00c8514610bd8578063906e9dd014610bee578063907c4fd014610c0e57806393165dbb14610c23578063958c2e5214610c3957600080fd5b806384666b081161023a57806384666b0814610b0157806384c865af14610b2157806388f8202014610b415780638a66358414610b7a5780638bcea93914610b9a5780638da5cb5b14610bba57600080fd5b8063715018a614610a76578063745d032f14610a8b5780637460148c14610aac5780637cf1402414610acc5780637f7fe7c214610aec57600080fd5b80634a62bb65116103a85780635fecd9261161031a5780636adf6818116102de5780636adf6818146109a85780636bf9a69d146109c85780636d61ce65146109e85780636dd3d39f14610a085780636e86ea8b14610a4157806370a0823114610a5657600080fd5b80635fecd92614610933578063603dbe061461095357806360a512f114610969578063620b4bfc1461097e5780636902ca611461099357600080fd5b8063555f323a1161036c578063555f323a1461088357806357b7ce5c146108995780635b700d91146108af5780635bec94e4146108cf5780635f12509d146108e55780635fafa589146108fb57600080fd5b80634a62bb65146107d55780634a74bb02146107f457806351f205e41461081557806352390c021461082a5780635342acb41461084a57600080fd5b806323b872dd116104415780633950935111610405578063395093511461070f5780633af50e571461072f5780633bbac579146107455780633f33e90914610775578063437823ec146107955780634549b039146107b557600080fd5b806323b872dd146106735780632d83811914610693578063313ce567146106b357806333251a0b146106cf5780633685d419146106ef57600080fd5b806314d620871161049357806314d62087146105b157806316279055146105c657806318160ddd146105e657806318d9ceae1461060f5780631fc851bd1461064857806322e78b6a1461065e57600080fd5b806306fdde03146104db578063076252e21461051a578063092316021461055a578063095ea7b31461057c57806311f876011461059c57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b5060408051808201825260078152664b4f4e5341544f60c81b60208201529051610511919061442f565b60405180910390f35b34801561052657600080fd5b5061054a6105353660046141fd565b600c6020526000908152604090205460ff1681565b6040519015158152602001610511565b34801561056657600080fd5b5061057a6105753660046142f8565b610f5e565b005b34801561058857600080fd5b5061054a6105973660046142b1565b610fb3565b3480156105a857600080fd5b5061057a610fca565b3480156105bd57600080fd5b5061057a611007565b3480156105d257600080fd5b5061054a6105e13660046141fd565b61103f565b3480156105f257600080fd5b5068fc6f7c40458122964d601f1b5b604051908152602001610511565b34801561061b57600080fd5b5061054a61062a3660046141fd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561065457600080fd5b5061060160345481565b34801561066a57600080fd5b5061057a61107b565b34801561067f57600080fd5b5061054a61068e366004614270565b6110b4565b34801561069f57600080fd5b506106016106ae3660046142f8565b61111d565b3480156106bf57600080fd5b5060405160128152602001610511565b3480156106db57600080fd5b5061057a6106ea3660046141fd565b61118e565b3480156106fb57600080fd5b5061057a61070a3660046141fd565b6111d9565b34801561071b57600080fd5b5061054a61072a3660046142b1565b611224565b34801561073b57600080fd5b50610601602e5481565b34801561075157600080fd5b5061054a6107603660046141fd565b600b6020526000908152604090205460ff1681565b34801561078157600080fd5b5061057a6107903660046141fd565b61125a565b3480156107a157600080fd5b5061057a6107b03660046141fd565b6112a5565b3480156107c157600080fd5b506106016107d036600461432a565b6112f3565b3480156107e157600080fd5b5060375461054a90610100900460ff1681565b34801561080057600080fd5b5060375461054a90600160481b900460ff1681565b34801561082157600080fd5b5061057a61138a565b34801561083657600080fd5b5061057a6108453660046141fd565b6114a2565b34801561085657600080fd5b5061054a6108653660046141fd565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088f57600080fd5b50610601601e5481565b3480156108a557600080fd5b50610601602f5481565b3480156108bb57600080fd5b5061057a6108ca3660046141fd565b6114f0565b3480156108db57600080fd5b5061060160315481565b3480156108f157600080fd5b5061060160305481565b34801561090757600080fd5b5060145461091b906001600160a01b031681565b6040516001600160a01b039091168152602001610511565b34801561093f57600080fd5b5061057a61094e3660046141fd565b61153e565b34801561095f57600080fd5b50610601602d5481565b34801561097557600080fd5b5061057a6115ae565b34801561098a57600080fd5b5061057a6115e8565b34801561099f57600080fd5b5061057a611621565b3480156109b457600080fd5b5061057a6109c33660046141fd565b61165c565b3480156109d457600080fd5b5061057a6109e33660046141fd565b6116a7565b3480156109f457600080fd5b5061054a610a033660046142f8565b6116f2565b348015610a1457600080fd5b5061054a610a233660046141fd565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a4d57600080fd5b5061057a611945565b348015610a6257600080fd5b50610601610a713660046141fd565b611984565b348015610a8257600080fd5b5061057a6119e3565b348015610a9757600080fd5b5060375461054a90600160381b900460ff1681565b348015610ab857600080fd5b5061057a610ac73660046142f8565b611a57565b348015610ad857600080fd5b5061057a610ae73660046141fd565b611af4565b348015610af857600080fd5b5061057a611b42565b348015610b0d57600080fd5b5061057a610b1c366004614384565b611b81565b348015610b2d57600080fd5b5061057a610b3c3660046141fd565b611c35565b348015610b4d57600080fd5b5061054a610b5c3660046141fd565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610b8657600080fd5b5061057a610b953660046141fd565b611ccd565b348015610ba657600080fd5b5060135461091b906001600160a01b031681565b348015610bc657600080fd5b506000546001600160a01b031661091b565b348015610be457600080fd5b50610601601d5481565b348015610bfa57600080fd5b5061057a610c093660046141fd565b611d1b565b348015610c1a57600080fd5b5061057a611de1565b348015610c2f57600080fd5b50610601602c5481565b348015610c4557600080fd5b5060125461091b906001600160a01b031681565b348015610c6557600080fd5b5060375461054a906301000000900460ff1681565b348015610c8657600080fd5b5061054a610c953660046141fd565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cbf57600080fd5b5061057a611e24565b348015610cd457600080fd5b5061054a610ce33660046142b1565b611e5f565b348015610cf457600080fd5b5061057a610d03366004614384565b611eae565b348015610d1457600080fd5b5061054a610d233660046142b1565b611f5c565b348015610d3457600080fd5b5061057a611f69565b348015610d4957600080fd5b5061057a611fae565b348015610d5e57600080fd5b50610601602b5481565b348015610d7457600080fd5b5060375461054a9060ff1681565b348015610d8e57600080fd5b5061060160355481565b348015610da457600080fd5b5061057a611fe7565b348015610db957600080fd5b5061060160335481565b348015610dcf57600080fd5b50610601610dde366004614237565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e1557600080fd5b5061057a612028565b348015610e2a57600080fd5b5061057a610e393660046142dd565b612064565b348015610e4a57600080fd5b5061057a612208565b348015610e5f57600080fd5b5061057a610e6e3660046141fd565b61223e565b348015610e7f57600080fd5b5061057a612289565b348015610e9457600080fd5b5061060160325481565b348015610eaa57600080fd5b5061057a6122c8565b348015610ebf57600080fd5b50610601602a5481565b348015610ed557600080fd5b5061057a610ee43660046141fd565b612301565b348015610ef557600080fd5b5060375461054a9062010000900460ff1681565b348015610f1557600080fd5b5061057a6123b7565b348015610f2a57600080fd5b5061057a610f393660046142f8565b6123ee565b348015610f4a57600080fd5b5061057a610f593660046141fd565b612463565b6000546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f8890614484565b60405180910390fd5b601e811015610f9f57600080fd5b610fad81633b9aca0061453f565b60205550565b6000610fc03384846124d7565b5060015b92915050565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610f8890614484565b6037805462ff0000191662010000179055565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610f8890614484565b6037805462ff000019169055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061107357508115155b949350505050565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610f8890614484565b6037805463ff00000019169055565b60006110c18484846125e4565b611113843361110e856040518060600160405280602881526020016145d5602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906131c1565b6124d7565b5060019392505050565b60006016548211156111715760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610f88565b600061117b6131ed565b90506111878382613210565b9392505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146112035760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600660205260409020805460ff19169055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610fc091859061110e908661321c565b6000546001600160a01b031633146112845760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146112cf5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600068fc6f7c40458122964d601f1b8311156113515760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610f88565b8161137057600061136184613228565b50939550610fc4945050505050565b600061137b84613228565b50929550610fc4945050505050565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610f8890614484565b60006113bf30611984565b90506127106113db68fc6f7c40458122964d601f1b600561453f565b6113e5919061451d565b8110156114645760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303525206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a401610f88565b61146c613277565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000546001600160a01b031633146114cc5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b0316331461151a5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166000908152600b602052604090205460ff1661158d57600080fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610f8890614484565b6037805464ff0000000019169055565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60481b19169055565b6000546001600160a01b0316331461164b5760405162461bcd60e51b8152600401610f8890614484565b6037805461ffff1916610101179055565b6000546001600160a01b031633146116865760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146116d15760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600960205260409020805460ff19169055565b600080546001600160a01b0316331461171d5760405162461bcd60e51b8152600401610f8890614484565b600a8211156117815760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610f88565b6013546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156117c757600080fd5b505afa1580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff9190614311565b90506000606461180f858461453f565b611819919061451d565b9050801561183e5760135460115461183e916001600160a01b039081169116836125e4565b601154611853906001600160a01b0316611984565b601e55606461186f68fc6f7c40458122964d601f1b603261453f565b611879919061451d565b601e5411156118d65760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206275726e206d6f7265207468656e20353025206f6620737560448201526370706c7960e01b6064820152608401610f88565b6013546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561192057600080fd5b505af1158015611934573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461196f5760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60481b1916600160481b179055565b6001600160a01b03811660009081526006602052604081205460ff16156119c157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fc49061111d565b6000546001600160a01b03163314611a0d5760405162461bcd60e51b8152600401610f8890614484565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a815760405162461bcd60e51b8152600401610f8890614484565b601d8190554780821115611af05760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207365742076616c756520666f72206d6f726520657468207460448201526f68616e20636f6e74726163742068617360801b6064820152608401610f88565b5050565b6000546001600160a01b03163314611b1e5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60381b1916600160381b179055565b6000546001600160a01b03163314611bab5760405162461bcd60e51b8152600401610f8890614484565b6030839055602e829055602f819055603184905560148183611bcd8688614505565b611bd79190614505565b611be19190614505565b1115611c2f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610f88565b50505050565b6000546001600160a01b03163314611c5f5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b038116611cab5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610f88565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611cf75760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314611d455760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b038116611d915760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610f88565b600d80546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314611e0b5760405162461bcd60e51b8152600401610f8890614484565b6037805465ff0000000000191665010000000000179055565b6000546001600160a01b03163314611e4e5760405162461bcd60e51b8152600401610f8890614484565b6037805465ff000000000019169055565b6000610fc0338461110e856040518060600160405280602581526020016145fd602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906131c1565b6000546001600160a01b03163314611ed85760405162461bcd60e51b8152600401610f8890614484565b602c839055602a829055602b819055602d84905560148183611efa8688614505565b611f049190614505565b611f0e9190614505565b1115611c2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610f88565b6000610fc03384846125e4565b6000546001600160a01b03163314611f935760405162461bcd60e51b8152600401610f8890614484565b6037805466ff00000000000019166601000000000000179055565b6000546001600160a01b03163314611fd85760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60381b19169055565b6000546001600160a01b031633146120115760405162461bcd60e51b8152600401610f8890614484565b6037805464ff000000001916640100000000179055565b6000546001600160a01b031633146120525760405162461bcd60e51b8152600401610f8890614484565b6037805466ff00000000000019169055565b6000546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610f8890614484565b60375465010000000000900460ff161515600114156120bc57670de0b6b3a76400004710156120bc57600080fd5b600181151514156120cd576000601d555b601d5460006120dc4783613579565b90506000603760049054906101000a900460ff1615156001151514156121ac57606461210983600561453f565b612113919061451d565b601d60008282546121249190614505565b9091555060009050606461213984600561453f565b612143919061451d565b61214d908461455e565b6010546040519192506001600160a01b0316908290600081818185875af1925050503d806000811461219b576040519150601f19603f3d011682016040523d82523d6000602084013e6121a0565b606091505b50508092505050611c2f565b60105460405183916001600160a01b0316908290600081818185875af1925050503d80600081146121f9576040519150601f19603f3d011682016040523d82523d6000602084013e6121fe565b606091505b5050505050505050565b6000546001600160a01b031633146122325760405162461bcd60e51b8152600401610f8890614484565b6037805460ff19169055565b6000546001600160a01b031633146122685760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146122b35760405162461bcd60e51b8152600401610f8890614484565b6037805463ff00000019166301000000179055565b6000546001600160a01b031633146122f25760405162461bcd60e51b8152600401610f8890614484565b6037805460ff19166001179055565b6000546001600160a01b0316331461232b5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166123955760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610f88565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123e15760405162461bcd60e51b8152600401610f8890614484565b6037805461ffff19169055565b6000546001600160a01b031633146124185760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60401b1916600160401b179055601d5481111561243a57600080fd5b61244381613585565b601d546124509082613579565b601d55506037805460ff60401b19169055565b6000546001600160a01b0316331461248d5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166000908152600b602052604090205460ff16156124b357600080fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6001600160a01b03831661252d5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610f88565b6001600160a01b0382166125835760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610f88565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f88565b6001600160a01b0382166126aa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f88565b6000811161270c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f88565b6001600160a01b0383166000908152600b602052604090205460ff161561273257600080fd5b603754600160381b900460ff161515600114801561276957506001600160a01b03821660009081526007602052604090205460ff16155b156127e3576018548161277b84611984565b6127859190614505565b11156127e35760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610f88565b6037546601000000000000900460ff16151560011415612ab257601480547368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b03199182161790915560128054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561287c57600080fd5b505afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b4919061421a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fc57600080fd5b505afa158015612910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612934919061421a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561297a57600080fd5b505afa15801561298e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b2919061421a565b601380546001600160a01b0319166001600160a01b0392909216919091179055436032554260338190556129e99062054600614505565b60345550601380546001600160a01b039081166000908152600760209081526040808320805460ff1990811660019081179092556012805487168652838620805483168417905580548716865260088552838620805483168417905587548716865283862080548316841790559654861685526009909352818420805484168217905594548416835280832080548316861790556014549093168252919020805490911690911790556037805469ff00ffff00000000ffff191669010001000000000001011790555b603754610100900460ff1615612e0d576000546001600160a01b03848116911614801590612aee57506000546001600160a01b03838116911614155b8015612b0257506001600160a01b03821615155b8015612b1c57506011546001600160a01b03838116911614155b8015612b325750603754600160401b900460ff16155b15612e0d576000546001600160a01b03848116911614801590612b6357506013546001600160a01b03838116911614155b15612be75760005b6002811015612be55780603254612b829190614505565b431415612bd3576001600160a01b0383166000818152600c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b80612bdd81614575565b915050612b6b565b505b60375462010000900460ff168015612c0c57506013546001600160a01b038481169116145b15612c63576020543a1115612c635760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f88565b60375460ff1615612d62576000546001600160a01b03838116911614801590612c9a57506012546001600160a01b03838116911614155b8015612cb457506013546001600160a01b03838116911614155b15612d6257326000908152600460205260409020544311612d4f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610f88565b3260009081526004602052604090204390555b6013546001600160a01b038481169116148015612d9857506001600160a01b03821660009081526008602052604090205460ff16155b15612e0d57603554811115612e0d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610f88565b6000612e32601c54612e2c601b54601a5461321c90919063ffffffff16565b9061321c565b90506000612e3f30611984565b60195460375491925082101590600160401b900460ff16158015612e6c5750603754600160481b900460ff165b8015612e8d5750601354600090612e8b906001600160a01b0316611984565b115b8015612e995750600083115b8015612ebe57506001600160a01b03851660009081526005602052604090205460ff16155b8015612ee357506001600160a01b03861660009081526005602052604090205460ff16155b8015612efc57506013546001600160a01b038681169116145b8015612f055750805b15612f1257612f12613277565b6001600160a01b03861660009081526005602052604090205460019060ff1680612f5457506001600160a01b03861660009081526005602052604090205460ff165b15612f6657506003601f5560006131ac565b6013546001600160a01b0388811691161415612ff4576037546301000000900460ff16151560011415612fca57612f9c8661103f565b158015612fc157506001600160a01b03871660009081526009602052604090205460ff165b612fca57600080fd5b612fd26136ef565b602a54602155602b54602355602c54602555602d546027556001601f556131ac565b6013546001600160a01b03878116911614156130e5576037546301000000900460ff161515600114156130585761302a8761103f565b15801561304f57506001600160a01b03861660009081526009602052604090205460ff165b61305857600080fd5b6130606136ef565b602e54602155602f546023556030546025556031546027556002601f556001600160a01b0387166000908152600c602052604090205460ff1680156130a757504260345410155b156130e0576021546130ba90600961453f565b6021556023546130cb90600361453f565b6023556027546130dc90600561453f565b6027555b6131ac565b6001600160a01b0387166000908152600c602052604090205460ff16156131745760405162461bcd60e51b815260206004820152603960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c20636865617065722e2020444d2061204d6f642e000000000000006064820152608401610f88565b6037546301000000900460ff1615156001141561319e576131948661103f565b1561319e57600080fd5b6131a66136ef565b6003601f555b6131b887878784613744565b50505050505050565b600081848411156131e55760405162461bcd60e51b8152600401610f88919061442f565b505050900390565b60008060006131fa6138c7565b90925090506132098282613210565b9250505090565b6000611187828461451d565b60006111878284614505565b600080600080600080600080600061323f8a613a6f565b925092509250600080600061325d8d86866132586131ed565b613aab565b919f909e50909c50959a5093985091965092945050505050565b6037805460ff60401b1916600160401b179055600061329530611984565b90506000601a54601c54601b546132ac9190614505565b6132b69190614505565b905060006132d06002601a5461321090919063ffffffff16565b905060006132de8483613579565b9050476132ea82613afb565b60006132f64783613579565b9050600061331986613313601b5485613c6490919063ffffffff16565b90613210565b9050600061333687613313601c5486613c6490919063ffffffff16565b9050600061334e826133488686613579565b90613579565b6000601b819055601c819055601a819055600d5460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146133b0576040519150601f19603f3d011682016040523d82523d6000602084013e6133b5565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613405576040519150601f19603f3d011682016040523d82523d6000602084013e61340a565b606091505b50508091505061341a8883613c70565b6706f05b59d3b2000047111561356057601d5460006134394783613579565b603754909150640100000000900460ff1615156001141561350457606461346182600561453f565b61346b919061451d565b601d600082825461347c9190614505565b9091555060009050606461349183600561453f565b61349b919061451d565b6134a5908361455e565b6010546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146134f3576040519150601f19603f3d011682016040523d82523d6000602084013e6134f8565b606091505b5050809450505061355d565b60105460405182916001600160a01b0316908290600081818185875af1925050503d8060008114613551576040519150601f19603f3d011682016040523d82523d6000602084013e613556565b606091505b5090945050505b50505b50506037805460ff60401b191690555050505050505050565b6000611187828461455e565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135ea57600080fd5b505afa1580156135fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613622919061421a565b81600081518110613635576136356145a6565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613669576136696145a6565b6001600160a01b039283166020918202929092010152601254600f549082169163b6f9de959185916000918691166136a34261012c61321c565b6040518663ffffffff1660e01b81526004016136c294939291906143fa565b6000604051808303818588803b1580156136db57600080fd5b505af11580156131b8573d6000803e3d6000fd5b6025541580156136ff5750602754155b801561370b5750602154155b80156137175750602354155b1561371e57565b602180546022556027805460285560258054602655600092839055602383905582905555565b80613751576137516136ef565b6001600160a01b03841660009081526006602052604090205460ff16801561379257506001600160a01b03831660009081526006602052604090205460ff16155b156137a7576137a2848484613d33565b6138a5565b6001600160a01b03841660009081526006602052604090205460ff161580156137e857506001600160a01b03831660009081526006602052604090205460ff165b156137f8576137a2848484613e59565b6001600160a01b03841660009081526006602052604090205460ff1615801561383a57506001600160a01b03831660009081526006602052604090205460ff16155b1561384a576137a2848484613f02565b6001600160a01b03841660009081526006602052604090205460ff16801561388a57506001600160a01b03831660009081526006602052604090205460ff165b1561389a576137a2848484613f46565b6138a5848484613f02565b80611c2f57611c2f602254602155602454602355602654602555602854602755565b601654600090819068fc6f7c40458122964d601f1b825b601554811015613a2c57826001600060158481548110613900576139006145a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061396b5750816002600060158481548110613944576139446145a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561398a5750506016549368fc6f7c40458122964d601f1b9350915050565b6139d060016000601584815481106139a4576139a46145a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613579565b9250613a1860026000601584815481106139ec576139ec6145a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613579565b915080613a2481614575565b9150506138de565b50601654613a469068fc6f7c40458122964d601f1b613210565b821015613a665750506016549268fc6f7c40458122964d601f1b92509050565b90939092509050565b600080600080613a7e85613fb9565b90506000613a8b86613fd5565b90506000613a9d826133488986613579565b979296509094509092505050565b6000808080613aba8886613c64565b90506000613ac88887613c64565b90506000613ad68888613c64565b90506000613ae8826133488686613579565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b3057613b306145a6565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613b8457600080fd5b505afa158015613b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbc919061421a565b81600181518110613bcf57613bcf6145a6565b6001600160a01b039283166020918202929092010152601254613bf591309116846124d7565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c2e9085906000908690309042906004016144c9565b600060405180830381600087803b158015613c4857600080fd5b505af1158015613c5c573d6000803e3d6000fd5b505050505050565b6000611187828461453f565b601254613c889030906001600160a01b0316846124d7565b60125460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613cf357600080fd5b505af1158015613d07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d2c9190614356565b5050505050565b600080600080600080613d4587613228565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613d779088613579565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613da69087613579565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054613dd5908661321c565b6001600160a01b038916600090815260016020526040902055613df781614003565b613e0184836141c9565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4691815260200190565b60405180910390a3505050505050505050565b600080600080600080613e6b87613228565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613e9d9087613579565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613ed3908461321c565b6001600160a01b038916600090815260026020908152604080832093909355600190522054613dd5908661321c565b600080600080600080613f1487613228565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613da69087613579565b600080600080600080613f5887613228565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613f8a9088613579565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613e9d9087613579565b6000610fc4606461331360255485613c6490919063ffffffff16565b6000610fc46064613313602354602154602754613ff29190614505565b613ffc9190614505565b8590613c64565b6001601f5414156140a457602954602a5461401e908361453f565b614028919061451d565b601b60008282546140399190614505565b9091555050602954602b5461404e908361453f565b614058919061451d565b601c60008282546140699190614505565b9091555050602954602d5461407e908361453f565b614088919061451d565b601a60008282546140999190614505565b909155506141409050565b6002601f54141561414057602954602e546140bf908361453f565b6140c9919061451d565b601b60008282546140da9190614505565b9091555050602954602f546140ef908361453f565b6140f9919061451d565b601c600082825461410a9190614505565b909155505060295460315461411f908361453f565b614129919061451d565b601a600082825461413a9190614505565b90915550505b600061414a6131ed565b905060006141588383613c64565b30600090815260016020526040902054909150614175908261321c565b3060009081526001602090815260408083209390935560069052205460ff16156141c457306000908152600260205260409020546141b3908461321c565b306000908152600260205260409020555b505050565b6016546141d69083613579565b6016556017546141e6908261321c565b6017555050565b8035801515811461194057600080fd5b60006020828403121561420f57600080fd5b8135611187816145bc565b60006020828403121561422c57600080fd5b8151611187816145bc565b6000806040838503121561424a57600080fd5b8235614255816145bc565b91506020830135614265816145bc565b809150509250929050565b60008060006060848603121561428557600080fd5b8335614290816145bc565b925060208401356142a0816145bc565b929592945050506040919091013590565b600080604083850312156142c457600080fd5b82356142cf816145bc565b946020939093013593505050565b6000602082840312156142ef57600080fd5b611187826141ed565b60006020828403121561430a57600080fd5b5035919050565b60006020828403121561432357600080fd5b5051919050565b6000806040838503121561433d57600080fd5b8235915061434d602084016141ed565b90509250929050565b60008060006060848603121561436b57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561439a57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156143ef5781516001600160a01b0316875295820195908201906001016143ca565b509495945050505050565b84815260806020820152600061441360808301866143b6565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b8181101561445c57858101830151858201604001528201614440565b8181111561446e576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a0604082015260006144e860a08301866143b6565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561451857614518614590565b500190565b60008261453a57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561455957614559614590565b500290565b60008282101561457057614570614590565b500390565b600060001982141561458957614589614590565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146145d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f4382909135980c2dc131d1601b948eedc8a90f1f1f75f269096325ff29731ea64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104cf5760003560e01c8063715018a611610276578063a9059cbb1161014f578063e884f260116100c1578063f2f8ff2a11610085578063f2f8ff2a14610eb3578063f2fde38b14610ec9578063f901796614610ee9578063f928364c14610f09578063fc155d1d14610f1e578063ffecf51614610f3e57600080fd5b8063e884f26014610e3e578063ea2f0b3714610e53578063eb8fa2b014610e73578063ee40166e14610e88578063f22857a814610e9e57600080fd5b8063c8c8ebe411610113578063c8c8ebe414610d82578063cee180e714610d98578063d3f6b79d14610dad578063dd62ed3e14610dc3578063e056364714610e09578063e0a7241014610e1e57600080fd5b8063a9059cbb14610d08578063a94ac71214610d28578063a98a934a14610d3d578063c8144b2214610d52578063c876d0b914610d6857600080fd5b80638ea00c85116101e857806395d89b41116101ac57806395d89b41146104db57806396c9b44214610c59578063a20d961514610c7a578063a27de25014610cb3578063a457c2d714610cc8578063a82cfe8b14610ce857600080fd5b80638ea00c8514610bd8578063906e9dd014610bee578063907c4fd014610c0e57806393165dbb14610c23578063958c2e5214610c3957600080fd5b806384666b081161023a57806384666b0814610b0157806384c865af14610b2157806388f8202014610b415780638a66358414610b7a5780638bcea93914610b9a5780638da5cb5b14610bba57600080fd5b8063715018a614610a76578063745d032f14610a8b5780637460148c14610aac5780637cf1402414610acc5780637f7fe7c214610aec57600080fd5b80634a62bb65116103a85780635fecd9261161031a5780636adf6818116102de5780636adf6818146109a85780636bf9a69d146109c85780636d61ce65146109e85780636dd3d39f14610a085780636e86ea8b14610a4157806370a0823114610a5657600080fd5b80635fecd92614610933578063603dbe061461095357806360a512f114610969578063620b4bfc1461097e5780636902ca611461099357600080fd5b8063555f323a1161036c578063555f323a1461088357806357b7ce5c146108995780635b700d91146108af5780635bec94e4146108cf5780635f12509d146108e55780635fafa589146108fb57600080fd5b80634a62bb65146107d55780634a74bb02146107f457806351f205e41461081557806352390c021461082a5780635342acb41461084a57600080fd5b806323b872dd116104415780633950935111610405578063395093511461070f5780633af50e571461072f5780633bbac579146107455780633f33e90914610775578063437823ec146107955780634549b039146107b557600080fd5b806323b872dd146106735780632d83811914610693578063313ce567146106b357806333251a0b146106cf5780633685d419146106ef57600080fd5b806314d620871161049357806314d62087146105b157806316279055146105c657806318160ddd146105e657806318d9ceae1461060f5780631fc851bd1461064857806322e78b6a1461065e57600080fd5b806306fdde03146104db578063076252e21461051a578063092316021461055a578063095ea7b31461057c57806311f876011461059c57600080fd5b366104d657005b600080fd5b3480156104e757600080fd5b5060408051808201825260078152664b4f4e5341544f60c81b60208201529051610511919061442f565b60405180910390f35b34801561052657600080fd5b5061054a6105353660046141fd565b600c6020526000908152604090205460ff1681565b6040519015158152602001610511565b34801561056657600080fd5b5061057a6105753660046142f8565b610f5e565b005b34801561058857600080fd5b5061054a6105973660046142b1565b610fb3565b3480156105a857600080fd5b5061057a610fca565b3480156105bd57600080fd5b5061057a611007565b3480156105d257600080fd5b5061054a6105e13660046141fd565b61103f565b3480156105f257600080fd5b5068fc6f7c40458122964d601f1b5b604051908152602001610511565b34801561061b57600080fd5b5061054a61062a3660046141fd565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561065457600080fd5b5061060160345481565b34801561066a57600080fd5b5061057a61107b565b34801561067f57600080fd5b5061054a61068e366004614270565b6110b4565b34801561069f57600080fd5b506106016106ae3660046142f8565b61111d565b3480156106bf57600080fd5b5060405160128152602001610511565b3480156106db57600080fd5b5061057a6106ea3660046141fd565b61118e565b3480156106fb57600080fd5b5061057a61070a3660046141fd565b6111d9565b34801561071b57600080fd5b5061054a61072a3660046142b1565b611224565b34801561073b57600080fd5b50610601602e5481565b34801561075157600080fd5b5061054a6107603660046141fd565b600b6020526000908152604090205460ff1681565b34801561078157600080fd5b5061057a6107903660046141fd565b61125a565b3480156107a157600080fd5b5061057a6107b03660046141fd565b6112a5565b3480156107c157600080fd5b506106016107d036600461432a565b6112f3565b3480156107e157600080fd5b5060375461054a90610100900460ff1681565b34801561080057600080fd5b5060375461054a90600160481b900460ff1681565b34801561082157600080fd5b5061057a61138a565b34801561083657600080fd5b5061057a6108453660046141fd565b6114a2565b34801561085657600080fd5b5061054a6108653660046141fd565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561088f57600080fd5b50610601601e5481565b3480156108a557600080fd5b50610601602f5481565b3480156108bb57600080fd5b5061057a6108ca3660046141fd565b6114f0565b3480156108db57600080fd5b5061060160315481565b3480156108f157600080fd5b5061060160305481565b34801561090757600080fd5b5060145461091b906001600160a01b031681565b6040516001600160a01b039091168152602001610511565b34801561093f57600080fd5b5061057a61094e3660046141fd565b61153e565b34801561095f57600080fd5b50610601602d5481565b34801561097557600080fd5b5061057a6115ae565b34801561098a57600080fd5b5061057a6115e8565b34801561099f57600080fd5b5061057a611621565b3480156109b457600080fd5b5061057a6109c33660046141fd565b61165c565b3480156109d457600080fd5b5061057a6109e33660046141fd565b6116a7565b3480156109f457600080fd5b5061054a610a033660046142f8565b6116f2565b348015610a1457600080fd5b5061054a610a233660046141fd565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610a4d57600080fd5b5061057a611945565b348015610a6257600080fd5b50610601610a713660046141fd565b611984565b348015610a8257600080fd5b5061057a6119e3565b348015610a9757600080fd5b5060375461054a90600160381b900460ff1681565b348015610ab857600080fd5b5061057a610ac73660046142f8565b611a57565b348015610ad857600080fd5b5061057a610ae73660046141fd565b611af4565b348015610af857600080fd5b5061057a611b42565b348015610b0d57600080fd5b5061057a610b1c366004614384565b611b81565b348015610b2d57600080fd5b5061057a610b3c3660046141fd565b611c35565b348015610b4d57600080fd5b5061054a610b5c3660046141fd565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610b8657600080fd5b5061057a610b953660046141fd565b611ccd565b348015610ba657600080fd5b5060135461091b906001600160a01b031681565b348015610bc657600080fd5b506000546001600160a01b031661091b565b348015610be457600080fd5b50610601601d5481565b348015610bfa57600080fd5b5061057a610c093660046141fd565b611d1b565b348015610c1a57600080fd5b5061057a611de1565b348015610c2f57600080fd5b50610601602c5481565b348015610c4557600080fd5b5060125461091b906001600160a01b031681565b348015610c6557600080fd5b5060375461054a906301000000900460ff1681565b348015610c8657600080fd5b5061054a610c953660046141fd565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cbf57600080fd5b5061057a611e24565b348015610cd457600080fd5b5061054a610ce33660046142b1565b611e5f565b348015610cf457600080fd5b5061057a610d03366004614384565b611eae565b348015610d1457600080fd5b5061054a610d233660046142b1565b611f5c565b348015610d3457600080fd5b5061057a611f69565b348015610d4957600080fd5b5061057a611fae565b348015610d5e57600080fd5b50610601602b5481565b348015610d7457600080fd5b5060375461054a9060ff1681565b348015610d8e57600080fd5b5061060160355481565b348015610da457600080fd5b5061057a611fe7565b348015610db957600080fd5b5061060160335481565b348015610dcf57600080fd5b50610601610dde366004614237565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e1557600080fd5b5061057a612028565b348015610e2a57600080fd5b5061057a610e393660046142dd565b612064565b348015610e4a57600080fd5b5061057a612208565b348015610e5f57600080fd5b5061057a610e6e3660046141fd565b61223e565b348015610e7f57600080fd5b5061057a612289565b348015610e9457600080fd5b5061060160325481565b348015610eaa57600080fd5b5061057a6122c8565b348015610ebf57600080fd5b50610601602a5481565b348015610ed557600080fd5b5061057a610ee43660046141fd565b612301565b348015610ef557600080fd5b5060375461054a9062010000900460ff1681565b348015610f1557600080fd5b5061057a6123b7565b348015610f2a57600080fd5b5061057a610f393660046142f8565b6123ee565b348015610f4a57600080fd5b5061057a610f593660046141fd565b612463565b6000546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f8890614484565b60405180910390fd5b601e811015610f9f57600080fd5b610fad81633b9aca0061453f565b60205550565b6000610fc03384846124d7565b5060015b92915050565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610f8890614484565b6037805462ff0000191662010000179055565b6000546001600160a01b031633146110315760405162461bcd60e51b8152600401610f8890614484565b6037805462ff000019169055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061107357508115155b949350505050565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610f8890614484565b6037805463ff00000019169055565b60006110c18484846125e4565b611113843361110e856040518060600160405280602881526020016145d5602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906131c1565b6124d7565b5060019392505050565b60006016548211156111715760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610f88565b600061117b6131ed565b90506111878382613210565b9392505050565b6000546001600160a01b031633146111b85760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146112035760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600660205260409020805460ff19169055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610fc091859061110e908661321c565b6000546001600160a01b031633146112845760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146112cf5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600068fc6f7c40458122964d601f1b8311156113515760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610f88565b8161137057600061136184613228565b50939550610fc4945050505050565b600061137b84613228565b50929550610fc4945050505050565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610f8890614484565b60006113bf30611984565b90506127106113db68fc6f7c40458122964d601f1b600561453f565b6113e5919061451d565b8110156114645760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303525206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a401610f88565b61146c613277565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000546001600160a01b031633146114cc5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b0316331461151a5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146115685760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166000908152600b602052604090205460ff1661158d57600080fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610f8890614484565b6037805464ff0000000019169055565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60481b19169055565b6000546001600160a01b0316331461164b5760405162461bcd60e51b8152600401610f8890614484565b6037805461ffff1916610101179055565b6000546001600160a01b031633146116865760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146116d15760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600960205260409020805460ff19169055565b600080546001600160a01b0316331461171d5760405162461bcd60e51b8152600401610f8890614484565b600a8211156117815760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610f88565b6013546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156117c757600080fd5b505afa1580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff9190614311565b90506000606461180f858461453f565b611819919061451d565b9050801561183e5760135460115461183e916001600160a01b039081169116836125e4565b601154611853906001600160a01b0316611984565b601e55606461186f68fc6f7c40458122964d601f1b603261453f565b611879919061451d565b601e5411156118d65760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206275726e206d6f7265207468656e20353025206f6620737560448201526370706c7960e01b6064820152608401610f88565b6013546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561192057600080fd5b505af1158015611934573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461196f5760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60481b1916600160481b179055565b6001600160a01b03811660009081526006602052604081205460ff16156119c157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fc49061111d565b6000546001600160a01b03163314611a0d5760405162461bcd60e51b8152600401610f8890614484565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611a815760405162461bcd60e51b8152600401610f8890614484565b601d8190554780821115611af05760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207365742076616c756520666f72206d6f726520657468207460448201526f68616e20636f6e74726163742068617360801b6064820152608401610f88565b5050565b6000546001600160a01b03163314611b1e5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60381b1916600160381b179055565b6000546001600160a01b03163314611bab5760405162461bcd60e51b8152600401610f8890614484565b6030839055602e829055602f819055603184905560148183611bcd8688614505565b611bd79190614505565b611be19190614505565b1115611c2f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610f88565b50505050565b6000546001600160a01b03163314611c5f5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b038116611cab5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610f88565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611cf75760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314611d455760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b038116611d915760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610f88565b600d80546001600160a01b03908116600090815260056020526040808220805460ff1990811690915584546001600160a01b03191695909316948517909355928352912080549091166001179055565b6000546001600160a01b03163314611e0b5760405162461bcd60e51b8152600401610f8890614484565b6037805465ff0000000000191665010000000000179055565b6000546001600160a01b03163314611e4e5760405162461bcd60e51b8152600401610f8890614484565b6037805465ff000000000019169055565b6000610fc0338461110e856040518060600160405280602581526020016145fd602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906131c1565b6000546001600160a01b03163314611ed85760405162461bcd60e51b8152600401610f8890614484565b602c839055602a829055602b819055602d84905560148183611efa8688614505565b611f049190614505565b611f0e9190614505565b1115611c2f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610f88565b6000610fc03384846125e4565b6000546001600160a01b03163314611f935760405162461bcd60e51b8152600401610f8890614484565b6037805466ff00000000000019166601000000000000179055565b6000546001600160a01b03163314611fd85760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60381b19169055565b6000546001600160a01b031633146120115760405162461bcd60e51b8152600401610f8890614484565b6037805464ff000000001916640100000000179055565b6000546001600160a01b031633146120525760405162461bcd60e51b8152600401610f8890614484565b6037805466ff00000000000019169055565b6000546001600160a01b0316331461208e5760405162461bcd60e51b8152600401610f8890614484565b60375465010000000000900460ff161515600114156120bc57670de0b6b3a76400004710156120bc57600080fd5b600181151514156120cd576000601d555b601d5460006120dc4783613579565b90506000603760049054906101000a900460ff1615156001151514156121ac57606461210983600561453f565b612113919061451d565b601d60008282546121249190614505565b9091555060009050606461213984600561453f565b612143919061451d565b61214d908461455e565b6010546040519192506001600160a01b0316908290600081818185875af1925050503d806000811461219b576040519150601f19603f3d011682016040523d82523d6000602084013e6121a0565b606091505b50508092505050611c2f565b60105460405183916001600160a01b0316908290600081818185875af1925050503d80600081146121f9576040519150601f19603f3d011682016040523d82523d6000602084013e6121fe565b606091505b5050505050505050565b6000546001600160a01b031633146122325760405162461bcd60e51b8152600401610f8890614484565b6037805460ff19169055565b6000546001600160a01b031633146122685760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146122b35760405162461bcd60e51b8152600401610f8890614484565b6037805463ff00000019166301000000179055565b6000546001600160a01b031633146122f25760405162461bcd60e51b8152600401610f8890614484565b6037805460ff19166001179055565b6000546001600160a01b0316331461232b5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166123955760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610f88565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123e15760405162461bcd60e51b8152600401610f8890614484565b6037805461ffff19169055565b6000546001600160a01b031633146124185760405162461bcd60e51b8152600401610f8890614484565b6037805460ff60401b1916600160401b179055601d5481111561243a57600080fd5b61244381613585565b601d546124509082613579565b601d55506037805460ff60401b19169055565b6000546001600160a01b0316331461248d5760405162461bcd60e51b8152600401610f8890614484565b6001600160a01b0381166000908152600b602052604090205460ff16156124b357600080fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6001600160a01b03831661252d5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610f88565b6001600160a01b0382166125835760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610f88565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f88565b6001600160a01b0382166126aa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f88565b6000811161270c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f88565b6001600160a01b0383166000908152600b602052604090205460ff161561273257600080fd5b603754600160381b900460ff161515600114801561276957506001600160a01b03821660009081526007602052604090205460ff16155b156127e3576018548161277b84611984565b6127859190614505565b11156127e35760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610f88565b6037546601000000000000900460ff16151560011415612ab257601480547368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b03199182161790915560128054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561287c57600080fd5b505afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b4919061421a565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fc57600080fd5b505afa158015612910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612934919061421a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561297a57600080fd5b505afa15801561298e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b2919061421a565b601380546001600160a01b0319166001600160a01b0392909216919091179055436032554260338190556129e99062054600614505565b60345550601380546001600160a01b039081166000908152600760209081526040808320805460ff1990811660019081179092556012805487168652838620805483168417905580548716865260088552838620805483168417905587548716865283862080548316841790559654861685526009909352818420805484168217905594548416835280832080548316861790556014549093168252919020805490911690911790556037805469ff00ffff00000000ffff191669010001000000000001011790555b603754610100900460ff1615612e0d576000546001600160a01b03848116911614801590612aee57506000546001600160a01b03838116911614155b8015612b0257506001600160a01b03821615155b8015612b1c57506011546001600160a01b03838116911614155b8015612b325750603754600160401b900460ff16155b15612e0d576000546001600160a01b03848116911614801590612b6357506013546001600160a01b03838116911614155b15612be75760005b6002811015612be55780603254612b829190614505565b431415612bd3576001600160a01b0383166000818152600c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b80612bdd81614575565b915050612b6b565b505b60375462010000900460ff168015612c0c57506013546001600160a01b038481169116145b15612c63576020543a1115612c635760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f88565b60375460ff1615612d62576000546001600160a01b03838116911614801590612c9a57506012546001600160a01b03838116911614155b8015612cb457506013546001600160a01b03838116911614155b15612d6257326000908152600460205260409020544311612d4f5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610f88565b3260009081526004602052604090204390555b6013546001600160a01b038481169116148015612d9857506001600160a01b03821660009081526008602052604090205460ff16155b15612e0d57603554811115612e0d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610f88565b6000612e32601c54612e2c601b54601a5461321c90919063ffffffff16565b9061321c565b90506000612e3f30611984565b60195460375491925082101590600160401b900460ff16158015612e6c5750603754600160481b900460ff165b8015612e8d5750601354600090612e8b906001600160a01b0316611984565b115b8015612e995750600083115b8015612ebe57506001600160a01b03851660009081526005602052604090205460ff16155b8015612ee357506001600160a01b03861660009081526005602052604090205460ff16155b8015612efc57506013546001600160a01b038681169116145b8015612f055750805b15612f1257612f12613277565b6001600160a01b03861660009081526005602052604090205460019060ff1680612f5457506001600160a01b03861660009081526005602052604090205460ff165b15612f6657506003601f5560006131ac565b6013546001600160a01b0388811691161415612ff4576037546301000000900460ff16151560011415612fca57612f9c8661103f565b158015612fc157506001600160a01b03871660009081526009602052604090205460ff165b612fca57600080fd5b612fd26136ef565b602a54602155602b54602355602c54602555602d546027556001601f556131ac565b6013546001600160a01b03878116911614156130e5576037546301000000900460ff161515600114156130585761302a8761103f565b15801561304f57506001600160a01b03861660009081526009602052604090205460ff165b61305857600080fd5b6130606136ef565b602e54602155602f546023556030546025556031546027556002601f556001600160a01b0387166000908152600c602052604090205460ff1680156130a757504260345410155b156130e0576021546130ba90600961453f565b6021556023546130cb90600361453f565b6023556027546130dc90600561453f565b6027555b6131ac565b6001600160a01b0387166000908152600c602052604090205460ff16156131745760405162461bcd60e51b815260206004820152603960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c20636865617065722e2020444d2061204d6f642e000000000000006064820152608401610f88565b6037546301000000900460ff1615156001141561319e576131948661103f565b1561319e57600080fd5b6131a66136ef565b6003601f555b6131b887878784613744565b50505050505050565b600081848411156131e55760405162461bcd60e51b8152600401610f88919061442f565b505050900390565b60008060006131fa6138c7565b90925090506132098282613210565b9250505090565b6000611187828461451d565b60006111878284614505565b600080600080600080600080600061323f8a613a6f565b925092509250600080600061325d8d86866132586131ed565b613aab565b919f909e50909c50959a5093985091965092945050505050565b6037805460ff60401b1916600160401b179055600061329530611984565b90506000601a54601c54601b546132ac9190614505565b6132b69190614505565b905060006132d06002601a5461321090919063ffffffff16565b905060006132de8483613579565b9050476132ea82613afb565b60006132f64783613579565b9050600061331986613313601b5485613c6490919063ffffffff16565b90613210565b9050600061333687613313601c5486613c6490919063ffffffff16565b9050600061334e826133488686613579565b90613579565b6000601b819055601c819055601a819055600d5460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146133b0576040519150601f19603f3d011682016040523d82523d6000602084013e6133b5565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613405576040519150601f19603f3d011682016040523d82523d6000602084013e61340a565b606091505b50508091505061341a8883613c70565b6706f05b59d3b2000047111561356057601d5460006134394783613579565b603754909150640100000000900460ff1615156001141561350457606461346182600561453f565b61346b919061451d565b601d600082825461347c9190614505565b9091555060009050606461349183600561453f565b61349b919061451d565b6134a5908361455e565b6010546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146134f3576040519150601f19603f3d011682016040523d82523d6000602084013e6134f8565b606091505b5050809450505061355d565b60105460405182916001600160a01b0316908290600081818185875af1925050503d8060008114613551576040519150601f19603f3d011682016040523d82523d6000602084013e613556565b606091505b5090945050505b50505b50506037805460ff60401b191690555050505050505050565b6000611187828461455e565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156135ea57600080fd5b505afa1580156135fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613622919061421a565b81600081518110613635576136356145a6565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613669576136696145a6565b6001600160a01b039283166020918202929092010152601254600f549082169163b6f9de959185916000918691166136a34261012c61321c565b6040518663ffffffff1660e01b81526004016136c294939291906143fa565b6000604051808303818588803b1580156136db57600080fd5b505af11580156131b8573d6000803e3d6000fd5b6025541580156136ff5750602754155b801561370b5750602154155b80156137175750602354155b1561371e57565b602180546022556027805460285560258054602655600092839055602383905582905555565b80613751576137516136ef565b6001600160a01b03841660009081526006602052604090205460ff16801561379257506001600160a01b03831660009081526006602052604090205460ff16155b156137a7576137a2848484613d33565b6138a5565b6001600160a01b03841660009081526006602052604090205460ff161580156137e857506001600160a01b03831660009081526006602052604090205460ff165b156137f8576137a2848484613e59565b6001600160a01b03841660009081526006602052604090205460ff1615801561383a57506001600160a01b03831660009081526006602052604090205460ff16155b1561384a576137a2848484613f02565b6001600160a01b03841660009081526006602052604090205460ff16801561388a57506001600160a01b03831660009081526006602052604090205460ff165b1561389a576137a2848484613f46565b6138a5848484613f02565b80611c2f57611c2f602254602155602454602355602654602555602854602755565b601654600090819068fc6f7c40458122964d601f1b825b601554811015613a2c57826001600060158481548110613900576139006145a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061396b5750816002600060158481548110613944576139446145a6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561398a5750506016549368fc6f7c40458122964d601f1b9350915050565b6139d060016000601584815481106139a4576139a46145a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613579565b9250613a1860026000601584815481106139ec576139ec6145a6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613579565b915080613a2481614575565b9150506138de565b50601654613a469068fc6f7c40458122964d601f1b613210565b821015613a665750506016549268fc6f7c40458122964d601f1b92509050565b90939092509050565b600080600080613a7e85613fb9565b90506000613a8b86613fd5565b90506000613a9d826133488986613579565b979296509094509092505050565b6000808080613aba8886613c64565b90506000613ac88887613c64565b90506000613ad68888613c64565b90506000613ae8826133488686613579565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b3057613b306145a6565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613b8457600080fd5b505afa158015613b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbc919061421a565b81600181518110613bcf57613bcf6145a6565b6001600160a01b039283166020918202929092010152601254613bf591309116846124d7565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c2e9085906000908690309042906004016144c9565b600060405180830381600087803b158015613c4857600080fd5b505af1158015613c5c573d6000803e3d6000fd5b505050505050565b6000611187828461453f565b601254613c889030906001600160a01b0316846124d7565b60125460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613cf357600080fd5b505af1158015613d07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d2c9190614356565b5050505050565b600080600080600080613d4587613228565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613d779088613579565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613da69087613579565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054613dd5908661321c565b6001600160a01b038916600090815260016020526040902055613df781614003565b613e0184836141c9565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e4691815260200190565b60405180910390a3505050505050505050565b600080600080600080613e6b87613228565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613e9d9087613579565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054613ed3908461321c565b6001600160a01b038916600090815260026020908152604080832093909355600190522054613dd5908661321c565b600080600080600080613f1487613228565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150613da69087613579565b600080600080600080613f5887613228565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150613f8a9088613579565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054613e9d9087613579565b6000610fc4606461331360255485613c6490919063ffffffff16565b6000610fc46064613313602354602154602754613ff29190614505565b613ffc9190614505565b8590613c64565b6001601f5414156140a457602954602a5461401e908361453f565b614028919061451d565b601b60008282546140399190614505565b9091555050602954602b5461404e908361453f565b614058919061451d565b601c60008282546140699190614505565b9091555050602954602d5461407e908361453f565b614088919061451d565b601a60008282546140999190614505565b909155506141409050565b6002601f54141561414057602954602e546140bf908361453f565b6140c9919061451d565b601b60008282546140da9190614505565b9091555050602954602f546140ef908361453f565b6140f9919061451d565b601c600082825461410a9190614505565b909155505060295460315461411f908361453f565b614129919061451d565b601a600082825461413a9190614505565b90915550505b600061414a6131ed565b905060006141588383613c64565b30600090815260016020526040902054909150614175908261321c565b3060009081526001602090815260408083209390935560069052205460ff16156141c457306000908152600260205260409020546141b3908461321c565b306000908152600260205260409020555b505050565b6016546141d69083613579565b6016556017546141e6908261321c565b6017555050565b8035801515811461194057600080fd5b60006020828403121561420f57600080fd5b8135611187816145bc565b60006020828403121561422c57600080fd5b8151611187816145bc565b6000806040838503121561424a57600080fd5b8235614255816145bc565b91506020830135614265816145bc565b809150509250929050565b60008060006060848603121561428557600080fd5b8335614290816145bc565b925060208401356142a0816145bc565b929592945050506040919091013590565b600080604083850312156142c457600080fd5b82356142cf816145bc565b946020939093013593505050565b6000602082840312156142ef57600080fd5b611187826141ed565b60006020828403121561430a57600080fd5b5035919050565b60006020828403121561432357600080fd5b5051919050565b6000806040838503121561433d57600080fd5b8235915061434d602084016141ed565b90509250929050565b60008060006060848603121561436b57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561439a57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156143ef5781516001600160a01b0316875295820195908201906001016143ca565b509495945050505050565b84815260806020820152600061441360808301866143b6565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b8181101561445c57858101830151858201604001528201614440565b8181111561446e576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a0604082015260006144e860a08301866143b6565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561451857614518614590565b500190565b60008261453a57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561455957614559614590565b500290565b60008282101561457057614570614590565b500390565b600060001982141561458957614589614590565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146145d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f4382909135980c2dc131d1601b948eedc8a90f1f1f75f269096325ff29731ea64736f6c63430008070033

Deployed Bytecode Sourcemap

18060:33228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23761:100;;;;;;;;;;-1:-1:-1;23840:13:0;;;;;;;;;;;-1:-1:-1;;;23840:13:0;;;;23761:100;;;;23840:13;23761:100;:::i;:::-;;;;;;;;19010:45;;;;;;;;;;-1:-1:-1;19010:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5344:14:1;;5337:22;5319:41;;5307:2;5292:18;19010:45:0;5179:187:1;41615:134:0;;;;;;;;;;-1:-1:-1;41615:134:0;;;;;:::i;:::-;;:::i;:::-;;24687:161;;;;;;;;;;-1:-1:-1;24687:161:0;;;;;:::i;:::-;;:::i;42555:85::-;;;;;;;;;;;;;:::i;42646:87::-;;;;;;;;;;;;;:::i;47014:337::-;;;;;;;;;;-1:-1:-1;47014:337:0;;;;;:::i;:::-;;:::i;24060:95::-;;;;;;;;;;-1:-1:-1;;;;24060:95:0;;;15214:25:1;;;15202:2;15187:18;24060:95:0;15068:177:1;40746:148:0;;;;;;;;;;-1:-1:-1;40746:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;40846:40:0;40822:4;40846:40;;;:31;:40;;;;;;;;;40746:148;20918:33;;;;;;;;;;;;;;;;42919:95;;;;;;;;;;;;;:::i;24854:329::-;;;;;;;;;;-1:-1:-1;24854:329:0;;;;;:::i;:::-;;:::i;26188:241::-;;;;;;;;;;-1:-1:-1;26188:241:0;;;;;:::i;:::-;;:::i;23966:88::-;;;;;;;;;;-1:-1:-1;23966:88:0;;18316:2;15979:36:1;;15967:2;15952:18;23966:88:0;15837:184:1;41502:107:0;;;;;;;;;;-1:-1:-1;41502:107:0;;;;;:::i;:::-;;:::i;41015:108::-;;;;;;;;;;-1:-1:-1;41015:108:0;;;;;:::i;:::-;;:::i;25189:218::-;;;;;;;;;;-1:-1:-1;25189:218:0;;;;;:::i;:::-;;:::i;20667:35::-;;;;;;;;;;;;;;;;18968:38;;;;;;;;;;-1:-1:-1;18968:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40199:119;;;;;;;;;;-1:-1:-1;40199:119:0;;;;;:::i;:::-;;:::i;39706:113::-;;;;;;;;;;-1:-1:-1;39706:113:0;;;;;:::i;:::-;;:::i;25738:444::-;;;;;;;;;;-1:-1:-1;25738:444:0;;;;;:::i;:::-;;:::i;21106:34::-;;;;;;;;;;-1:-1:-1;21106:34:0;;;;;;;;;;;21412:41;;;;;;;;;;-1:-1:-1;21412:41:0;;;;-1:-1:-1;;;21412:41:0;;;;;;45211:315;;;;;;;;;;;;;:::i;40900:109::-;;;;;;;;;;-1:-1:-1;40900:109:0;;;;;:::i;:::-;;:::i;39943:124::-;;;;;;;;;;-1:-1:-1;39943:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;40032:27:0;40008:4;40032:27;;;:18;:27;;;;;;;;;39943:124;19791:32;;;;;;;;;;;;;;;;20709:30;;;;;;;;;;;;;;;;40073:120;;;;;;;;;;-1:-1:-1;40073:120:0;;;;;:::i;:::-;;:::i;20790:35::-;;;;;;;;;;;;;;;;20746:37;;;;;;;;;;;;;;;;19334:26;;;;;;;;;;-1:-1:-1;19334:26:0;;;;-1:-1:-1;;;;;19334:26:0;;;;;;-1:-1:-1;;;;;4214:32:1;;;4196:51;;4184:2;4169:18;19334:26:0;4050:203:1;41377:122:0;;;;;;;;;;-1:-1:-1;41377:122:0;;;;;:::i;:::-;;:::i;20626:34::-;;;;;;;;;;;;;;;;43397:96;;;;;;;;;;;;;:::i;42250:93::-;;;;;;;;;;;;;:::i;41755:121::-;;;;;;;;;;;;;:::i;40604:136::-;;;;;;;;;;-1:-1:-1;40604:136:0;;;;;:::i;:::-;;:::i;39452:116::-;;;;;;;;;;-1:-1:-1;39452:116:0;;;;;:::i;:::-;;:::i;46359:649::-;;;;;;;;;;-1:-1:-1;46359:649:0;;;;;:::i;:::-;;:::i;40324:131::-;;;;;;;;;;-1:-1:-1;40324:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;40419:28:0;40395:4;40419:28;;;:19;:28;;;;;;;;;40324:131;42153:91;;;;;;;;;;;;;:::i;24161:198::-;;;;;;;;;;-1:-1:-1;24161:198:0;;;;;:::i;:::-;;:::i;3250:148::-;;;;;;;;;;;;;:::i;21346:31::-;;;;;;;;;;-1:-1:-1;21346:31:0;;;;-1:-1:-1;;;21346:31:0;;;;;;44934:271;;;;;;;;;;-1:-1:-1;44934:271:0;;;;;:::i;:::-;;:::i;40461:137::-;;;;;;;;;;-1:-1:-1;40461:137:0;;;;;:::i;:::-;;:::i;42739:83::-;;;;;;;;;;;;;:::i;43951:464::-;;;;;;;;;;-1:-1:-1;43951:464:0;;;;;:::i;:::-;;:::i;44728:200::-;;;;;;;;;;-1:-1:-1;44728:200:0;;;;;:::i;:::-;;:::i;41129:120::-;;;;;;;;;;-1:-1:-1;41129:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;41221:20:0;41197:4;41221:20;;;:11;:20;;;;;;;;;41129:120;39331:115;;;;;;;;;;-1:-1:-1;39331:115:0;;;;;:::i;:::-;;:::i;19303:24::-;;;;;;;;;;-1:-1:-1;19303:24:0;;;;-1:-1:-1;;;;;19303:24:0;;;3026:87;;;;;;;;;;-1:-1:-1;3072:7:0;3099:6;-1:-1:-1;;;;;3099:6:0;3026:87;;19756:28;;;;;;;;;;;;;;;;44421:301;;;;;;;;;;-1:-1:-1;44421:301:0;;;;;:::i;:::-;;:::i;43119:82::-;;;;;;;;;;;;;:::i;20583:36::-;;;;;;;;;;;;;;;;19259:37;;;;;;;;;;-1:-1:-1;19259:37:0;;;;-1:-1:-1;;;;;19259:37:0;;;21188:35;;;;;;;;;;-1:-1:-1;21188:35:0;;;;;;;;;;;39574:126;;;;;;;;;;-1:-1:-1;39574:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39664:28:0;39640:4;39664:28;;;:19;:28;;;;;;;;;39574:126;43207:84;;;;;;;;;;;;;:::i;25413:319::-;;;;;;;;;;-1:-1:-1;25413:319:0;;;;;:::i;:::-;;:::i;43499:446::-;;;;;;;;;;-1:-1:-1;43499:446:0;;;;;:::i;:::-;;:::i;24365:167::-;;;;;;;;;;-1:-1:-1;24365:167:0;;;;;:::i;:::-;;:::i;42012:66::-;;;;;;;;;;;;;:::i;42828:85::-;;;;;;;;;;;;;:::i;20547:29::-;;;;;;;;;;;;;;;;21059:40;;;;;;;;;;-1:-1:-1;21059:40:0;;;;;;;;20958:35;;;;;;;;;;;;;;;;43297:94;;;;;;;;;;;;;:::i;20876:35::-;;;;;;;;;;;;;;;;24538:143;;;;;;;;;;-1:-1:-1;24538:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24646:18:0;;;24619:7;24646:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24538:143;42081:66;;;;;;;;;;;;;:::i;45532:821::-;;;;;;;;;;-1:-1:-1;45532:821:0;;;;;:::i;:::-;;:::i;42451:98::-;;;;;;;;;;;;;:::i;39825:112::-;;;;;;;;;;-1:-1:-1;39825:112:0;;;;;:::i;:::-;;:::i;43020:93::-;;;;;;;;;;;;;:::i;20832:37::-;;;;;;;;;;;;;;;;42349:96;;;;;;;;;;;;;:::i;20506:34::-;;;;;;;;;;;;;;;;3404:195;;;;;;;;;;-1:-1:-1;3404:195:0;;;;;:::i;:::-;;:::i;21147:34::-;;;;;;;;;;-1:-1:-1;21147:34:0;;;;;;;;;;;41882:124;;;;;;;;;;;;;:::i;38599:206::-;;;;;;;;;;-1:-1:-1;38599:206:0;;;;;:::i;:::-;;:::i;41255:119::-;;;;;;;;;;-1:-1:-1;41255:119:0;;;;;:::i;:::-;;:::i;41615:134::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;;;;;;;;;41699:2:::1;41692:3;:9;;41684:18;;;::::0;::::1;;41729:12;:3:::0;41735:6:::1;41729:12;:::i;:::-;41713:13;:28:::0;-1:-1:-1;41615:134:0:o;24687:161::-;24762:4;24779:39;169:10;24802:7;24811:6;24779:8;:39::i;:::-;-1:-1:-1;24836:4:0;24687:161;;;;;:::o;42555:85::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42611:14:::1;:21:::0;;-1:-1:-1;;42611:21:0::1;::::0;::::1;::::0;;42555:85::o;42646:87::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42703:14:::1;:22:::0;;-1:-1:-1;;42703:22:0::1;::::0;;42646:87::o;47014:337::-;47072:4;47251:20;;47138:66;47300:23;;;;;;:42;;-1:-1:-1;47327:15:0;;;47300:42;47292:51;47014:337;-1:-1:-1;;;;47014:337:0:o;42919:95::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42983:15:::1;:23:::0;;-1:-1:-1;;42983:23:0::1;::::0;;42919:95::o;24854:329::-;24950:4;24967:36;24977:6;24985:9;24996:6;24967:9;:36::i;:::-;25014:139;25023:6;169:10;25053:89;25091:6;25053:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25053:19:0;;;;;;:11;:19;;;;;;;;169:10;25053:33;;;;;;;;;;:37;:89::i;:::-;25014:8;:139::i;:::-;-1:-1:-1;25171:4:0;24854:329;;;;;:::o;26188:241::-;26255:7;26294;;26283;:18;;26275:61;;;;-1:-1:-1;;;26275:61:0;;9636:2:1;26275:61:0;;;9618:21:1;9675:2;9655:18;;;9648:30;9714:32;9694:18;;;9687:60;9764:18;;26275:61:0;9434:354:1;26275:61:0;26347:19;26369:10;:8;:10::i;:::-;26347:32;-1:-1:-1;26397:24:0;:7;26347:32;26397:11;:24::i;:::-;26390:31;26188:241;-1:-1:-1;;;26188:241:0:o;41502:107::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41571:22:0::1;41596:5;41571:22:::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;41571:30:0::1;::::0;;41502:107::o;41015:108::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41087:20:0::1;41110:5;41087:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;41087:28:0::1;::::0;;41015:108::o;25189:218::-;169:10;25277:4;25326:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25326:34:0;;;;;;;;;;25277:4;;25294:83;;25317:7;;25326:50;;25365:10;25326:38;:50::i;40199:119::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40274:28:0::1;40305:5;40274:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;40274:36:0::1;::::0;;40199:119::o;39706:113::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39777:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;39777:34:0::1;39807:4;39777:34;::::0;;39706:113::o;25738:444::-;25829:7;-1:-1:-1;;;25857:7:0;:18;;25849:59;;;;-1:-1:-1;;;25849:59:0;;8044:2:1;25849:59:0;;;8026:21:1;8083:2;8063:18;;;8056:30;8122;8102:18;;;8095:58;8170:18;;25849:59:0;7842:352:1;25849:59:0;25924:17;25919:256;;25959:15;25988:19;25999:7;25988:10;:19::i;:::-;-1:-1:-1;25958:49:0;;-1:-1:-1;26022:14:0;;-1:-1:-1;;;;;26022:14:0;25919:256;26072:23;26107:19;26118:7;26107:10;:19::i;:::-;-1:-1:-1;26069:57:0;;-1:-1:-1;26141:22:0;;-1:-1:-1;;;;;26141:22:0;45211:315;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;45266:23:::1;45292:24;45310:4;45292:9;:24::i;:::-;45266:50:::0;-1:-1:-1;45368:5:0::1;45354:11;-1:-1:-1::0;;;45364:1:0::1;45354:11;:::i;:::-;:19;;;;:::i;:::-;45335:15;:38;;45327:116;;;::::0;-1:-1:-1;;;45327:116:0;;8754:2:1;45327:116:0::1;::::0;::::1;8736:21:1::0;8793:2;8773:18;;;8766:30;8832:34;8812:18;;;8805:62;8903:34;8883:18;;;8876:62;-1:-1:-1;;;8954:19:1;;;8947:32;8996:19;;45327:116:0::1;8552:469:1::0;45327:116:0::1;45454:12;:10;:12::i;:::-;45482:36;::::0;45502:15:::1;15214:25:1::0;;45482:36:0::1;::::0;15202:2:1;15187:18;45482:36:0::1;;;;;;;45255:271;45211:315::o:0;40900:109::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40974:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;40974:27:0::1;40997:4;40974:27;::::0;;40900:109::o;40073:120::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40150:28:0::1;;::::0;;;:19:::1;:28;::::0;;;;:35;;-1:-1:-1;;40150:35:0::1;40181:4;40150:35;::::0;;40073:120::o;41377:122::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41447:12:0;::::1;;::::0;;;:5:::1;:12;::::0;;;;;::::1;;41439:21;;;::::0;::::1;;-1:-1:-1::0;;;;;41471:12:0::1;41486:5;41471:12:::0;;;:5:::1;:12;::::0;;;;:20;;-1:-1:-1;;41471:20:0::1;::::0;;41377:122::o;43397:96::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43460:17:::1;:25:::0;;-1:-1:-1;;43460:25:0::1;::::0;;43397:96::o;42250:93::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42306:21:::1;:29:::0;;-1:-1:-1;;;;42306:29:0::1;::::0;;42250:93::o;41755:121::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;41809:14:::1;:21:::0;;-1:-1:-1;;41841:27:0;;;;;41755:121::o;40604:136::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40684:40:0::1;40727:5;40684:40:::0;;;:31:::1;:40;::::0;;;;:48;;-1:-1:-1;;40684:48:0::1;::::0;;40604:136::o;39452:116::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39524:28:0::1;39555:5;39524:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;39524:36:0::1;::::0;;39452:116::o;46359:649::-;46430:4;3099:6;;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;46465:2:::1;46454:7;:13;;46446:68;;;::::0;-1:-1:-1;;;46446:68:0;;13375:2:1;46446:68:0::1;::::0;::::1;13357:21:1::0;13414:2;13394:18;;;13387:30;13453:34;13433:18;;;13426:62;-1:-1:-1;;;13504:18:1;;;13497:40;13554:19;;46446:68:0::1;13173:406:1::0;46446:68:0::1;46571:9;::::0;46556:25:::1;::::0;-1:-1:-1;;;46556:25:0;;-1:-1:-1;;;;;46571:9:0;;::::1;46556:25;::::0;::::1;4196:51:1::0;46525:28:0::1;::::0;46556:4:::1;::::0;:14:::1;::::0;4169:18:1;;46556:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46525:56:::0;-1:-1:-1;46592:20:0::1;46648:5;46615:30;46638:7:::0;46525:56;46615:30:::1;:::i;:::-;:38;;;;:::i;:::-;46592:61:::0;-1:-1:-1;46668:16:0;;46664:88:::1;;46710:9;::::0;46721:4:::1;::::0;46700:40:::1;::::0;-1:-1:-1;;;;;46710:9:0;;::::1;::::0;46721:4:::1;46727:12:::0;46700:9:::1;:40::i;:::-;46792:4;::::0;46782:15:::1;::::0;-1:-1:-1;;;;;46792:4:0::1;46782:9;:15::i;:::-;46762:17;:35:::0;46852:5:::1;46837:12;-1:-1:-1::0;;;46847:2:0::1;46837:12;:::i;:::-;:20;;;;:::i;:::-;46816:17;;:41;;46808:90;;;::::0;-1:-1:-1;;;46808:90:0;;10407:2:1;46808:90:0::1;::::0;::::1;10389:21:1::0;10446:2;10426:18;;;10419:30;10485:34;10465:18;;;10458:62;-1:-1:-1;;;10536:18:1;;;10529:34;10580:19;;46808:90:0::1;10205:400:1::0;46808:90:0::1;46946:9;::::0;46967:11:::1;::::0;;-1:-1:-1;;;;;;46967:11:0;;;;-1:-1:-1;;;;;46946:9:0;;::::1;::::0;;;46967::::1;::::0;:11:::1;::::0;;::::1;::::0;46909:19:::1;::::0;46967:11;;;;;;;46909:19;46946:9;46967:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46996:4;46989:11;;;;;3235:1;46359:649:::0;;;:::o;42153:91::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42208:21:::1;:28:::0;;-1:-1:-1;;;;42208:28:0::1;-1:-1:-1::0;;;42208:28:0::1;::::0;;42153:91::o;24161:198::-;-1:-1:-1;;;;;24251:20:0;;24227:7;24251:20;;;:11;:20;;;;;;;;24247:49;;;-1:-1:-1;;;;;;24280:16:0;;;;;:7;:16;;;;;;;24161:198::o;24247:49::-;-1:-1:-1;;;;;24334:16:0;;;;;;:7;:16;;;;;;24314:37;;:19;:37::i;3250:148::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;3357:1:::1;3341:6:::0;;3320:40:::1;::::0;-1:-1:-1;;;;;3341:6:0;;::::1;::::0;3320:40:::1;::::0;3357:1;;3320:40:::1;3388:1;3371:19:::0;;-1:-1:-1;;;;;;3371:19:0::1;::::0;;3250:148::o;44934:271::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;45066:13:::1;:35:::0;;;45034:21:::1;45120:24:::0;;::::1;;45112:85;;;::::0;-1:-1:-1;;;45112:85:0;;10812:2:1;45112:85:0::1;::::0;::::1;10794:21:1::0;10851:2;10831:18;;;10824:30;10890:34;10870:18;;;10863:62;-1:-1:-1;;;10941:18:1;;;10934:46;10997:19;;45112:85:0::1;10610:412:1::0;45112:85:0::1;45005:200;44934:271:::0;:::o;40461:137::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40543:40:0::1;;::::0;;;:31:::1;:40;::::0;;;;:47;;-1:-1:-1;;40543:47:0::1;40586:4;40543:47;::::0;;40461:137::o;42739:83::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42796:11:::1;:18:::0;;-1:-1:-1;;;;42796:18:0::1;-1:-1:-1::0;;;42796:18:0::1;::::0;;42739:83::o;43951:464::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;44106:18:::1;:40:::0;;;44157:16:::1;:36:::0;;;44204:11:::1;:26:::0;;;44241:16:::1;:36:::0;;;44370:2:::1;44218:12:::0;44176:17;44296:37:::1;44127:19:::0;44260:17;44296:37:::1;:::i;:::-;:56;;;;:::i;:::-;:70;;;;:::i;:::-;:76;;44288:119;;;::::0;-1:-1:-1;;;44288:119:0;;14911:2:1;44288:119:0::1;::::0;::::1;14893:21:1::0;14950:2;14930:18;;;14923:30;14989:32;14969:18;;;14962:60;15039:18;;44288:119:0::1;14709:354:1::0;44288:119:0::1;43951:464:::0;;;;:::o;44728:200::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44818:30:0;::::1;44810:62;;;::::0;-1:-1:-1;;;44810:62:0;;6933:2:1;44810:62:0::1;::::0;::::1;6915:21:1::0;6972:2;6952:18;;;6945:30;-1:-1:-1;;;6991:18:1;;;6984:49;7050:18;;44810:62:0::1;6731:343:1::0;44810:62:0::1;44883:9;:37:::0;;-1:-1:-1;;;;;;44883:37:0::1;-1:-1:-1::0;;;;;44883:37:0;;;::::1;::::0;;;::::1;::::0;;44728:200::o;39331:115::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39403:28:0::1;;::::0;;;:19:::1;:28;::::0;;;;:35;;-1:-1:-1;;39403:35:0::1;39434:4;39403:35;::::0;;39331:115::o;44421:301::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44515:31:0;::::1;44507:63;;;::::0;-1:-1:-1;;;44507:63:0;;6933:2:1;44507:63:0::1;::::0;::::1;6915:21:1::0;6972:2;6952:18;;;6945:30;-1:-1:-1;;;6991:18:1;;;6984:49;7050:18;;44507:63:0::1;6731:343:1::0;44507:63:0::1;44600:9;::::0;;-1:-1:-1;;;;;44600:9:0;;::::1;44613:5;44581:29:::0;;;:18:::1;:29;::::0;;;;;:37;;-1:-1:-1;;44581:37:0;;::::1;::::0;;;44629:38;;-1:-1:-1;;;;;;44629:38:0::1;::::0;;;::::1;::::0;;::::1;::::0;;;44678:29;;;;;:36;;;;::::1;-1:-1:-1::0;44678:36:0::1;::::0;;44421:301::o;43119:82::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43177:9:::1;:16:::0;;-1:-1:-1;;43177:16:0::1;::::0;::::1;::::0;;43119:82::o;43207:84::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43266:9:::1;:17:::0;;-1:-1:-1;;43266:17:0::1;::::0;;43207:84::o;25413:319::-;25506:4;25523:179;169:10;25573:7;25595:96;25634:15;25595:96;;;;;;;;;;;;;;;;;169:10;25595:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25595:34:0;;;;;;;;;;;;:38;:96::i;43499:446::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43649:17:::1;:38:::0;;;43698:15:::1;:34:::0;;;43743:10:::1;:24:::0;;;43778:15:::1;:34:::0;;;43901:2:::1;43756:11:::0;43716:16;43831:35:::1;43669:18:::0;43796:16;43831:35:::1;:::i;:::-;:53;;;;:::i;:::-;:66;;;;:::i;:::-;:72;;43823:114;;;::::0;-1:-1:-1;;;43823:114:0;;14192:2:1;43823:114:0::1;::::0;::::1;14174:21:1::0;14231:2;14211:18;;;14204:30;14270:31;14250:18;;;14243:59;14319:18;;43823:114:0::1;13990:353:1::0;24365:167:0;24443:4;24460:42;169:10;24484:9;24495:6;24460:9;:42::i;42012:66::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42059:7:::1;:14:::0;;-1:-1:-1;;42059:14:0::1;::::0;::::1;::::0;;42012:66::o;42828:85::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42886:11:::1;:19:::0;;-1:-1:-1;;;;42886:19:0::1;::::0;;42828:85::o;43297:94::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43359:17:::1;:24:::0;;-1:-1:-1;;43359:24:0::1;::::0;::::1;::::0;;43297:94::o;42081:66::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42127:7:::1;:15:::0;;-1:-1:-1;;42127:15:0::1;::::0;;42081:66::o;45532:821::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;45608:9:::1;::::0;;;::::1;;;:17;;45621:4;45608:17;45605:91;;;45675:8;45650:21;:33;;45642:42;;;::::0;::::1;;45727:4;45709:22:::0;::::1;;;45706:78;;;45764:8;45748:13;:24:::0;45706:78:::1;45821:13;::::0;45794:24:::1;45871:43;:21;45821:13:::0;45871:25:::1;:43::i;:::-;45845:69;;45925:12;45951:17;;;;;;;;;;;:25;;45972:4;45951:25;;;45948:398;;;46031:5;46009:19;:15:::0;46027:1:::1;46009:19;:::i;:::-;:27;;;;:::i;:::-;45992:13;;:44;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;46051:18:0::1;::::0;-1:-1:-1;46112:5:0::1;46090:19;:15:::0;46108:1:::1;46090:19;:::i;:::-;:27;;;;:::i;:::-;46072:45;::::0;:15;:45:::1;:::i;:::-;46153:9;::::0;46145:46:::1;::::0;46051:66;;-1:-1:-1;;;;;;46153:9:0::1;::::0;46051:66;;46145:46:::1;::::0;;;46051:66;46153:9;46145:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46132:59;;;;;45977:226;45948:398;;;46296:9;::::0;46288:46:::1;::::0;46245:15;;-1:-1:-1;;;;;46296:9:0::1;::::0;46245:15;;46288:46:::1;::::0;;;46245:15;46296:9;46288:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;45532:821:0:o;42451:98::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42513:20:::1;:28:::0;;-1:-1:-1;;42513:28:0::1;::::0;;42451:98::o;39825:112::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39894:27:0::1;39924:5;39894:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;39894:35:0::1;::::0;;39825:112::o;43020:93::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;43083:15:::1;:22:::0;;-1:-1:-1;;43083:22:0::1;::::0;::::1;::::0;;43020:93::o;42349:96::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;42410:20:::1;:27:::0;;-1:-1:-1;;42410:27:0::1;42433:4;42410:27;::::0;;42349:96::o;3404:195::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3493:22:0;::::1;3485:78;;;::::0;-1:-1:-1;;;3485:78:0;;9995:2:1;3485:78:0::1;::::0;::::1;9977:21:1::0;10034:2;10014:18;;;10007:30;10073:34;10053:18;;;10046:62;-1:-1:-1;;;10124:18:1;;;10117:41;10175:19;;3485:78:0::1;9793:407:1::0;3485:78:0::1;3574:6;:17:::0;;-1:-1:-1;;;;;;3574:17:0::1;-1:-1:-1::0;;;;;3574:17:0;;;::::1;::::0;;;::::1;::::0;;3404:195::o;41882:124::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;41937:14:::1;:22:::0;;-1:-1:-1;;41970:28:0;;;41882:124::o;38599:206::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;22039:16:::1;:23:::0;;-1:-1:-1;;;;22039:23:0::1;-1:-1:-1::0;;;22039:23:0::1;::::0;;38696:13:::2;::::0;38686:23;::::2;;38678:32;;;::::0;::::2;;38721:24;38738:6;38721:16;:24::i;:::-;38772:13;::::0;:25:::2;::::0;38790:6;38772:17:::2;:25::i;:::-;38756:13;:41:::0;-1:-1:-1;22085:16:0::1;:24:::0;;-1:-1:-1;;;;22085:24:0::1;::::0;;38599:206::o;41255:119::-;3072:7;3099:6;-1:-1:-1;;;;;3099:6:0;169:10;3159:23;3151:73;;;;-1:-1:-1;;;3151:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41323:12:0;::::1;;::::0;;;:5:::1;:12;::::0;;;;;::::1;;41322:13;41314:22;;;::::0;::::1;;-1:-1:-1::0;;;;;41347:12:0::1;;::::0;;;:5:::1;:12;::::0;;;;:19;;-1:-1:-1;;41347:19:0::1;41362:4;41347:19;::::0;;41255:119::o;29661:325::-;-1:-1:-1;;;;;29752:19:0;;29744:64;;;;-1:-1:-1;;;29744:64:0;;14550:2:1;29744:64:0;;;14532:21:1;;;14569:18;;;14562:30;14628:34;14608:18;;;14601:62;14680:18;;29744:64:0;14348:356:1;29744:64:0;-1:-1:-1;;;;;29827:21:0;;29819:64;;;;-1:-1:-1;;;29819:64:0;;7685:2:1;29819:64:0;;;7667:21:1;7724:2;7704:18;;;7697:30;7763:32;7743:18;;;7736:60;7813:18;;29819:64:0;7483:354:1;29819:64:0;-1:-1:-1;;;;;29894:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29946:32;;15214:25:1;;;29946:32:0;;15187:18:1;29946:32:0;;;;;;;29661:325;;;:::o;29992:5325::-;-1:-1:-1;;;;;30080:18:0;;30072:68;;;;-1:-1:-1;;;30072:68:0;;13786:2:1;30072:68:0;;;13768:21:1;13825:2;13805:18;;;13798:30;13864:34;13844:18;;;13837:62;-1:-1:-1;;;13915:18:1;;;13908:35;13960:19;;30072:68:0;13584:401:1;30072:68:0;-1:-1:-1;;;;;30159:16:0;;30151:64;;;;-1:-1:-1;;;30151:64:0;;7281:2:1;30151:64:0;;;7263:21:1;7320:2;7300:18;;;7293:30;7359:34;7339:18;;;7332:62;-1:-1:-1;;;7410:18:1;;;7403:33;7453:19;;30151:64:0;7079:399:1;30151:64:0;30243:1;30234:6;:10;30226:64;;;;-1:-1:-1;;;30226:64:0;;12965:2:1;30226:64:0;;;12947:21:1;13004:2;12984:18;;;12977:30;13043:34;13023:18;;;13016:62;-1:-1:-1;;;13094:18:1;;;13087:39;13143:19;;30226:64:0;12763:405:1;30226:64:0;-1:-1:-1;;;;;30310:11:0;;;;;;:5;:11;;;;;;;;30309:12;30301:21;;;;;;30337:11;;-1:-1:-1;;;30337:11:0;;;;:19;;30352:4;30337:19;:48;;;;-1:-1:-1;;;;;;30362:23:0;;;;;;:19;:23;;;;;;;;30360:25;30337:48;30333:169;;;30436:10;;30426:6;30410:13;30420:2;30410:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;30402:88;;;;-1:-1:-1;;;30402:88:0;;9228:2:1;30402:88:0;;;9210:21:1;9267:2;9247:18;;;9240:30;9306:34;9286:18;;;9279:62;-1:-1:-1;;;9357:18:1;;;9350:37;9404:19;;30402:88:0;9026:403:1;30402:88:0;30515:7;;;;;;;:15;;30526:4;30515:15;30512:1206;;;30658:11;:56;;30672:42;-1:-1:-1;;;;;;30658:56:0;;;;;;;30762:11;:26;;30600:42;30762:26;;;;;;30833:22;;;-1:-1:-1;;;30833:22:0;;;;30600:42;;30833:20;;:22;;;;;;;;;;;;;;30600:42;30833:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30815:49:0;;30873:4;30880:12;-1:-1:-1;;;;;30880:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30815:85;;-1:-1:-1;;;;;;30815:85:0;;;;;;;-1:-1:-1;;;;;4488:15:1;;;30815:85:0;;;4470:34:1;4540:15;;4520:18;;;4513:43;4405:18;;30815:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30803:9;:97;;-1:-1:-1;;;;;;30803:97:0;-1:-1:-1;;;;;30803:97:0;;;;;;;;;;30936:12;30915:18;:33;30986:15;30963:20;:38;;;31037:26;;31055:8;31037:26;:::i;:::-;31016:18;:47;-1:-1:-1;31106:9:0;;;-1:-1:-1;;;;;31106:9:0;;;31078:39;;;;:19;:39;;;;;;;;:46;;-1:-1:-1;;31078:46:0;;;31120:4;31078:46;;;;;;31167:11;;;;;31139:41;;;;;:48;;;;;;;;31242:11;;;;31202:53;;:31;:53;;;;;:60;;;;;;;;31317:9;;;;31277:51;;;;;:58;;;;;;;;31378:9;;;;31350:39;;:19;:39;;;;;;:46;;;;;;;;31439:11;;;;31411:41;;;;;:48;;;;;;;;31502:11;;;;;31474:41;;;;;:48;;;;;;;;;;31537:14;:21;;-1:-1:-1;;31691:15:0;31649:27;31691:15;;;30512:1206;31731:14;;;;;;;31728:1320;;;3072:7;3099:6;-1:-1:-1;;;;;31765:15:0;;;3099:6;;31765:15;;;;:32;;-1:-1:-1;3072:7:0;3099:6;-1:-1:-1;;;;;31784:13:0;;;3099:6;;31784:13;;31765:32;:52;;;;-1:-1:-1;;;;;;31801:16:0;;;;31765:52;:66;;;;-1:-1:-1;31827:4:0;;-1:-1:-1;;;;;31821:10:0;;;31827:4;;31821:10;;31765:66;:87;;;;-1:-1:-1;31836:16:0;;-1:-1:-1;;;31836:16:0;;;;31835:17;31765:87;31761:1276;;;3072:7;3099:6;-1:-1:-1;;;;;31876:15:0;;;3099:6;;31876:15;;;;:34;;-1:-1:-1;31901:9:0;;-1:-1:-1;;;;;31895:15:0;;;31901:9;;31895:15;;31876:34;31873:325;;;31940:6;31935:244;31956:1;31952;:5;31935:244;;;32027:1;32006:18;;:22;;;;:::i;:::-;31990:12;:38;31987:169;;;-1:-1:-1;;;;;32057:17:0;;;;;;:13;:17;;;;;;:24;;-1:-1:-1;;32057:24:0;32077:4;32057:24;;;32113:15;;;32057:17;32113:15;31987:169;31959:3;;;;:::i;:::-;;;;31935:244;;;;31873:325;32220:14;;;;;;;:35;;;;-1:-1:-1;32246:9:0;;-1:-1:-1;;;;;32238:17:0;;;32246:9;;32238:17;32220:35;32216:149;;;32303:13;;32288:11;:28;;32280:65;;;;-1:-1:-1;;;32280:65:0;;8401:2:1;32280:65:0;;;8383:21:1;8440:2;8420:18;;;8413:30;8479:26;8459:18;;;8452:54;8523:18;;32280:65:0;8199:348:1;32280:65:0;32387:20;;;;32383:415;;;3072:7;3099:6;-1:-1:-1;;;;;32435:13:0;;;3099:6;;32435:13;;;;:43;;-1:-1:-1;32466:11:0;;-1:-1:-1;;;;;32452:26:0;;;32466:11;;32452:26;;32435:43;:71;;;;-1:-1:-1;32496:9:0;;-1:-1:-1;;;;;32482:24:0;;;32496:9;;32482:24;;32435:71;32431:348;;;32571:9;32542:39;;;;:28;:39;;;;;;32584:12;-1:-1:-1;32534:140:0;;;;-1:-1:-1;;;32534:140:0;;12077:2:1;32534:140:0;;;12059:21:1;12116:2;12096:18;;;12089:30;12155:34;12135:18;;;12128:62;12226:34;12206:18;;;12199:62;-1:-1:-1;;;12277:19:1;;;12270:40;12327:19;;32534:140:0;11875:477:1;32534:140:0;32730:9;32701:39;;;;:28;:39;;;;;32743:12;32701:54;;32431:348;32828:9;;-1:-1:-1;;;;;32820:17:0;;;32828:9;;32820:17;:57;;;;-1:-1:-1;;;;;;32842:35:0;;;;;;:31;:35;;;;;;;;32841:36;32820:57;32816:206;;;32924:20;;32914:6;:30;;32906:96;;;;-1:-1:-1;;;32906:96:0;;11655:2:1;32906:96:0;;;11637:21:1;11694:2;11674:18;;;11667:30;11733:34;11713:18;;;11706:62;-1:-1:-1;;;11784:18:1;;;11777:51;11845:19;;32906:96:0;11453:417:1;32906:96:0;33058:25;33086:37;33114:8;;33086:23;33100:8;;33086:9;;:13;;:23;;;;:::i;:::-;:27;;:37::i;:::-;33058:65;;33134:28;33165:24;33183:4;33165:9;:24::i;:::-;33255:12;;33283:16;;33134:55;;-1:-1:-1;33231:36:0;;;;-1:-1:-1;;;33283:16:0;;;;33282:17;:42;;;;-1:-1:-1;33303:21:0;;-1:-1:-1;;;33303:21:0;;;;33282:42;:70;;;;-1:-1:-1;33338:9:0;;33351:1;;33328:20;;-1:-1:-1;;;;;33338:9:0;33328;:20::i;:::-;:24;33282:70;:95;;;;;33376:1;33356:17;:21;33282:95;:122;;;;-1:-1:-1;;;;;;33382:22:0;;;;;;:18;:22;;;;;;;;33381:23;33282:122;:151;;;;-1:-1:-1;;;;;;33409:24:0;;;;;;:18;:24;;;;;;;;33408:25;33282:151;:170;;;;-1:-1:-1;33443:9:0;;-1:-1:-1;;;;;33437:15:0;;;33443:9;;33437:15;33282:170;:197;;;;;33456:23;33282:197;33278:246;;;33496:12;:10;:12::i;:::-;-1:-1:-1;;;;;33568:24:0;;33534:12;33568:24;;;:18;:24;;;;;;33549:4;;33568:24;;;:50;;-1:-1:-1;;;;;;33596:22:0;;;;;;:18;:22;;;;;;;;33568:50;33564:1694;;;-1:-1:-1;19945:1:0;33665:15;:26;33645:5;33564:1694;;;33736:9;;-1:-1:-1;;;;;33728:17:0;;;33736:9;;33728:17;33724:1523;;;33769:15;;;;;;;:23;;33788:4;33769:23;33766:131;;;33824:14;33835:2;33824:10;:14::i;:::-;:23;;;:52;;-1:-1:-1;;;;;;33851:25:0;;;;;;:19;:25;;;;;;;;33824:52;33816:61;;;;;;33915:14;:12;:14::i;:::-;33964:15;;33948:13;:31;34009:10;;33998:8;:21;34056:17;;34038:15;:35;34108:15;;34092:13;:31;19861:1;34142:15;:21;33724:1523;;;34209:9;;-1:-1:-1;;;;;34203:15:0;;;34209:9;;34203:15;34199:1048;;;34242:15;;;;;;;:23;;34261:4;34242:23;34239:131;;;34297:16;34308:4;34297:10;:16::i;:::-;:25;;;:52;;-1:-1:-1;;;;;;34326:23:0;;;;;;:19;:23;;;;;;;;34297:52;34289:61;;;;;;34388:14;:12;:14::i;:::-;34437:16;;34421:13;:32;34483:11;;34472:8;:22;34531:18;;34513:15;:36;34584:16;;34568:13;:32;19901:1;34619:15;:22;-1:-1:-1;;;;;34663:19:0;;-1:-1:-1;34663:19:0;;;-1:-1:-1;34663:19:0;;;;;;;;:60;;;;;34708:15;34686:18;;:37;;34663:60;34660:242;;;34763:13;;:17;;34779:1;34763:17;:::i;:::-;34747:13;:33;34814:8;;:12;;34825:1;34814:12;:::i;:::-;34803:8;:23;34865:13;;:17;;34881:1;34865:17;:::i;:::-;34849:13;:33;34660:242;34199:1048;;;-1:-1:-1;;;;;34951:19:0;;;;;;:13;:19;;;;;;;;34950:20;34942:90;;;;-1:-1:-1;;;34942:90:0;;11229:2:1;34942:90:0;;;11211:21:1;11268:2;11248:18;;;11241:30;11307:34;11287:18;;;11280:62;11378:27;11358:18;;;11351:55;11423:19;;34942:90:0;11027:421:1;34942:90:0;35054:15;;;;;;;:23;;35073:4;35054:23;35051:103;;;35110:14;35121:2;35110:10;:14::i;:::-;:23;35102:32;;;;;;35172:14;:12;:14::i;:::-;19945:1;35205:15;:26;34199:1048;35268:41;35283:4;35289:2;35293:6;35301:7;35268:14;:41::i;:::-;30061:5256;;;;29992:5325;;;:::o;2075:206::-;2161:7;2222:12;2214:6;;;;2206:29;;;;-1:-1:-1;;;2206:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2257:5:0;;;2075:206::o;27771:164::-;27813:7;27834:15;27851;27870:19;:17;:19::i;:::-;27833:56;;-1:-1:-1;27833:56:0;-1:-1:-1;27907:20:0;27833:56;;27907:11;:20::i;:::-;27900:27;;;;27771:164;:::o;1867:98::-;1925:7;1952:5;1956:1;1952;:5;:::i;1555:98::-;1613:7;1640:5;1644:1;1640;:5;:::i;26588:414::-;26647:7;26655;26663;26671;26679;26687;26708:23;26733:12;26747:18;26769:20;26781:7;26769:11;:20::i;:::-;26707:82;;;;;;26801:15;26818:23;26843:12;26859:50;26871:7;26880:4;26886:10;26898;:8;:10::i;:::-;26859:11;:50::i;:::-;26800:109;;;;-1:-1:-1;26800:109:0;;-1:-1:-1;26960:15:0;;-1:-1:-1;26977:4:0;;-1:-1:-1;26983:10:0;;-1:-1:-1;26588:414:0;;-1:-1:-1;;;;;26588:414:0:o;35323:1678::-;22039:16;:23;;-1:-1:-1;;;;22039:23:0;-1:-1:-1;;;22039:23:0;;;;35402:24:::1;35420:4;35402:9;:24::i;:::-;35376:50;;35437:25;35487:9;;35476:8;;35465;;:19;;;;:::i;:::-;:31;;;;:::i;:::-;35437:59;;35507:26;35536:16;35550:1;35536:9;;:13;;:16;;;;:::i;:::-;35507:45:::0;-1:-1:-1;35563:26:0::1;35592:39;:15:::0;35507:45;35592:19:::1;:39::i;:::-;35563:68:::0;-1:-1:-1;35670:21:0::1;35702:36;35563:68:::0;35702:16:::1;:36::i;:::-;35750:18;35771:44;:21;35797:17:::0;35771:25:::1;:44::i;:::-;35750:65;;35826:23;35852:47;35881:17;35852:24;35867:8;;35852:10;:14;;:24;;;;:::i;:::-;:28:::0;::::1;:47::i;:::-;35826:73;;35910:22;35935:47;35964:17;35935:24;35950:8;;35935:10;:14;;:24;;;;:::i;:47::-;35910:72:::0;-1:-1:-1;35993:23:0::1;36019:51;35910:72:::0;36019:31:::1;:10:::0;36034:15;36019:14:::1;:31::i;:::-;:35:::0;::::1;:51::i;:::-;36092:1;36081:8;:12:::0;;;36104:8:::1;:12:::0;;;36127:9:::1;:13:::0;;;36177:9:::1;::::0;36169:51:::1;::::0;35993:77;;-1:-1:-1;36092:1:0;;-1:-1:-1;;;;;36177:9:0;;::::1;::::0;36200:15;;36092:1;36169:51;36092:1;36169:51;36200:15;36177:9;36169:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36252:9:0::1;::::0;36244:50:::1;::::0;36151:69;;-1:-1:-1;;;;;;36252:9:0::1;::::0;36275:14;;36244:50:::1;::::0;;;36275:14;36252:9;36244:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36231:63;;;;;36305:49;36318:18;36338:15;36305:12;:49::i;:::-;36392:10;36368:21;:34;36365:629;;;36445:13;::::0;36418:24:::1;36499:43;:21;36445:13:::0;36499:25:::1;:43::i;:::-;36560:17;::::0;36473:69;;-1:-1:-1;36560:17:0;;::::1;;;:25;;36581:4;36560:25;36557:426;;;36644:5;36622:19;:15:::0;36640:1:::1;36622:19;:::i;:::-;:27;;;;:::i;:::-;36605:13;;:44;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36668:18:0::1;::::0;-1:-1:-1;36729:5:0::1;36707:19;:15:::0;36725:1:::1;36707:19;:::i;:::-;:27;;;;:::i;:::-;36689:45;::::0;:15;:45:::1;:::i;:::-;36774:9;::::0;36766:46:::1;::::0;36668:66;;-1:-1:-1;;;;;;36774:9:0::1;::::0;36668:66;;36766:46:::1;::::0;;;36668:66;36774:9;36766:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36753:59;;;;;36586:242;36557:426;;;36929:9;::::0;36921:46:::1;::::0;36874:15;;-1:-1:-1;;;;;36929:9:0::1;::::0;36874:15;;36921:46:::1;::::0;;;36874:15;36929:9;36921:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36908:59:0;;-1:-1:-1;;;36557:426:0::1;36403:591;;36365:629;-1:-1:-1::0;;22085:16:0;:24;;-1:-1:-1;;;;22085:24:0;;;-1:-1:-1;;;;;;;;35323:1678:0:o;1659:98::-;1717:7;1744:5;1748:1;1744;:5;:::i;38811:514::-;38956:16;;;38970:1;38956:16;;;;;;;;38932:21;;38956:16;;;;;;;;-1:-1:-1;;38993:11:0;;:18;;;-1:-1:-1;;;38993:18:0;;;;38932:40;;-1:-1:-1;;;;;;38993:11:0;;;;:16;;-1:-1:-1;38993:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38983:4;38988:1;38983:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;38983:28:0;;;-1:-1:-1;;;;;38983:28:0;;;;;39040:4;39022;39027:1;39022:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39022:23:0;;;:7;;;;;;;;;:23;39084:11;;39242:9;;39084:11;;;;:62;;39154:6;;39084:11;;39223:4;;39242:9;39282:24;:15;39302:3;39282:19;:24::i;:::-;39084:233;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37909:451;37956:15;;:20;:42;;;;-1:-1:-1;37980:13:0;;:18;37956:42;:64;;;;-1:-1:-1;38002:13:0;;:18;37956:64;:81;;;;-1:-1:-1;38024:8:0;;:13;37956:81;37952:94;;;37909:451::o;37952:94::-;38080:13;;;38056:21;:37;38128:13;;;38104:21;:37;38178:15;;;38152:23;:41;-1:-1:-1;38254:17:0;;;;38282:8;:12;;;38305:19;;;38335:17;37909:451::o;47357:788::-;47467:7;47462:28;;47476:14;:12;:14::i;:::-;-1:-1:-1;;;;;47505:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;47529:22:0;;;;;;:11;:22;;;;;;;;47528:23;47505:46;47501:597;;;47568:48;47590:6;47598:9;47609:6;47568:21;:48::i;:::-;47501:597;;;-1:-1:-1;;;;;47639:19:0;;;;;;:11;:19;;;;;;;;47638:20;:46;;;;-1:-1:-1;;;;;;47662:22:0;;;;;;:11;:22;;;;;;;;47638:46;47634:464;;;47701:46;47721:6;47729:9;47740:6;47701:19;:46::i;47634:464::-;-1:-1:-1;;;;;47770:19:0;;;;;;:11;:19;;;;;;;;47769:20;:47;;;;-1:-1:-1;;;;;;47794:22:0;;;;;;:11;:22;;;;;;;;47793:23;47769:47;47765:333;;;47833:44;47851:6;47859:9;47870:6;47833:17;:44::i;47765:333::-;-1:-1:-1;;;;;47899:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47922:22:0;;;;;;:11;:22;;;;;;;;47899:45;47895:203;;;47961:48;47983:6;47991:9;48002:6;47961:21;:48::i;47895:203::-;48042:44;48060:6;48068:9;48079:6;48042:17;:44::i;:::-;48113:7;48108:29;;48122:15;38426:21;;38410:13;:37;38469:16;;38458:8;:27;38514:23;;38496:15;:41;38564:21;;38548:13;:37;38366:227;27941:556;28039:7;;27992;;;;-1:-1:-1;;;27992:7:0;28093:289;28117:9;:16;28113:20;;28093:289;;;28183:7;28159;:21;28167:9;28177:1;28167:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28167:12:0;28159:21;;;;;;;;;;;;;:31;;:66;;;28218:7;28194;:21;28202:9;28212:1;28202:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28202:12:0;28194:21;;;;;;;;;;;;;:31;28159:66;28155:97;;;-1:-1:-1;;28235:7:0;;;-1:-1:-1;;;19485:13:0;-1:-1:-1;27941:556:0;-1:-1:-1;;27941:556:0:o;28155:97::-;28277:34;28289:7;:21;28297:9;28307:1;28297:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28297:12:0;28289:21;;;;;;;;;;;;;28277:7;;:11;:34::i;:::-;28267:44;;28336:34;28348:7;:21;28356:9;28366:1;28356:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28356:12:0;28348:21;;;;;;;;;;;;;28336:7;;:11;:34::i;:::-;28326:44;-1:-1:-1;28135:3:0;;;;:::i;:::-;;;;28093:289;;;-1:-1:-1;28406:7:0;;:20;;-1:-1:-1;;;28406:11:0;:20::i;:::-;28396:7;:30;28392:61;;;-1:-1:-1;;28436:7:0;;;-1:-1:-1;;;19485:13:0;-1:-1:-1;27941:556:0;-1:-1:-1;27941:556:0:o;28392:61::-;28472:7;;28481;;-1:-1:-1;27941:556:0;-1:-1:-1;27941:556:0:o;27008:327::-;27067:7;27075;27083;27103:12;27118:24;27134:7;27118:15;:24::i;:::-;27103:39;;27153:18;27174:30;27196:7;27174:21;:30::i;:::-;27153:51;-1:-1:-1;27215:23:0;27241:33;27153:51;27241:17;:7;27253:4;27241:11;:17::i;:33::-;27215:59;27310:4;;-1:-1:-1;27316:10:0;;-1:-1:-1;27008:327:0;;-1:-1:-1;;;27008:327:0:o;27341:424::-;27453:7;;;;27507:24;:7;27519:11;27507;:24::i;:::-;27489:42;-1:-1:-1;27542:12:0;27557:21;:4;27566:11;27557:8;:21::i;:::-;27542:36;-1:-1:-1;27589:18:0;27610:27;:10;27625:11;27610:14;:27::i;:::-;27589:48;-1:-1:-1;27648:23:0;27674:33;27589:48;27674:17;:7;27686:4;27674:11;:17::i;:33::-;27726:7;;;;-1:-1:-1;27752:4:0;;-1:-1:-1;27341:424:0;;-1:-1:-1;;;;;;;27341:424:0:o;37007:487::-;37097:16;;;37111:1;37097:16;;;;;;;;37073:21;;37097:16;;;;;;;;;;-1:-1:-1;37097:16:0;37073:40;;37142:4;37124;37129:1;37124:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37124:23:0;;;:7;;;;;;;;;;:23;;;;37168:11;;:18;;;-1:-1:-1;;;37168:18:0;;;;:11;;;;;:16;;:18;;;;;37124:7;;37168:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37158:4;37163:1;37158:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37158:28:0;;;:7;;;;;;;;;:28;37229:11;;37197:58;;37214:4;;37229:11;37243;37197:8;:58::i;:::-;37266:11;;:220;;-1:-1:-1;;;37266:220:0;;-1:-1:-1;;;;;37266:11:0;;;;:62;;:220;;37343:11;;37266;;37413:4;;37440;;37460:15;;37266:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37062:432;37007:487;:::o;1763:98::-;1821:7;1848:5;1852:1;1848;:5;:::i;37500:403::-;37613:11;;37581:58;;37598:4;;-1:-1:-1;;;;;37613:11:0;37627;37581:8;:58::i;:::-;37650:11;;37850:4;;37650:245;;-1:-1:-1;;;37650:245:0;;37718:4;37650:245;;;4908:34:1;4958:18;;;4951:34;;;37650:11:0;5001:18:1;;;4994:34;;;5044:18;;;5037:34;-1:-1:-1;;;;;37850:4:0;;;5087:19:1;;;5080:44;37869:15:0;5140:19:1;;;5133:35;37650:11:0;;;:27;;37685:9;;4842:19:1;;37650:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37500:403;;:::o;49414:650::-;49529:15;49559:23;49597:12;49624:23;49662:12;49689:18;49721:19;49732:7;49721:10;:19::i;:::-;-1:-1:-1;;;;;49769:15:0;;;;;;:7;:15;;;;;;49514:226;;-1:-1:-1;49514:226:0;;-1:-1:-1;49514:226:0;;-1:-1:-1;49514:226:0;-1:-1:-1;49514:226:0;-1:-1:-1;49514:226:0;-1:-1:-1;49769:28:0;;49789:7;49769:19;:28::i;:::-;-1:-1:-1;;;;;49751:15:0;;;;;;:7;:15;;;;;;;;:46;;;;49826:7;:15;;;;:28;;49846:7;49826:19;:28::i;:::-;-1:-1:-1;;;;;49808:15:0;;;;;;;:7;:15;;;;;;:46;;;;49886:18;;;;;;;:39;;49909:15;49886:22;:39::i;:::-;-1:-1:-1;;;;;49865:18:0;;;;;;:7;:18;;;;;:60;49936:26;49951:10;49936:14;:26::i;:::-;49973:23;49985:4;49991;49973:11;:23::i;:::-;50029:9;-1:-1:-1;;;;;50012:44:0;50021:6;-1:-1:-1;;;;;50012:44:0;;50040:15;50012:44;;;;15214:25:1;;15202:2;15187:18;;15068:177;50012:44:0;;;;;;;;49503:561;;;;;;49414:650;;;:::o;48746:662::-;48859:15;48889:23;48927:12;48954:23;48992:12;49019:18;49051:19;49062:7;49051:10;:19::i;:::-;-1:-1:-1;;;;;49099:15:0;;;;;;:7;:15;;;;;;48844:226;;-1:-1:-1;48844:226:0;;-1:-1:-1;48844:226:0;;-1:-1:-1;48844:226:0;-1:-1:-1;48844:226:0;-1:-1:-1;48844:226:0;-1:-1:-1;49099:28:0;;48844:226;49099:19;:28::i;:::-;-1:-1:-1;;;;;49081:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;49159:18;;;;;:7;:18;;;;;:39;;49182:15;49159:22;:39::i;:::-;-1:-1:-1;;;;;49138:18:0;;;;;;:7;:18;;;;;;;;:60;;;;49230:7;:18;;;;:39;;49253:15;49230:22;:39::i;48151:589::-;48262:15;48292:23;48330:12;48357:23;48395:12;48422:18;48454:19;48465:7;48454:10;:19::i;:::-;-1:-1:-1;;;;;48502:15:0;;;;;;:7;:15;;;;;;48247:226;;-1:-1:-1;48247:226:0;;-1:-1:-1;48247:226:0;;-1:-1:-1;48247:226:0;-1:-1:-1;48247:226:0;-1:-1:-1;48247:226:0;-1:-1:-1;48502:28:0;;48247:226;48502:19;:28::i;50070:721::-;50185:15;50215:23;50253:12;50280:23;50318:12;50345:18;50377:19;50388:7;50377:10;:19::i;:::-;-1:-1:-1;;;;;50425:15:0;;;;;;:7;:15;;;;;;50170:226;;-1:-1:-1;50170:226:0;;-1:-1:-1;50170:226:0;;-1:-1:-1;50170:226:0;-1:-1:-1;50170:226:0;-1:-1:-1;50170:226:0;-1:-1:-1;50425:28:0;;50445:7;50425:19;:28::i;:::-;-1:-1:-1;;;;;50407:15:0;;;;;;:7;:15;;;;;;;;:46;;;;50482:7;:15;;;;:28;;50502:7;50482:19;:28::i;29342:138::-;29406:7;29433:39;29466:5;29433:28;29445:15;;29433:7;:11;;:28;;;;:::i;29486:169::-;29556:7;29583:64;29641:5;29583:53;29627:8;;29611:13;;29595;;:29;;;;:::i;:::-;:40;;;;:::i;:::-;29583:7;;:11;:53::i;28503:833::-;19861:1;28569:15;;:22;28566:468;;;28650:7;;28632:15;;28619:28;;:10;:28;:::i;:::-;:38;;;;:::i;:::-;28607:8;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;28710:7:0;;28697:10;;28684:23;;:10;:23;:::i;:::-;:33;;;;:::i;:::-;28672:8;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;28776:7:0;;28758:15;;28745:28;;:10;:28;:::i;:::-;:38;;;;:::i;:::-;28732:9;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;28566:468:0;;-1:-1:-1;28566:468:0;;19901:1;28804:15;;:23;28801:233;;;28887:7;;28868:16;;28855:29;;:10;:29;:::i;:::-;:39;;;;:::i;:::-;28843:8;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;28948:7:0;;28934:11;;28921:24;;:10;:24;:::i;:::-;:34;;;;:::i;:::-;28909:8;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;29015:7:0;;28996:16;;28983:29;;:10;:29;:::i;:::-;:39;;;;:::i;:::-;28970:9;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;28801:233:0;29044:19;29066:10;:8;:10::i;:::-;29044:32;-1:-1:-1;29087:18:0;29108:27;:10;29044:32;29108:14;:27::i;:::-;29187:4;29171:22;;;;:7;:22;;;;;;29087:48;;-1:-1:-1;29171:38:0;;29087:48;29171:26;:38::i;:::-;29162:4;29146:22;;;;:7;:22;;;;;;;;:63;;;;29224:11;:26;;;;;;29220:108;;;29306:4;29290:22;;;;:7;:22;;;;;;:38;;29317:10;29290:26;:38::i;:::-;29281:4;29265:22;;;;:7;:22;;;;;:63;29220:108;28555:781;;28503:833;:::o;26435:147::-;26513:7;;:17;;26525:4;26513:11;:17::i;:::-;26503:7;:27;26554:10;;:20;;26569:4;26554:14;:20::i;:::-;26541:10;:33;-1:-1:-1;;26435:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:247;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:184::-;2301:6;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;-1:-1:-1;2393:16:1;;2231:184;-1:-1:-1;2231:184:1:o;2420:248::-;2485:6;2493;2546:2;2534:9;2525:7;2521:23;2517:32;2514:52;;;2562:1;2559;2552:12;2514:52;2598:9;2585:23;2575:33;;2627:35;2658:2;2647:9;2643:18;2627:35;:::i;:::-;2617:45;;2420:248;;;;;:::o;2673:306::-;2761:6;2769;2777;2830:2;2818:9;2809:7;2805:23;2801:32;2798:52;;;2846:1;2843;2836:12;2798:52;2875:9;2869:16;2859:26;;2925:2;2914:9;2910:18;2904:25;2894:35;;2969:2;2958:9;2954:18;2948:25;2938:35;;2673:306;;;;;:::o;2984:385::-;3070:6;3078;3086;3094;3147:3;3135:9;3126:7;3122:23;3118:33;3115:53;;;3164:1;3161;3154:12;3115:53;-1:-1:-1;;3187:23:1;;;3257:2;3242:18;;3229:32;;-1:-1:-1;3308:2:1;3293:18;;3280:32;;3359:2;3344:18;3331:32;;-1:-1:-1;2984:385:1;-1:-1:-1;2984:385:1:o;3374:461::-;3427:3;3465:5;3459:12;3492:6;3487:3;3480:19;3518:4;3547:2;3542:3;3538:12;3531:19;;3584:2;3577:5;3573:14;3605:1;3615:195;3629:6;3626:1;3623:13;3615:195;;;3694:13;;-1:-1:-1;;;;;3690:39:1;3678:52;;3750:12;;;;3785:15;;;;3726:1;3644:9;3615:195;;;-1:-1:-1;3826:3:1;;3374:461;-1:-1:-1;;;;;3374:461:1:o;5606:518::-;5885:6;5874:9;5867:25;5928:3;5923:2;5912:9;5908:18;5901:31;5848:4;5949:57;6001:3;5990:9;5986:19;5978:6;5949:57;:::i;:::-;-1:-1:-1;;;;;6042:32:1;;;;6037:2;6022:18;;6015:60;-1:-1:-1;6106:2:1;6091:18;6084:34;5941:65;5606:518;-1:-1:-1;;5606:518:1:o;6129:597::-;6241:4;6270:2;6299;6288:9;6281:21;6331:6;6325:13;6374:6;6369:2;6358:9;6354:18;6347:34;6399:1;6409:140;6423:6;6420:1;6417:13;6409:140;;;6518:14;;;6514:23;;6508:30;6484:17;;;6503:2;6480:26;6473:66;6438:10;;6409:140;;;6567:6;6564:1;6561:13;6558:91;;;6637:1;6632:2;6623:6;6612:9;6608:22;6604:31;6597:42;6558:91;-1:-1:-1;6710:2:1;6689:15;-1:-1:-1;;6685:29:1;6670:45;;;;6717:2;6666:54;;6129:597;-1:-1:-1;;;6129:597:1:o;12357:401::-;12559:2;12541:21;;;12598:2;12578:18;;;12571:30;12637:34;12632:2;12617:18;;12610:62;-1:-1:-1;;;12703:2:1;12688:18;;12681:35;12748:3;12733:19;;12357:401::o;15250:582::-;15549:6;15538:9;15531:25;15592:6;15587:2;15576:9;15572:18;15565:34;15635:3;15630:2;15619:9;15615:18;15608:31;15512:4;15656:57;15708:3;15697:9;15693:19;15685:6;15656:57;:::i;:::-;-1:-1:-1;;;;;15749:32:1;;;;15744:2;15729:18;;15722:60;-1:-1:-1;15813:3:1;15798:19;15791:35;15648:65;15250:582;-1:-1:-1;;;15250:582:1:o;16026:128::-;16066:3;16097:1;16093:6;16090:1;16087:13;16084:39;;;16103:18;;:::i;:::-;-1:-1:-1;16139:9:1;;16026:128::o;16159:217::-;16199:1;16225;16215:132;;16269:10;16264:3;16260:20;16257:1;16250:31;16304:4;16301:1;16294:15;16332:4;16329:1;16322:15;16215:132;-1:-1:-1;16361:9:1;;16159:217::o;16381:168::-;16421:7;16487:1;16483;16479:6;16475:14;16472:1;16469:21;16464:1;16457:9;16450:17;16446:45;16443:71;;;16494:18;;:::i;:::-;-1:-1:-1;16534:9:1;;16381:168::o;16554:125::-;16594:4;16622:1;16619;16616:8;16613:34;;;16627:18;;:::i;:::-;-1:-1:-1;16664:9:1;;16554:125::o;16684:135::-;16723:3;-1:-1:-1;;16744:17:1;;16741:43;;;16764:18;;:::i;:::-;-1:-1:-1;16811:1:1;16800:13;;16684:135::o;16824:127::-;16885:10;16880:3;16876:20;16873:1;16866:31;16916:4;16913:1;16906:15;16940:4;16937:1;16930:15;16956:127;17017:10;17012:3;17008:20;17005:1;16998:31;17048:4;17045:1;17038:15;17072:4;17069:1;17062:15;17220:131;-1:-1:-1;;;;;17295:31:1;;17285:42;;17275:70;;17341:1;17338;17331:12;17275:70;17220:131;:::o

Swarm Source

ipfs://f4382909135980c2dc131d1601b948eedc8a90f1f1f75f269096325ff29731ea

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.