ETH Price: $2,292.92 (-5.31%)

Token

ROX Token (ROX)
 

Overview

Max Total Supply

100,000,000,000 ROX

Holders

147

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
379,845,812.418871839 ROX

Value
$0.00
0xb88de192f50da5720bb928b12ecc88d8fa4226db
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ROX

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-24
*/

pragma solidity ^0.8.9;
// SPDX-License-Identifier: Unlicensed

abstract contract Withdrawable {
    address internal _marketingAddress;

    constructor(address withdrawAddress__) {
        _marketingAddress = withdrawAddress__;
    }

    modifier onlyWithdrawer() {
        require(msg.sender == _marketingAddress);
        _;
    }

    function withdraw() external onlyWithdrawer {
        _withdraw();
    }

    function _withdraw() internal {
        payable(_marketingAddress).transfer(address(this).balance);
    }

    function setWithdrawAddress(address newWithdrawAddress)
        external
        onlyWithdrawer
    {
        _marketingAddress = newWithdrawAddress;
    }

    function withdrawAddress() external view returns (address) {
        return _marketingAddress;
    }
}


abstract contract Ownable {
    address _owner;

    modifier onlyOwner() {
        require(msg.sender == _owner);
        _;
    }

    constructor() {
        _owner = msg.sender;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        _owner = newOwner;
    }

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

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}


contract DoubleSwapped {
    bool internal _inSwap;

    modifier lockTheSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    function _swapTokensForEth(
        uint256 tokenAmount,
        IUniswapV2Router02 _uniswapV2Router
    ) internal lockTheSwap {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        // make the swap
        //console.log("doubleSwap ", tokenAmount);
        _uniswapV2Router.swapExactTokensForETH(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
    }

    function _swapTokensForEthOnTransfer(
        uint256 transferAmount,
        uint256 swapCount,
        IUniswapV2Router02 _uniswapV2Router
    ) internal {
        if (swapCount == 0) return;
        uint256 maxSwapCount = 2 * transferAmount;
        if (swapCount > maxSwapCount) swapCount = maxSwapCount;
        _swapTokensForEth(swapCount, _uniswapV2Router);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}


abstract contract ERC20 is IERC20 {
    uint256 internal _totalSupply = 1e20;
    uint8 constant _decimals = 9;
    string _name;
    string _symbol;
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 internal constant INFINITY_ALLOWANCE = 2**256 - 1;

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

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

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

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) external virtual override view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount);
        unchecked {
            _balances[from] = senderBalance - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }

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

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount);
        if (currentAllowance == INFINITY_ALLOWANCE) return true;
        unchecked {
            _approve(sender, msg.sender, currentAllowance - amount);
        }

        return true;
    }

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount);
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }
}

abstract contract MaxWalletDynamic {
    uint256 startMaxWallet;
    uint256 startTime; // last increment time
    uint256 constant startMaxBuyPercentil = 5; // maximum buy on start 1000=100%
    uint256 constant maxBuyIncrementMinutesTimer = 2; // increment maxbuy minutes
    uint256 constant maxBuyIncrementPercentil = 3; // increment maxbyu percentil 1000=100%
    uint256 constant maxIncrements = 1000; // maximum time incrementations
    uint256 maxBuyIncrementValue; // value for increment maxBuy

    function startMaxWalletDynamic(uint256 totalSupply) internal {
        startTime = block.timestamp;
        startMaxWallet = (totalSupply * startMaxBuyPercentil) / 1000;
        maxBuyIncrementValue = (totalSupply * maxBuyIncrementPercentil) / 1000;
    }

    function checkMaxWallet(uint256 walletSize) internal view {
        require(walletSize <= getMaxWallet(), "max wallet limit");
    }

    function getMaxWallet() public view returns (uint256) {
        uint256 incrementCount = (block.timestamp - startTime) /
            (maxBuyIncrementMinutesTimer * 1 minutes);
        if (incrementCount >= maxIncrements) incrementCount = maxIncrements;
        return startMaxWallet + maxBuyIncrementValue * incrementCount;
    }

    function _setStartMaxWallet(uint256 startMaxWallet_) internal {
        startMaxWallet = startMaxWallet_;
    }
}

abstract contract TradableErc20 is ERC20, DoubleSwapped, Ownable, Withdrawable {
    IUniswapV2Router02 internal constant _uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapPair;
    bool public buyEnable = true;
    address private ADDR_BURN =
        0x000000000000000000000000000000000000dEaD;
    address public secondaryContractAddress;
    mapping(address => bool) _isExcludedFromFee;
    uint256 public buyFeePpm = 70; // fee in 1/1000
    uint256 public sellFeePpm = 75; // fee in 1/1000
    uint256 public thisShare = 100; // in 1/1000
    uint256 public extraShare = 0; // in 1/1000
    uint256 maxWalletStart = 5e16;
    uint256 addMaxWalletPerMinute = 5e16;
    uint256 tradingStartTime;
    

    constructor(string memory name_, string memory symbol_)
        ERC20(name_, symbol_)
        Withdrawable(0x1e35c70aA6a7802f4c7F69B450602486f2f83Ace)
    {
        _isExcludedFromFee[address(0)] = true;
        _isExcludedFromFee[ADDR_BURN] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
        ADDR_BURN = address(this);
    }

    receive() external payable {}

    function maxWallet() public view returns (uint256) {
        if (tradingStartTime == 0) return _totalSupply;
        uint256 res = maxWalletStart +
            ((block.timestamp - tradingStartTime) * addMaxWalletPerMinute) /
            (1 minutes);
        if (res > _totalSupply) return _totalSupply;
        return res;
    }

    function initiateLiquidity() public onlyOwner {
        require(uniswapPair == address(0));
        address pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        uint256 initialLiquidity = getSupplyForMakeLiquidity();
        _balances[address(this)] = initialLiquidity;
        emit Transfer(address(0), address(this), initialLiquidity);

        _balances[msg.sender] = 1e19;
        emit Transfer(address(0), msg.sender, initialLiquidity);

        _allowances[address(this)][
            address(_uniswapV2Router)
        ] = INFINITY_ALLOWANCE;
        _isExcludedFromFee[pair] = true;
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            initialLiquidity,
            0,
            0,
            msg.sender,
            block.timestamp
        );

        uniswapPair = pair;
        tradingStartTime = block.timestamp;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(_balances[from] >= amount, "not enough token for transfer");
        require(to != address(0), "incorrect address");

        // buy
        if (from == uniswapPair && !_isExcludedFromFee[to]) {
            require(buyEnable, "trading disabled");
            // get taxes
            amount = _getFeeBuy(from, to, amount);
            require(
                _balances[to] + amount <= maxWallet(),
                "max wallet constraint"
            );
        }
        // sell
        else if (
            !_inSwap &&
            uniswapPair != address(0) &&
            to == uniswapPair &&
            !_isExcludedFromFee[from]
        ) {
            // fee
            amount = _getFeeSell(from, amount);
            // swap tokens
            _swapTokensForEthOnTransfer(
                amount,
                _balances[address(this)],
                _uniswapV2Router
            );
        }

        // transfer
        super._transfer(from, to, amount);
    }

    function getFeeBuy(address account, uint256 amount)
        public view
        returns (uint256)
    {
        return (amount * buyFeePpm) / 1000;
    }

    function getFeeSell(address account, uint256 amount)
        public view
        returns (uint256)
    {
        return (amount * sellFeePpm) / 1000;
    }

    function updateBuyFee(uint256 newBuyFeePpm) external onlyWithdrawer {
        require(newBuyFeePpm <= 200);
        buyFeePpm = newBuyFeePpm;
    }

    function updateSellFee(uint256 newSellFeePpm) external onlyWithdrawer {
        require(newSellFeePpm <= 200);
        sellFeePpm = newSellFeePpm;
    }

    function setSecondaryContractAddress(address newExtraContractAddress)
        external
        onlyWithdrawer
    {
        secondaryContractAddress = newExtraContractAddress;
    }

    function removeExtraContractAddress() external onlyWithdrawer {
        secondaryContractAddress = address(0);
    }

    function setShare(uint256 thisSharePpm, uint256 stackingSharePpm)
        external
        onlyWithdrawer
    {
        thisShare = thisSharePpm;
        extraShare = stackingSharePpm;
        require(thisShare + extraShare <= 1000);
    }

    function _getFeeBuy(
        address pair,
        address to,
        uint256 amount
    ) private returns (uint256) {
        return _arrangeFee(pair, amount, getFeeBuy(to, amount));
    }

    function _getFeeSell(address from, uint256 amount)
        private
        returns (uint256)
    {
        return _arrangeFee(from, amount, getFeeSell(from, amount));
    }

    function _arrangeFee(
        address from,
        uint256 amount,
        uint256 fee
    ) private returns (uint256) {
        uint256 thisFee = (fee * thisShare) / 1000;
        uint256 stacking = 0;
        if (secondaryContractAddress != address(0))
            stacking = (fee * extraShare) / 1000;
        uint256 burn = 0;
        if (thisShare + extraShare < 1000) burn = fee - thisFee - stacking;

        amount -= fee;
        _balances[from] -= fee;

        if (thisFee > 0) {
            _balances[address(this)] += thisFee;
            emit Transfer(from, address(this), thisFee);
        }
        if (stacking > 0) {
            _balances[secondaryContractAddress] += stacking;
            emit Transfer(from, secondaryContractAddress, stacking);
        }
        if (burn > 0) {
            _balances[ADDR_BURN] += burn;
            emit Transfer(from, ADDR_BURN, burn);
        }

        return amount;
    }

    function setExcludeFromFee(address[] memory accounts, bool value)
        external
        onlyWithdrawer
    {
        for (uint256 i = 0; i < accounts.length; ++i) {
            _isExcludedFromFee[accounts[i]] = value;
        }
    }

    function setEnableBuy(bool value) external onlyOwner {
        buyEnable = value;
    }

    function getSupplyForMakeLiquidity() internal virtual returns (uint256);
}

contract ROX is TradableErc20 {
    constructor() TradableErc20("ROX Token", "ROX") {}

    function getSupplyForMakeLiquidity()
        internal
        view
        override
        returns (uint256)
    {
        return _totalSupply - 1e19;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":[],"name":"buyEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeePpm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"extraShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initiateLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeExtraContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondaryContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeePpm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setEnableBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newExtraContractAddress","type":"address"}],"name":"setSecondaryContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thisSharePpm","type":"uint256"},{"internalType":"uint256","name":"stackingSharePpm","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWithdrawAddress","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thisShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFeePpm","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellFeePpm","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405268056bc75e2d631000006000556001600760146101000a81548160ff02191690831515021790555061dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506046600b55604b600c556064600d556000600e5566b1a2bc2ec50000600f5566b1a2bc2ec50000601055348015620000a657600080fd5b506040518060400160405280600981526020017f524f5820546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524f580000000000000000000000000000000000000000000000000000000000815250731e35c70aa6a7802f4c7f69b450602486f2f83ace8282816001908051906020019062000142929190620003ac565b5080600290805190602001906200015b929190620003ac565b50505033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555030600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620004c1565b828054620003ba906200048b565b90600052602060002090601f016020900481019282620003de57600085556200042a565b82601f10620003f957805160ff19168380011785556200042a565b828001600101855582156200042a579182015b82811115620004295782518255916020019190600101906200040c565b5b5090506200043991906200043d565b5090565b5b80821115620004585760008160009055506001016200043e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004a457607f821691505b60208210811415620004bb57620004ba6200045c565b5b50919050565b61319380620004d16000396000f3fe6080604052600436106101e75760003560e01c806347fd4ab311610102578063c4b44a4011610095578063f1153e6411610064578063f1153e64146106c9578063f2fde38b146106f4578063f8b45b051461071d578063f95fa9cf14610748576101ee565b8063c4b44a401461060b578063c816841b14610636578063d57038e114610661578063dd62ed3e1461068c576101ee565b80638da5cb5b116100d15780638da5cb5b1461054d57806395d89b41146105785780639cf5c9a4146105a3578063a9059cbb146105ce576101ee565b806347fd4ab3146104955780636bf8e9cc146104be5780636c90b57f146104e757806370a0823114610510576101ee565b80631d933a4a1161017a5780633ab1a494116101495780633ab1a494146104015780633ccfd60b1461042a5780633d389faf14610441578063467abe0a1461046c576101ee565b80631d933a4a1461035957806323b872dd146103825780632b96ddbe146103bf578063313ce567146103d6576101ee565b806318160ddd116101b657806318160ddd146102af5780631a795197146102da5780631af1c560146103175780631d55009a1461032e576101ee565b806306fdde03146101f3578063095ea7b31461021e5780630dbbb7121461025b5780631581b60014610284576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610785565b60405161021591906125db565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906126a5565b610817565b6040516102529190612700565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061271b565b61082e565b005b34801561029057600080fd5b506102996108cc565b6040516102a69190612757565b60405180910390f35b3480156102bb57600080fd5b506102c46108f6565b6040516102d19190612781565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906126a5565b6108ff565b60405161030e9190612781565b60405180910390f35b34801561032357600080fd5b5061032c610924565b005b34801561033a57600080fd5b50610343610efb565b6040516103509190612781565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061279c565b610f01565b005b34801561038e57600080fd5b506103a960048036038101906103a491906127c9565b610f73565b6040516103b69190612700565b60405180910390f35b3480156103cb57600080fd5b506103d461105a565b005b3480156103e257600080fd5b506103eb6110f8565b6040516103f89190612838565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061271b565b611101565b005b34801561043657600080fd5b5061043f61119f565b005b34801561044d57600080fd5b50610456611203565b6040516104639190612700565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e919061279c565b611216565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061287f565b611288565b005b3480156104ca57600080fd5b506104e560048036038101906104e091906128ac565b6112ff565b005b3480156104f357600080fd5b5061050e60048036038101906105099190612a34565b611389565b005b34801561051c57600080fd5b506105376004803603810190610532919061271b565b611476565b6040516105449190612781565b60405180910390f35b34801561055957600080fd5b506105626114bf565b60405161056f9190612757565b60405180910390f35b34801561058457600080fd5b5061058d6114e9565b60405161059a91906125db565b60405180910390f35b3480156105af57600080fd5b506105b861157b565b6040516105c59190612757565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f091906126a5565b6115a1565b6040516106029190612700565b60405180910390f35b34801561061757600080fd5b506106206115b8565b60405161062d9190612781565b60405180910390f35b34801561064257600080fd5b5061064b6115be565b6040516106589190612757565b60405180910390f35b34801561066d57600080fd5b506106766115e4565b6040516106839190612781565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612a90565b6115ea565b6040516106c09190612781565b60405180910390f35b3480156106d557600080fd5b506106de611671565b6040516106eb9190612781565b60405180910390f35b34801561070057600080fd5b5061071b6004803603810190610716919061271b565b611677565b005b34801561072957600080fd5b50610732611715565b60405161073f9190612781565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a91906126a5565b611780565b60405161077c9190612781565b60405180910390f35b60606001805461079490612aff565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090612aff565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050505050905090565b60006108243384846117a5565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088857600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905090565b60006103e8600c54836109129190612b60565b61091c9190612be9565b905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109d957600080fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3557600080fd5b505afa158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190612c2f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae357600080fd5b505afa158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b9190612c2f565b6040518363ffffffff1660e01b8152600401610b38929190612c5c565b602060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190612c2f565b90506000610b96611890565b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c3a9190612781565b60405180910390a3678ac7230489e80000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cec9190612781565b60405180910390a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947308460008033426040518863ffffffff1660e01b8152600401610e5a96959493929190612cca565b6060604051808303818588803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eac9190612d40565b50505081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426011819055505050565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5b57600080fd5b60c8811115610f6957600080fd5b80600c8190555050565b6000610f808484846118ad565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561100e57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415611040576001915050611053565b61104d85338584036117a5565b60019150505b9392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b457600080fd5b6000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006009905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461115b57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f957600080fd5b611201611cdc565b565b600760149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461127057600080fd5b60c881111561127e57600080fd5b80600b8190555050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e257600080fd5b80600760146101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461135957600080fd5b81600d8190555080600e819055506103e8600e54600d5461137a9190612d93565b111561138557600080fd5b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e357600080fd5b60005b82518110156114715781600a600085848151811061140757611406612de9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061146a90612e18565b90506113e6565b505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114f890612aff565b80601f016020809104026020016040519081016040528092919081815260200182805461152490612aff565b80156115715780601f1061154657610100808354040283529160200191611571565b820191906000526020600020905b81548152906001019060200180831161155457829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115ae3384846118ad565b6001905092915050565b600c5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d157600080fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080601154141561172b57600054905061177d565b6000603c601054601154426117409190612e61565b61174a9190612b60565b6117549190612be9565b600f546117619190612d93565b90506000548111156117785760005491505061177d565b809150505b90565b60006103e8600b54836117939190612b60565b61179d9190612be9565b905092915050565b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118839190612781565b60405180910390a3505050565b6000678ac7230489e800006000546118a89190612e61565b905090565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690612ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690612f4d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a465750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b4057600760149054906101000a900460ff16611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190612fb9565b60405180910390fd5b611aa5838383611d47565b9050611aaf611715565b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa9190612d93565b1115611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613025565b60405180910390fd5b611ccc565b600560009054906101000a900460ff16158015611bac5750600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8015611c055750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611c5b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ccb57611c6a8382611d66565b9050611cca81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054737a250d5630b4cf539739df2c5dacb4c659f2488d611d84565b5b5b611cd7838383611dc0565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d44573d6000803e3d6000fd5b50565b6000611d5d8483611d588686611780565b611f18565b90509392505050565b6000611d7c8383611d7786866108ff565b611f18565b905092915050565b6000821415611d9257611dbb565b6000836002611da19190612b60565b905080831115611daf578092505b611db9838361232a565b505b505050565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e1157600080fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ea69190612d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f0a9190612781565b60405180910390a350505050565b6000806103e8600d5484611f2c9190612b60565b611f369190612be9565b905060008073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fad576103e8600e5485611fa09190612b60565b611faa9190612be9565b90505b60006103e8600e54600d54611fc29190612d93565b1015611fe257818386611fd59190612e61565b611fdf9190612e61565b90505b8486611fee9190612e61565b955084600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203f9190612e61565b92505081905550600083111561210b5782600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209e9190612d93565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121029190612781565b60405180910390a35b6000821115612214578160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121859190612d93565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161220b9190612781565b60405180910390a35b600081111561231d578060036000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228e9190612d93565b92505081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123149190612781565b60405180910390a35b8593505050509392505050565b6001600560006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612362576123616128f1565b5b6040519080825280602002602001820160405280156123905781602001602082028036833780820191505090505b50905030816000815181106123a8576123a7612de9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561242857600080fd5b505afa15801561243c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124609190612c2f565b8160018151811061247457612473612de9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318cbafe58460008430426040518663ffffffff1660e01b81526004016124f0959493929190613103565b600060405180830381600087803b15801561250a57600080fd5b505af115801561251e573d6000803e3d6000fd5b50505050506000600560006101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561257c578082015181840152602081019050612561565b8381111561258b576000848401525b50505050565b6000601f19601f8301169050919050565b60006125ad82612542565b6125b7818561254d565b93506125c781856020860161255e565b6125d081612591565b840191505092915050565b600060208201905081810360008301526125f581846125a2565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061263c82612611565b9050919050565b61264c81612631565b811461265757600080fd5b50565b60008135905061266981612643565b92915050565b6000819050919050565b6126828161266f565b811461268d57600080fd5b50565b60008135905061269f81612679565b92915050565b600080604083850312156126bc576126bb612607565b5b60006126ca8582860161265a565b92505060206126db85828601612690565b9150509250929050565b60008115159050919050565b6126fa816126e5565b82525050565b600060208201905061271560008301846126f1565b92915050565b60006020828403121561273157612730612607565b5b600061273f8482850161265a565b91505092915050565b61275181612631565b82525050565b600060208201905061276c6000830184612748565b92915050565b61277b8161266f565b82525050565b60006020820190506127966000830184612772565b92915050565b6000602082840312156127b2576127b1612607565b5b60006127c084828501612690565b91505092915050565b6000806000606084860312156127e2576127e1612607565b5b60006127f08682870161265a565b93505060206128018682870161265a565b925050604061281286828701612690565b9150509250925092565b600060ff82169050919050565b6128328161281c565b82525050565b600060208201905061284d6000830184612829565b92915050565b61285c816126e5565b811461286757600080fd5b50565b60008135905061287981612853565b92915050565b60006020828403121561289557612894612607565b5b60006128a38482850161286a565b91505092915050565b600080604083850312156128c3576128c2612607565b5b60006128d185828601612690565b92505060206128e285828601612690565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61292982612591565b810181811067ffffffffffffffff82111715612948576129476128f1565b5b80604052505050565b600061295b6125fd565b90506129678282612920565b919050565b600067ffffffffffffffff821115612987576129866128f1565b5b602082029050602081019050919050565b600080fd5b60006129b06129ab8461296c565b612951565b905080838252602082019050602084028301858111156129d3576129d2612998565b5b835b818110156129fc57806129e8888261265a565b8452602084019350506020810190506129d5565b5050509392505050565b600082601f830112612a1b57612a1a6128ec565b5b8135612a2b84826020860161299d565b91505092915050565b60008060408385031215612a4b57612a4a612607565b5b600083013567ffffffffffffffff811115612a6957612a6861260c565b5b612a7585828601612a06565b9250506020612a868582860161286a565b9150509250929050565b60008060408385031215612aa757612aa6612607565b5b6000612ab58582860161265a565b9250506020612ac68582860161265a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b1757607f821691505b60208210811415612b2b57612b2a612ad0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b6b8261266f565b9150612b768361266f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612baf57612bae612b31565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bf48261266f565b9150612bff8361266f565b925082612c0f57612c0e612bba565b5b828204905092915050565b600081519050612c2981612643565b92915050565b600060208284031215612c4557612c44612607565b5b6000612c5384828501612c1a565b91505092915050565b6000604082019050612c716000830185612748565b612c7e6020830184612748565b9392505050565b6000819050919050565b6000819050919050565b6000612cb4612caf612caa84612c85565b612c8f565b61266f565b9050919050565b612cc481612c99565b82525050565b600060c082019050612cdf6000830189612748565b612cec6020830188612772565b612cf96040830187612cbb565b612d066060830186612cbb565b612d136080830185612748565b612d2060a0830184612772565b979650505050505050565b600081519050612d3a81612679565b92915050565b600080600060608486031215612d5957612d58612607565b5b6000612d6786828701612d2b565b9350506020612d7886828701612d2b565b9250506040612d8986828701612d2b565b9150509250925092565b6000612d9e8261266f565b9150612da98361266f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dde57612ddd612b31565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e238261266f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e5657612e55612b31565b5b600182019050919050565b6000612e6c8261266f565b9150612e778361266f565b925082821015612e8a57612e89612b31565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e20666f72207472616e73666572000000600082015250565b6000612ecb601d8361254d565b9150612ed682612e95565b602082019050919050565b60006020820190508181036000830152612efa81612ebe565b9050919050565b7f696e636f72726563742061646472657373000000000000000000000000000000600082015250565b6000612f3760118361254d565b9150612f4282612f01565b602082019050919050565b60006020820190508181036000830152612f6681612f2a565b9050919050565b7f74726164696e672064697361626c656400000000000000000000000000000000600082015250565b6000612fa360108361254d565b9150612fae82612f6d565b602082019050919050565b60006020820190508181036000830152612fd281612f96565b9050919050565b7f6d61782077616c6c657420636f6e73747261696e740000000000000000000000600082015250565b600061300f60158361254d565b915061301a82612fd9565b602082019050919050565b6000602082019050818103600083015261303e81613002565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61307a81612631565b82525050565b600061308c8383613071565b60208301905092915050565b6000602082019050919050565b60006130b082613045565b6130ba8185613050565b93506130c583613061565b8060005b838110156130f65781516130dd8882613080565b97506130e883613098565b9250506001810190506130c9565b5085935050505092915050565b600060a0820190506131186000830188612772565b6131256020830187612cbb565b818103604083015261313781866130a5565b90506131466060830185612748565b6131536080830184612772565b969550505050505056fea2646970667358221220a22048d95a56ff077b8185ff1d5cc2348111c4a1f71f11322f147cdf0a28d41b64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806347fd4ab311610102578063c4b44a4011610095578063f1153e6411610064578063f1153e64146106c9578063f2fde38b146106f4578063f8b45b051461071d578063f95fa9cf14610748576101ee565b8063c4b44a401461060b578063c816841b14610636578063d57038e114610661578063dd62ed3e1461068c576101ee565b80638da5cb5b116100d15780638da5cb5b1461054d57806395d89b41146105785780639cf5c9a4146105a3578063a9059cbb146105ce576101ee565b806347fd4ab3146104955780636bf8e9cc146104be5780636c90b57f146104e757806370a0823114610510576101ee565b80631d933a4a1161017a5780633ab1a494116101495780633ab1a494146104015780633ccfd60b1461042a5780633d389faf14610441578063467abe0a1461046c576101ee565b80631d933a4a1461035957806323b872dd146103825780632b96ddbe146103bf578063313ce567146103d6576101ee565b806318160ddd116101b657806318160ddd146102af5780631a795197146102da5780631af1c560146103175780631d55009a1461032e576101ee565b806306fdde03146101f3578063095ea7b31461021e5780630dbbb7121461025b5780631581b60014610284576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610785565b60405161021591906125db565b60405180910390f35b34801561022a57600080fd5b50610245600480360381019061024091906126a5565b610817565b6040516102529190612700565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061271b565b61082e565b005b34801561029057600080fd5b506102996108cc565b6040516102a69190612757565b60405180910390f35b3480156102bb57600080fd5b506102c46108f6565b6040516102d19190612781565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906126a5565b6108ff565b60405161030e9190612781565b60405180910390f35b34801561032357600080fd5b5061032c610924565b005b34801561033a57600080fd5b50610343610efb565b6040516103509190612781565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061279c565b610f01565b005b34801561038e57600080fd5b506103a960048036038101906103a491906127c9565b610f73565b6040516103b69190612700565b60405180910390f35b3480156103cb57600080fd5b506103d461105a565b005b3480156103e257600080fd5b506103eb6110f8565b6040516103f89190612838565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061271b565b611101565b005b34801561043657600080fd5b5061043f61119f565b005b34801561044d57600080fd5b50610456611203565b6040516104639190612700565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e919061279c565b611216565b005b3480156104a157600080fd5b506104bc60048036038101906104b7919061287f565b611288565b005b3480156104ca57600080fd5b506104e560048036038101906104e091906128ac565b6112ff565b005b3480156104f357600080fd5b5061050e60048036038101906105099190612a34565b611389565b005b34801561051c57600080fd5b506105376004803603810190610532919061271b565b611476565b6040516105449190612781565b60405180910390f35b34801561055957600080fd5b506105626114bf565b60405161056f9190612757565b60405180910390f35b34801561058457600080fd5b5061058d6114e9565b60405161059a91906125db565b60405180910390f35b3480156105af57600080fd5b506105b861157b565b6040516105c59190612757565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f091906126a5565b6115a1565b6040516106029190612700565b60405180910390f35b34801561061757600080fd5b506106206115b8565b60405161062d9190612781565b60405180910390f35b34801561064257600080fd5b5061064b6115be565b6040516106589190612757565b60405180910390f35b34801561066d57600080fd5b506106766115e4565b6040516106839190612781565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190612a90565b6115ea565b6040516106c09190612781565b60405180910390f35b3480156106d557600080fd5b506106de611671565b6040516106eb9190612781565b60405180910390f35b34801561070057600080fd5b5061071b6004803603810190610716919061271b565b611677565b005b34801561072957600080fd5b50610732611715565b60405161073f9190612781565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a91906126a5565b611780565b60405161077c9190612781565b60405180910390f35b60606001805461079490612aff565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090612aff565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050505050905090565b60006108243384846117a5565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088857600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905090565b60006103e8600c54836109129190612b60565b61091c9190612be9565b905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109d957600080fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3557600080fd5b505afa158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190612c2f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae357600080fd5b505afa158015610af7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1b9190612c2f565b6040518363ffffffff1660e01b8152600401610b38929190612c5c565b602060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190612c2f565b90506000610b96611890565b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c3a9190612781565b60405180910390a3678ac7230489e80000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cec9190612781565b60405180910390a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947308460008033426040518863ffffffff1660e01b8152600401610e5a96959493929190612cca565b6060604051808303818588803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610eac9190612d40565b50505081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426011819055505050565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5b57600080fd5b60c8811115610f6957600080fd5b80600c8190555050565b6000610f808484846118ad565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561100e57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415611040576001915050611053565b61104d85338584036117a5565b60019150505b9392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b457600080fd5b6000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006009905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461115b57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f957600080fd5b611201611cdc565b565b600760149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461127057600080fd5b60c881111561127e57600080fd5b80600b8190555050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e257600080fd5b80600760146101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461135957600080fd5b81600d8190555080600e819055506103e8600e54600d5461137a9190612d93565b111561138557600080fd5b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e357600080fd5b60005b82518110156114715781600a600085848151811061140757611406612de9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061146a90612e18565b90506113e6565b505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114f890612aff565b80601f016020809104026020016040519081016040528092919081815260200182805461152490612aff565b80156115715780601f1061154657610100808354040283529160200191611571565b820191906000526020600020905b81548152906001019060200180831161155457829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115ae3384846118ad565b6001905092915050565b600c5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d157600080fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080601154141561172b57600054905061177d565b6000603c601054601154426117409190612e61565b61174a9190612b60565b6117549190612be9565b600f546117619190612d93565b90506000548111156117785760005491505061177d565b809150505b90565b60006103e8600b54836117939190612b60565b61179d9190612be9565b905092915050565b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118839190612781565b60405180910390a3505050565b6000678ac7230489e800006000546118a89190612e61565b905090565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690612ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690612f4d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a465750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b4057600760149054906101000a900460ff16611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190612fb9565b60405180910390fd5b611aa5838383611d47565b9050611aaf611715565b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa9190612d93565b1115611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613025565b60405180910390fd5b611ccc565b600560009054906101000a900460ff16158015611bac5750600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8015611c055750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015611c5b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ccb57611c6a8382611d66565b9050611cca81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054737a250d5630b4cf539739df2c5dacb4c659f2488d611d84565b5b5b611cd7838383611dc0565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d44573d6000803e3d6000fd5b50565b6000611d5d8483611d588686611780565b611f18565b90509392505050565b6000611d7c8383611d7786866108ff565b611f18565b905092915050565b6000821415611d9257611dbb565b6000836002611da19190612b60565b905080831115611daf578092505b611db9838361232a565b505b505050565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e1157600080fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ea69190612d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f0a9190612781565b60405180910390a350505050565b6000806103e8600d5484611f2c9190612b60565b611f369190612be9565b905060008073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fad576103e8600e5485611fa09190612b60565b611faa9190612be9565b90505b60006103e8600e54600d54611fc29190612d93565b1015611fe257818386611fd59190612e61565b611fdf9190612e61565b90505b8486611fee9190612e61565b955084600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203f9190612e61565b92505081905550600083111561210b5782600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209e9190612d93565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121029190612781565b60405180910390a35b6000821115612214578160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121859190612d93565b92505081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161220b9190612781565b60405180910390a35b600081111561231d578060036000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228e9190612d93565b92505081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123149190612781565b60405180910390a35b8593505050509392505050565b6001600560006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612362576123616128f1565b5b6040519080825280602002602001820160405280156123905781602001602082028036833780820191505090505b50905030816000815181106123a8576123a7612de9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561242857600080fd5b505afa15801561243c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124609190612c2f565b8160018151811061247457612473612de9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff166318cbafe58460008430426040518663ffffffff1660e01b81526004016124f0959493929190613103565b600060405180830381600087803b15801561250a57600080fd5b505af115801561251e573d6000803e3d6000fd5b50505050506000600560006101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561257c578082015181840152602081019050612561565b8381111561258b576000848401525b50505050565b6000601f19601f8301169050919050565b60006125ad82612542565b6125b7818561254d565b93506125c781856020860161255e565b6125d081612591565b840191505092915050565b600060208201905081810360008301526125f581846125a2565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061263c82612611565b9050919050565b61264c81612631565b811461265757600080fd5b50565b60008135905061266981612643565b92915050565b6000819050919050565b6126828161266f565b811461268d57600080fd5b50565b60008135905061269f81612679565b92915050565b600080604083850312156126bc576126bb612607565b5b60006126ca8582860161265a565b92505060206126db85828601612690565b9150509250929050565b60008115159050919050565b6126fa816126e5565b82525050565b600060208201905061271560008301846126f1565b92915050565b60006020828403121561273157612730612607565b5b600061273f8482850161265a565b91505092915050565b61275181612631565b82525050565b600060208201905061276c6000830184612748565b92915050565b61277b8161266f565b82525050565b60006020820190506127966000830184612772565b92915050565b6000602082840312156127b2576127b1612607565b5b60006127c084828501612690565b91505092915050565b6000806000606084860312156127e2576127e1612607565b5b60006127f08682870161265a565b93505060206128018682870161265a565b925050604061281286828701612690565b9150509250925092565b600060ff82169050919050565b6128328161281c565b82525050565b600060208201905061284d6000830184612829565b92915050565b61285c816126e5565b811461286757600080fd5b50565b60008135905061287981612853565b92915050565b60006020828403121561289557612894612607565b5b60006128a38482850161286a565b91505092915050565b600080604083850312156128c3576128c2612607565b5b60006128d185828601612690565b92505060206128e285828601612690565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61292982612591565b810181811067ffffffffffffffff82111715612948576129476128f1565b5b80604052505050565b600061295b6125fd565b90506129678282612920565b919050565b600067ffffffffffffffff821115612987576129866128f1565b5b602082029050602081019050919050565b600080fd5b60006129b06129ab8461296c565b612951565b905080838252602082019050602084028301858111156129d3576129d2612998565b5b835b818110156129fc57806129e8888261265a565b8452602084019350506020810190506129d5565b5050509392505050565b600082601f830112612a1b57612a1a6128ec565b5b8135612a2b84826020860161299d565b91505092915050565b60008060408385031215612a4b57612a4a612607565b5b600083013567ffffffffffffffff811115612a6957612a6861260c565b5b612a7585828601612a06565b9250506020612a868582860161286a565b9150509250929050565b60008060408385031215612aa757612aa6612607565b5b6000612ab58582860161265a565b9250506020612ac68582860161265a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b1757607f821691505b60208210811415612b2b57612b2a612ad0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b6b8261266f565b9150612b768361266f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612baf57612bae612b31565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612bf48261266f565b9150612bff8361266f565b925082612c0f57612c0e612bba565b5b828204905092915050565b600081519050612c2981612643565b92915050565b600060208284031215612c4557612c44612607565b5b6000612c5384828501612c1a565b91505092915050565b6000604082019050612c716000830185612748565b612c7e6020830184612748565b9392505050565b6000819050919050565b6000819050919050565b6000612cb4612caf612caa84612c85565b612c8f565b61266f565b9050919050565b612cc481612c99565b82525050565b600060c082019050612cdf6000830189612748565b612cec6020830188612772565b612cf96040830187612cbb565b612d066060830186612cbb565b612d136080830185612748565b612d2060a0830184612772565b979650505050505050565b600081519050612d3a81612679565b92915050565b600080600060608486031215612d5957612d58612607565b5b6000612d6786828701612d2b565b9350506020612d7886828701612d2b565b9250506040612d8986828701612d2b565b9150509250925092565b6000612d9e8261266f565b9150612da98361266f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612dde57612ddd612b31565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e238261266f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e5657612e55612b31565b5b600182019050919050565b6000612e6c8261266f565b9150612e778361266f565b925082821015612e8a57612e89612b31565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e20666f72207472616e73666572000000600082015250565b6000612ecb601d8361254d565b9150612ed682612e95565b602082019050919050565b60006020820190508181036000830152612efa81612ebe565b9050919050565b7f696e636f72726563742061646472657373000000000000000000000000000000600082015250565b6000612f3760118361254d565b9150612f4282612f01565b602082019050919050565b60006020820190508181036000830152612f6681612f2a565b9050919050565b7f74726164696e672064697361626c656400000000000000000000000000000000600082015250565b6000612fa360108361254d565b9150612fae82612f6d565b602082019050919050565b60006020820190508181036000830152612fd281612f96565b9050919050565b7f6d61782077616c6c657420636f6e73747261696e740000000000000000000000600082015250565b600061300f60158361254d565b915061301a82612fd9565b602082019050919050565b6000602082019050818103600083015261303e81613002565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61307a81612631565b82525050565b600061308c8383613071565b60208301905092915050565b6000602082019050919050565b60006130b082613045565b6130ba8185613050565b93506130c583613061565b8060005b838110156130f65781516130dd8882613080565b97506130e883613098565b9250506001810190506130c9565b5085935050505092915050565b600060a0820190506131186000830188612772565b6131256020830187612cbb565b818103604083015261313781866130a5565b90506131466060830185612748565b6131536080830184612772565b969550505050505056fea2646970667358221220a22048d95a56ff077b8185ff1d5cc2348111c4a1f71f11322f147cdf0a28d41b64736f6c63430008090033

Deployed Bytecode Sourcemap

15878:432:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5120:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6391:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13520:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;721:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13031:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10699:1012;;;;;;;;;;;;;:::i;:::-;;9698:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13357:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6820:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13714:118;;;;;;;;;;;;;:::i;:::-;;5310:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;553:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;356:74;;;;;;;;;;;;;:::i;:::-;;9374:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13199:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15702:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13840:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15451:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16145:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1145:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5213:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9495:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5606:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9644:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9341:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9591:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6197:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9748:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1037:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10356:335;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12865:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:85;5159:13;5192:5;5185:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5120:85;:::o;6391:193::-;6495:4;6517:37;6526:10;6538:7;6547:6;6517:8;:37::i;:::-;6572:4;6565:11;;6391:193;;;;:::o;13520:186::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;13675:23:::1;13648:24;;:50;;;;;;;;;;;;;;;;;;13520:186:::0;:::o;721:102::-;771:7;798:17;;;;;;;;;;;791:24;;721:102;:::o;5403:::-;5458:7;5485:12;;5478:19;;5403:102;:::o;13031:160::-;13123:7;13179:4;13165:10;;13156:6;:19;;;;:::i;:::-;13155:28;;;;:::i;:::-;13148:35;;13031:160;;;;:::o;10699:1012::-;942:6;;;;;;;;;;;928:20;;:10;:20;;;920:29;;;;;;10787:1:::1;10764:25;;:11;;;;;;;;;;;:25;;;10756:34;;;::::0;::::1;;10801:12;9291:42;10834:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10816:56;;;10895:4;9291:42;10915:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10816:133;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10801:148;;10960:24;10987:27;:25;:27::i;:::-;10960:54;;11052:16;11025:9;:24;11043:4;11025:24;;;;;;;;;;;;;;;:43;;;;11113:4;11084:53;;11101:1;11084:53;;;11120:16;11084:53;;;;;;:::i;:::-;;;;;;;;11174:4;11150:9;:21;11160:10;11150:21;;;;;;;;;;;;;;;:28;;;;11215:10;11194:50;;11211:1;11194:50;;;11227:16;11194:50;;;;;;:::i;:::-;;;;;;;;4977:10;11257:11;:26;11277:4;11257:26;;;;;;;;;;;;;;;:77;9291:42;11257:77;;;;;;;;;;;;;;;:98;;;;11393:4;11366:18;:24;11385:4;11366:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;9291:42;11408:32;;;11448:21;11493:4;11513:16;11544:1;11560::::0;11576:10:::1;11601:15;11408:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11654:4;11640:11;;:18;;;;;;;;;;;;;;;;;;11688:15;11669:16;:34;;;;10745:966;;10699:1012::o:0;9698:30::-;;;;:::o;13357:155::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;13463:3:::1;13446:13;:20;;13438:29;;;::::0;::::1;;13491:13;13478:10;:26;;;;13357:155:::0;:::o;6820:504::-;6954:4;6971:36;6981:6;6989:9;7000:6;6971:9;:36::i;:::-;7020:24;7047:11;:19;7059:6;7047:19;;;;;;;;;;;;;;;:31;7067:10;7047:31;;;;;;;;;;;;;;;;7020:58;;7117:6;7097:16;:26;;7089:35;;;;;;4977:10;7139:16;:38;7135:55;;;7186:4;7179:11;;;;;7135:55;7226;7235:6;7243:10;7274:6;7255:16;:25;7226:8;:55::i;:::-;7312:4;7305:11;;;6820:504;;;;;;:::o;13714:118::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;13822:1:::1;13787:24;;:37;;;;;;;;;;;;;;;;;;13714:118::o:0;5310:85::-;5353:5;4754:1;5371:16;;5310:85;:::o;553:160::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;687:18:::1;667:17;;:38;;;;;;;;;;;;;;;;;;553:160:::0;:::o;356:74::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;411:11:::1;:9;:11::i;:::-;356:74::o:0;9374:28::-;;;;;;;;;;;;;:::o;13199:150::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;13302:3:::1;13286:12;:19;;13278:28;;;::::0;::::1;;13329:12;13317:9;:24;;;;13199:150:::0;:::o;15702:89::-;942:6;;;;;;;;;;;928:20;;:10;:20;;;920:29;;;;;;15778:5:::1;15766:9;;:17;;;;;;;;;;;;;;;;;;15702:89:::0;:::o;13840:246::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;13976:12:::1;13964:9;:24;;;;14012:16;13999:10;:29;;;;14073:4;14059:10;;14047:9;;:22;;;;:::i;:::-;:30;;14039:39;;;::::0;::::1;;13840:246:::0;;:::o;15451:243::-;310:17;;;;;;;;;;;296:31;;:10;:31;;;288:40;;;;;;15580:9:::1;15575:112;15599:8;:15;15595:1;:19;15575:112;;;15670:5;15636:18;:31;15655:8;15664:1;15655:11;;;;;;;;:::i;:::-;;;;;;;;15636:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;15616:3;;;;:::i;:::-;;;15575:112;;;;15451:243:::0;;:::o;16145:162::-;16249:7;16281:9;:18;16291:7;16281:18;;;;;;;;;;;;;;;;16274:25;;16145:162;;;:::o;1145:81::-;1185:7;1212:6;;;;;;;;;;;1205:13;;1145:81;:::o;5213:89::-;5254:13;5287:7;5280:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5213:89;:::o;9495:39::-;;;;;;;;;;;;;:::o;5606:199::-;5713:4;5735:40;5745:10;5757:9;5768:6;5735:9;:40::i;:::-;5793:4;5786:11;;5606:199;;;;:::o;9644:30::-;;;;:::o;9341:26::-;;;;;;;;;;;;;:::o;9591:29::-;;;;:::o;6197:186::-;6316:7;6348:11;:18;6360:5;6348:18;;;;;;;;;;;;;;;:27;6367:7;6348:27;;;;;;;;;;;;;;;;6341:34;;6197:186;;;;:::o;9748:29::-;;;;:::o;1037:100::-;942:6;;;;;;;;;;;928:20;;:10;:20;;;920:29;;;;;;1121:8:::1;1112:6;;:17;;;;;;;;;;;;;;;;;;1037:100:::0;:::o;10356:335::-;10398:7;10442:1;10422:16;;:21;10418:46;;;10452:12;;10445:19;;;;10418:46;10475:11;10598:9;10559:21;;10539:16;;10521:15;:34;;;;:::i;:::-;10520:60;;;;:::i;:::-;10519:89;;;;:::i;:::-;10489:14;;:119;;;;:::i;:::-;10475:133;;10629:12;;10623:3;:18;10619:43;;;10650:12;;10643:19;;;;;10619:43;10680:3;10673:10;;;10356:335;;:::o;12865:158::-;12956:7;13011:4;12998:9;;12989:6;:18;;;;:::i;:::-;12988:27;;;;:::i;:::-;12981:34;;12865:158;;;;:::o;6592:220::-;6750:6;6720:11;:18;6732:5;6720:18;;;;;;;;;;;;;;;:27;6739:7;6720:27;;;;;;;;;;;;;;;:36;;;;6788:7;6772:32;;6781:5;6772:32;;;6797:6;6772:32;;;;;;:::i;:::-;;;;;;;;6592:220;;;:::o;15973:164::-;16078:7;16125:4;16110:12;;:19;;;;:::i;:::-;16103:26;;15973:164;:::o;11719:1138::-;11870:6;11851:9;:15;11861:4;11851:15;;;;;;;;;;;;;;;;:25;;11843:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11943:1;11929:16;;:2;:16;;;;11921:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;12008:11;;;;;;;;;;;12000:19;;:4;:19;;;:46;;;;;12024:18;:22;12043:2;12024:22;;;;;;;;;;;;;;;;;;;;;;;;;12023:23;12000:46;11996:787;;;12071:9;;;;;;;;;;;12063:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12151:28;12162:4;12168:2;12172:6;12151:10;:28::i;:::-;12142:37;;12246:11;:9;:11::i;:::-;12236:6;12220:9;:13;12230:2;12220:13;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;:37;;12194:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;11996:787;;;12377:7;;;;;;;;;;;12376:8;:50;;;;;12424:1;12401:25;;:11;;;;;;;;;;;:25;;;;12376:50;:84;;;;;12449:11;;;;;;;;;;;12443:17;;:2;:17;;;12376:84;:126;;;;;12478:18;:24;12497:4;12478:24;;;;;;;;;;;;;;;;;;;;;;;;;12477:25;12376:126;12358:425;;;12558:25;12570:4;12576:6;12558:11;:25::i;:::-;12549:34;;12626:145;12672:6;12697:9;:24;12715:4;12697:24;;;;;;;;;;;;;;;;9291:42;12626:27;:145::i;:::-;12358:425;11996:787;12816:33;12832:4;12838:2;12842:6;12816:15;:33::i;:::-;11719:1138;;;:::o;438:107::-;487:17;;;;;;;;;;;479:35;;:58;515:21;479:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;438:107::o;14094:196::-;14207:7;14234:48;14246:4;14252:6;14260:21;14270:2;14274:6;14260:9;:21::i;:::-;14234:11;:48::i;:::-;14227:55;;14094:196;;;;;:::o;14298:177::-;14384:7;14416:51;14428:4;14434:6;14442:24;14453:4;14459:6;14442:10;:24::i;:::-;14416:11;:51::i;:::-;14409:58;;14298:177;;;;:::o;3453:379::-;3641:1;3628:9;:14;3624:27;;;3644:7;;3624:27;3661:20;3688:14;3684:1;:18;;;;:::i;:::-;3661:41;;3729:12;3717:9;:24;3713:54;;;3755:12;3743:24;;3713:54;3778:46;3796:9;3807:16;3778:17;:46::i;:::-;3613:219;3453:379;;;;:::o;5813:376::-;5936:21;5960:9;:15;5970:4;5960:15;;;;;;;;;;;;;;;;5936:39;;6011:6;5994:13;:23;;5986:32;;;;;;6088:6;6072:13;:22;6054:9;:15;6064:4;6054:15;;;;;;;;;;;;;;;:40;;;;6133:6;6116:9;:13;6126:2;6116:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;6170:2;6155:26;;6164:4;6155:26;;;6174:6;6155:26;;;;;;:::i;:::-;;;;;;;;5925:264;5813:376;;;:::o;14483:960::-;14598:7;14618:15;14656:4;14643:9;;14637:3;:15;;;;:::i;:::-;14636:24;;;;:::i;:::-;14618:42;;14671:16;14742:1;14706:38;;:24;;;;;;;;;;;:38;;;14702:93;;14791:4;14777:10;;14771:3;:16;;;;:::i;:::-;14770:25;;;;:::i;:::-;14759:36;;14702:93;14806:12;14862:4;14849:10;;14837:9;;:22;;;;:::i;:::-;:29;14833:66;;;14891:8;14881:7;14875:3;:13;;;;:::i;:::-;:24;;;;:::i;:::-;14868:31;;14833:66;14922:3;14912:13;;;;;:::i;:::-;;;14955:3;14936:9;:15;14946:4;14936:15;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;14985:1;14975:7;:11;14971:137;;;15031:7;15003:9;:24;15021:4;15003:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;15081:4;15058:38;;15067:4;15058:38;;;15088:7;15058:38;;;;;;:::i;:::-;;;;;;;;14971:137;15133:1;15122:8;:12;15118:162;;;15190:8;15151:9;:35;15161:24;;;;;;;;;;;15151:35;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;15233:24;;;;;;;;;;;15218:50;;15227:4;15218:50;;;15259:8;15218:50;;;;;;:::i;:::-;;;;;;;;15118:162;15301:1;15294:4;:8;15290:120;;;15343:4;15319:9;:20;15329:9;;;;;;;;;;;15319:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15382:9;;;;;;;;;;;15367:31;;15376:4;15367:31;;;15393:4;15367:31;;;;;;:::i;:::-;;;;;;;;15290:120;15429:6;15422:13;;;;;14483:960;;;;;:::o;2814:631::-;2756:4;2746:7;;:14;;;;;;;;;;;;;;;;;;3016:21:::1;3054:1;3040:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3016:40;;3085:4;3067;3072:1;3067:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;3111:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3101:4;3106:1;3101:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;::::0;::::1;3225:16;:38;;;3278:11;3304:1;3348:4;3375;3411:15;3225:212;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2945:500;2793:5:::0;2783:7;;:15;;;;;;;;;;;;;;;;;;2814:631;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:329::-;4592:6;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4533:329;;;;:::o;4868:619::-;4945:6;4953;4961;5010:2;4998:9;4989:7;4985:23;4981:32;4978:119;;;5016:79;;:::i;:::-;4978:119;5136:1;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5107:117;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;5391:2;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5362:118;4868:619;;;;;:::o;5493:86::-;5528:7;5568:4;5561:5;5557:16;5546:27;;5493:86;;;:::o;5585:112::-;5668:22;5684:5;5668:22;:::i;:::-;5663:3;5656:35;5585:112;;:::o;5703:214::-;5792:4;5830:2;5819:9;5815:18;5807:26;;5843:67;5907:1;5896:9;5892:17;5883:6;5843:67;:::i;:::-;5703:214;;;;:::o;5923:116::-;5993:21;6008:5;5993:21;:::i;:::-;5986:5;5983:32;5973:60;;6029:1;6026;6019:12;5973:60;5923:116;:::o;6045:133::-;6088:5;6126:6;6113:20;6104:29;;6142:30;6166:5;6142:30;:::i;:::-;6045:133;;;;:::o;6184:323::-;6240:6;6289:2;6277:9;6268:7;6264:23;6260:32;6257:119;;;6295:79;;:::i;:::-;6257:119;6415:1;6440:50;6482:7;6473:6;6462:9;6458:22;6440:50;:::i;:::-;6430:60;;6386:114;6184:323;;;;:::o;6513:474::-;6581:6;6589;6638:2;6626:9;6617:7;6613:23;6609:32;6606:119;;;6644:79;;:::i;:::-;6606:119;6764:1;6789:53;6834:7;6825:6;6814:9;6810:22;6789:53;:::i;:::-;6779:63;;6735:117;6891:2;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6862:118;6513:474;;;;;:::o;6993:117::-;7102:1;7099;7092:12;7116:180;7164:77;7161:1;7154:88;7261:4;7258:1;7251:15;7285:4;7282:1;7275:15;7302:281;7385:27;7407:4;7385:27;:::i;:::-;7377:6;7373:40;7515:6;7503:10;7500:22;7479:18;7467:10;7464:34;7461:62;7458:88;;;7526:18;;:::i;:::-;7458:88;7566:10;7562:2;7555:22;7345:238;7302:281;;:::o;7589:129::-;7623:6;7650:20;;:::i;:::-;7640:30;;7679:33;7707:4;7699:6;7679:33;:::i;:::-;7589:129;;;:::o;7724:311::-;7801:4;7891:18;7883:6;7880:30;7877:56;;;7913:18;;:::i;:::-;7877:56;7963:4;7955:6;7951:17;7943:25;;8023:4;8017;8013:15;8005:23;;7724:311;;;:::o;8041:117::-;8150:1;8147;8140:12;8181:710;8277:5;8302:81;8318:64;8375:6;8318:64;:::i;:::-;8302:81;:::i;:::-;8293:90;;8403:5;8432:6;8425:5;8418:21;8466:4;8459:5;8455:16;8448:23;;8519:4;8511:6;8507:17;8499:6;8495:30;8548:3;8540:6;8537:15;8534:122;;;8567:79;;:::i;:::-;8534:122;8682:6;8665:220;8699:6;8694:3;8691:15;8665:220;;;8774:3;8803:37;8836:3;8824:10;8803:37;:::i;:::-;8798:3;8791:50;8870:4;8865:3;8861:14;8854:21;;8741:144;8725:4;8720:3;8716:14;8709:21;;8665:220;;;8669:21;8283:608;;8181:710;;;;;:::o;8914:370::-;8985:5;9034:3;9027:4;9019:6;9015:17;9011:27;9001:122;;9042:79;;:::i;:::-;9001:122;9159:6;9146:20;9184:94;9274:3;9266:6;9259:4;9251:6;9247:17;9184:94;:::i;:::-;9175:103;;8991:293;8914:370;;;;:::o;9290:678::-;9380:6;9388;9437:2;9425:9;9416:7;9412:23;9408:32;9405:119;;;9443:79;;:::i;:::-;9405:119;9591:1;9580:9;9576:17;9563:31;9621:18;9613:6;9610:30;9607:117;;;9643:79;;:::i;:::-;9607:117;9748:78;9818:7;9809:6;9798:9;9794:22;9748:78;:::i;:::-;9738:88;;9534:302;9875:2;9901:50;9943:7;9934:6;9923:9;9919:22;9901:50;:::i;:::-;9891:60;;9846:115;9290:678;;;;;:::o;9974:474::-;10042:6;10050;10099:2;10087:9;10078:7;10074:23;10070:32;10067:119;;;10105:79;;:::i;:::-;10067:119;10225:1;10250:53;10295:7;10286:6;10275:9;10271:22;10250:53;:::i;:::-;10240:63;;10196:117;10352:2;10378:53;10423:7;10414:6;10403:9;10399:22;10378:53;:::i;:::-;10368:63;;10323:118;9974:474;;;;;:::o;10454:180::-;10502:77;10499:1;10492:88;10599:4;10596:1;10589:15;10623:4;10620:1;10613:15;10640:320;10684:6;10721:1;10715:4;10711:12;10701:22;;10768:1;10762:4;10758:12;10789:18;10779:81;;10845:4;10837:6;10833:17;10823:27;;10779:81;10907:2;10899:6;10896:14;10876:18;10873:38;10870:84;;;10926:18;;:::i;:::-;10870:84;10691:269;10640:320;;;:::o;10966:180::-;11014:77;11011:1;11004:88;11111:4;11108:1;11101:15;11135:4;11132:1;11125:15;11152:348;11192:7;11215:20;11233:1;11215:20;:::i;:::-;11210:25;;11249:20;11267:1;11249:20;:::i;:::-;11244:25;;11437:1;11369:66;11365:74;11362:1;11359:81;11354:1;11347:9;11340:17;11336:105;11333:131;;;11444:18;;:::i;:::-;11333:131;11492:1;11489;11485:9;11474:20;;11152:348;;;;:::o;11506:180::-;11554:77;11551:1;11544:88;11651:4;11648:1;11641:15;11675:4;11672:1;11665:15;11692:185;11732:1;11749:20;11767:1;11749:20;:::i;:::-;11744:25;;11783:20;11801:1;11783:20;:::i;:::-;11778:25;;11822:1;11812:35;;11827:18;;:::i;:::-;11812:35;11869:1;11866;11862:9;11857:14;;11692:185;;;;:::o;11883:143::-;11940:5;11971:6;11965:13;11956:22;;11987:33;12014:5;11987:33;:::i;:::-;11883:143;;;;:::o;12032:351::-;12102:6;12151:2;12139:9;12130:7;12126:23;12122:32;12119:119;;;12157:79;;:::i;:::-;12119:119;12277:1;12302:64;12358:7;12349:6;12338:9;12334:22;12302:64;:::i;:::-;12292:74;;12248:128;12032:351;;;;:::o;12389:332::-;12510:4;12548:2;12537:9;12533:18;12525:26;;12561:71;12629:1;12618:9;12614:17;12605:6;12561:71;:::i;:::-;12642:72;12710:2;12699:9;12695:18;12686:6;12642:72;:::i;:::-;12389:332;;;;;:::o;12727:85::-;12772:7;12801:5;12790:16;;12727:85;;;:::o;12818:60::-;12846:3;12867:5;12860:12;;12818:60;;;:::o;12884:158::-;12942:9;12975:61;12993:42;13002:32;13028:5;13002:32;:::i;:::-;12993:42;:::i;:::-;12975:61;:::i;:::-;12962:74;;12884:158;;;:::o;13048:147::-;13143:45;13182:5;13143:45;:::i;:::-;13138:3;13131:58;13048:147;;:::o;13201:807::-;13450:4;13488:3;13477:9;13473:19;13465:27;;13502:71;13570:1;13559:9;13555:17;13546:6;13502:71;:::i;:::-;13583:72;13651:2;13640:9;13636:18;13627:6;13583:72;:::i;:::-;13665:80;13741:2;13730:9;13726:18;13717:6;13665:80;:::i;:::-;13755;13831:2;13820:9;13816:18;13807:6;13755:80;:::i;:::-;13845:73;13913:3;13902:9;13898:19;13889:6;13845:73;:::i;:::-;13928;13996:3;13985:9;13981:19;13972:6;13928:73;:::i;:::-;13201:807;;;;;;;;;:::o;14014:143::-;14071:5;14102:6;14096:13;14087:22;;14118:33;14145:5;14118:33;:::i;:::-;14014:143;;;;:::o;14163:663::-;14251:6;14259;14267;14316:2;14304:9;14295:7;14291:23;14287:32;14284:119;;;14322:79;;:::i;:::-;14284:119;14442:1;14467:64;14523:7;14514:6;14503:9;14499:22;14467:64;:::i;:::-;14457:74;;14413:128;14580:2;14606:64;14662:7;14653:6;14642:9;14638:22;14606:64;:::i;:::-;14596:74;;14551:129;14719:2;14745:64;14801:7;14792:6;14781:9;14777:22;14745:64;:::i;:::-;14735:74;;14690:129;14163:663;;;;;:::o;14832:305::-;14872:3;14891:20;14909:1;14891:20;:::i;:::-;14886:25;;14925:20;14943:1;14925:20;:::i;:::-;14920:25;;15079:1;15011:66;15007:74;15004:1;15001:81;14998:107;;;15085:18;;:::i;:::-;14998:107;15129:1;15126;15122:9;15115:16;;14832:305;;;;:::o;15143:180::-;15191:77;15188:1;15181:88;15288:4;15285:1;15278:15;15312:4;15309:1;15302:15;15329:233;15368:3;15391:24;15409:5;15391:24;:::i;:::-;15382:33;;15437:66;15430:5;15427:77;15424:103;;;15507:18;;:::i;:::-;15424:103;15554:1;15547:5;15543:13;15536:20;;15329:233;;;:::o;15568:191::-;15608:4;15628:20;15646:1;15628:20;:::i;:::-;15623:25;;15662:20;15680:1;15662:20;:::i;:::-;15657:25;;15701:1;15698;15695:8;15692:34;;;15706:18;;:::i;:::-;15692:34;15751:1;15748;15744:9;15736:17;;15568:191;;;;:::o;15765:179::-;15905:31;15901:1;15893:6;15889:14;15882:55;15765:179;:::o;15950:366::-;16092:3;16113:67;16177:2;16172:3;16113:67;:::i;:::-;16106:74;;16189:93;16278:3;16189:93;:::i;:::-;16307:2;16302:3;16298:12;16291:19;;15950:366;;;:::o;16322:419::-;16488:4;16526:2;16515:9;16511:18;16503:26;;16575:9;16569:4;16565:20;16561:1;16550:9;16546:17;16539:47;16603:131;16729:4;16603:131;:::i;:::-;16595:139;;16322:419;;;:::o;16747:167::-;16887:19;16883:1;16875:6;16871:14;16864:43;16747:167;:::o;16920:366::-;17062:3;17083:67;17147:2;17142:3;17083:67;:::i;:::-;17076:74;;17159:93;17248:3;17159:93;:::i;:::-;17277:2;17272:3;17268:12;17261:19;;16920:366;;;:::o;17292:419::-;17458:4;17496:2;17485:9;17481:18;17473:26;;17545:9;17539:4;17535:20;17531:1;17520:9;17516:17;17509:47;17573:131;17699:4;17573:131;:::i;:::-;17565:139;;17292:419;;;:::o;17717:166::-;17857:18;17853:1;17845:6;17841:14;17834:42;17717:166;:::o;17889:366::-;18031:3;18052:67;18116:2;18111:3;18052:67;:::i;:::-;18045:74;;18128:93;18217:3;18128:93;:::i;:::-;18246:2;18241:3;18237:12;18230:19;;17889:366;;;:::o;18261:419::-;18427:4;18465:2;18454:9;18450:18;18442:26;;18514:9;18508:4;18504:20;18500:1;18489:9;18485:17;18478:47;18542:131;18668:4;18542:131;:::i;:::-;18534:139;;18261:419;;;:::o;18686:171::-;18826:23;18822:1;18814:6;18810:14;18803:47;18686:171;:::o;18863:366::-;19005:3;19026:67;19090:2;19085:3;19026:67;:::i;:::-;19019:74;;19102:93;19191:3;19102:93;:::i;:::-;19220:2;19215:3;19211:12;19204:19;;18863:366;;;:::o;19235:419::-;19401:4;19439:2;19428:9;19424:18;19416:26;;19488:9;19482:4;19478:20;19474:1;19463:9;19459:17;19452:47;19516:131;19642:4;19516:131;:::i;:::-;19508:139;;19235:419;;;:::o;19660:114::-;19727:6;19761:5;19755:12;19745:22;;19660:114;;;:::o;19780:184::-;19879:11;19913:6;19908:3;19901:19;19953:4;19948:3;19944:14;19929:29;;19780:184;;;;:::o;19970:132::-;20037:4;20060:3;20052:11;;20090:4;20085:3;20081:14;20073:22;;19970:132;;;:::o;20108:108::-;20185:24;20203:5;20185:24;:::i;:::-;20180:3;20173:37;20108:108;;:::o;20222:179::-;20291:10;20312:46;20354:3;20346:6;20312:46;:::i;:::-;20390:4;20385:3;20381:14;20367:28;;20222:179;;;;:::o;20407:113::-;20477:4;20509;20504:3;20500:14;20492:22;;20407:113;;;:::o;20556:732::-;20675:3;20704:54;20752:5;20704:54;:::i;:::-;20774:86;20853:6;20848:3;20774:86;:::i;:::-;20767:93;;20884:56;20934:5;20884:56;:::i;:::-;20963:7;20994:1;20979:284;21004:6;21001:1;20998:13;20979:284;;;21080:6;21074:13;21107:63;21166:3;21151:13;21107:63;:::i;:::-;21100:70;;21193:60;21246:6;21193:60;:::i;:::-;21183:70;;21039:224;21026:1;21023;21019:9;21014:14;;20979:284;;;20983:14;21279:3;21272:10;;20680:608;;;20556:732;;;;:::o;21294:831::-;21557:4;21595:3;21584:9;21580:19;21572:27;;21609:71;21677:1;21666:9;21662:17;21653:6;21609:71;:::i;:::-;21690:80;21766:2;21755:9;21751:18;21742:6;21690:80;:::i;:::-;21817:9;21811:4;21807:20;21802:2;21791:9;21787:18;21780:48;21845:108;21948:4;21939:6;21845:108;:::i;:::-;21837:116;;21963:72;22031:2;22020:9;22016:18;22007:6;21963:72;:::i;:::-;22045:73;22113:3;22102:9;22098:19;22089:6;22045:73;:::i;:::-;21294:831;;;;;;;;:::o

Swarm Source

ipfs://a22048d95a56ff077b8185ff1d5cc2348111c4a1f71f11322f147cdf0a28d41b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.