ETH Price: $3,160.06 (-8.37%)
Gas: 3 Gwei

Token

Enigma Runes Protocol (ENIGMA)
 

Overview

Max Total Supply

19,154,641.2494212 ENIGMA

Holders

215

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
71,912.167461091 ENIGMA

Value
$0.00
0x7bf2a6b1e20f776bb32f41746382732b4befc602
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:
Enigma

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-23
*/

// SPDX-License-Identifier: MIT

/* 
TG: https://t.me/enigma_protocol

X: https://twitter.com/ProtocolEnigma

Docs: https://enigma-7.gitbook.io

Website: https://enigmaprotocol.io/
*/

pragma solidity 0.8.19;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

interface IERC20 {
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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 Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract Enigma is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = unicode"Enigma Runes Protocol";
    string private constant _symbol = unicode"ENIGMA";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 21000000 * (10 ** _decimals);
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping;
    uint256 swapAmount = 1;
    uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 1750;
    uint256 private developmentFee = 1750;
    uint256 private burnFee = 0;
    uint256 private totalFee = 3500;
    uint256 private sellFee = 3500;
    uint256 private transferFee = 3500;
    uint256 private denominator = 10000;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0xEC9Cc1b31EEA714a3A7d09647907CB12981aD92E; 
    address internal marketing_receiver = 0xe72e238bf2C9dB2b650B0827F7D93d9750aC48a3;
    address internal liquidity_receiver = 0xEC9Cc1b31EEA714a3A7d09647907CB12981aD92E;

    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router; pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[development_receiver] = true;
        isFeeExempt[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function startTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function totalSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function shouldContractSwap(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function ChangeENIGMAContractSwapSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); 
        minTokenAmount = _totalSupply.mul(_minTokenAmount).div(uint256(100000));
    }

    function ChangeENIGMAFees(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; burnFee = _burn; developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator.div(1) && sellFee <= denominator.div(1) && transferFee <= denominator.div(1), "totalFee and sellFee cannot be more than 20%");
    }

    function ChangeTxLimits(uint256 _buy, uint256 _sell, uint256 _wallet) external onlyOwner {
        uint256 newTx = _totalSupply.mul(_buy).div(10000); uint256 newTransfer = _totalSupply.mul(_sell).div(10000); uint256 newWallet = _totalSupply.mul(_wallet).div(10000);
        _maxTxAmount = newTx; _maxSellAmount = newTransfer; _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function setENIGMAInternalAddresses(address _marketing, address _liquidity, address _development) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_development] = true;
    }

    function setisExempt(address[] calldata addresses, bool _enabled) external onlyOwner {
        for(uint i=0; i < addresses.length; i++){
        isFeeExempt[addresses[i]] = _enabled;}
    }

    function setisBot(address[] calldata addresses, bool _enabled) external onlyOwner {
        for(uint i=0; i < addresses.length; i++){
        isBot[addresses[i]] = _enabled; }
    }

    function manualSwap() external onlyOwner {
        uint256 amount = balanceOf(address(this));
        if(amount > swapThreshold){amount = swapThreshold;}
        swapAndLiquify(amount);
    }

    function rescueERC20(address _address, uint256 percent) external onlyOwner {
        uint256 _amount = IERC20(_address).balanceOf(address(this)).mul(percent).div(100);
        IERC20(_address).transfer(development_receiver, _amount);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmt > 0){payable(marketing_receiver).transfer(marketingAmt);}
        uint256 contractBalance = address(this).balance;
        if(contractBalance > uint256(0)){payable(development_receiver).transfer(contractBalance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0) && getTotalFee(sender, recipient) > burnFee){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
        require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded"); 
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
        if(shouldContractSwap(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"ChangeENIGMAContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"ChangeENIGMAFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"ChangeTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"}],"name":"setENIGMAInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000906565b6301406f4062000025919062000957565b6001556000600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506001600a55620186a06103e860015462000079919062000957565b620000859190620009d1565b600b55620186a0600a6001546200009d919062000957565b620000a99190620009d1565b600c556000600d556106d6600e556106d6600f556000601055610dac601155610dac601255610dac60135561271060145573ec9cc1b31eea714a3a7d09647907cb12981ad92e601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e72e238bf2c9db2b650b0827f7d93d9750ac48a3601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ec9cc1b31eea714a3a7d09647907cb12981ad92e601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127106064600154620001ed919062000957565b620001f99190620009d1565b601855612710606460015462000210919062000957565b6200021c9190620009d1565b601955612710606460015462000233919062000957565b6200023f9190620009d1565b601a553480156200024f57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f919062000a73565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad919062000a73565b6040518363ffffffff1660e01b8152600401620003cc92919062000ab6565b6020604051808303816000875af1158015620003ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000412919062000a73565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001546040516200075c919062000af4565b60405180910390a3505062000b11565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007fa57808604811115620007d257620007d16200076c565b5b6001851615620007e25780820291505b8081029050620007f2856200079b565b9450620007b2565b94509492505050565b600082620008155760019050620008e8565b81620008255760009050620008e8565b81600181146200083e576002811462000849576200087f565b6001915050620008e8565b60ff8411156200085e576200085d6200076c565b5b8360020a9150848211156200087857620008776200076c565b5b50620008e8565b5060208310610133831016604e8410600b8410161715620008b95782820a905083811115620008b357620008b26200076c565b5b620008e8565b620008c88484846001620007a8565b92509050818404811115620008e257620008e16200076c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200091382620008ef565b91506200092083620008f9565b92506200094f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000803565b905092915050565b60006200096482620008ef565b91506200097183620008ef565b92508282026200098181620008ef565b915082820484148315176200099b576200099a6200076c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009de82620008ef565b9150620009eb83620008ef565b925082620009fe57620009fd620009a2565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a3b8262000a0e565b9050919050565b62000a4d8162000a2e565b811462000a5957600080fd5b50565b60008151905062000a6d8162000a42565b92915050565b60006020828403121562000a8c5762000a8b62000a09565b5b600062000a9c8482850162000a5c565b91505092915050565b62000ab08162000a2e565b82525050565b600060408201905062000acd600083018562000aa5565b62000adc602083018462000aa5565b9392505050565b62000aee81620008ef565b82525050565b600060208201905062000b0b600083018462000ae3565b92915050565b613b3d8062000b216000396000f3fe6080604052600436106101855760003560e01c806371bc0f1e116100d157806395d89b411161008a578063dd62ed3e11610064578063dd62ed3e1461057d578063f0f9cd57146105ba578063f2d239e8146105e3578063f2fde38b1461060c5761018c565b806395d89b41146104ea578063a8aa1b3114610515578063a9059cbb146105405761018c565b806371bc0f1e146103ec57806378109e54146104155780637cca52fe146104405780637d1db4a51461046b578063893d20e8146104965780638cd4426d146104c15761018c565b80632f54bf6e1161013e5780634249158a116101185780634249158a1461034657806351bc3c851461036f5780635828456e1461038657806370a08231146103af5761018c565b80632f54bf6e146102a1578063313ce567146102de5780633f4218e0146103095761018c565b806306fdde0314610191578063095ea7b3146101bc57806318160ddd146101f9578063229b6a5e1461022457806323b872dd1461024d578063293230b81461028a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610635565b6040516101b39190612abd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612b7d565b610672565b6040516101f09190612bd8565b60405180910390f35b34801561020557600080fd5b5061020e610689565b60405161021b9190612c02565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612cae565b6106ca565b005b34801561025957600080fd5b50610274600480360381019061026f9190612d0e565b6107b7565b6040516102819190612bd8565b60405180910390f35b34801561029657600080fd5b5061029f610882565b005b3480156102ad57600080fd5b506102c860048036038101906102c39190612d61565b6108e7565b6040516102d59190612bd8565b60405180910390f35b3480156102ea57600080fd5b506102f3610940565b6040516103009190612daa565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612d61565b610949565b60405161033d9190612bd8565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612dc5565b610969565b005b34801561037b57600080fd5b50610384610b81565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612e18565b610bf2565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612d61565b610ca6565b6040516103e39190612c02565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612e18565b610cef565b005b34801561042157600080fd5b5061042a610e6a565b6040516104379190612c02565b60405180910390f35b34801561044c57600080fd5b50610455610e70565b6040516104629190612c02565b60405180910390f35b34801561047757600080fd5b50610480610e76565b60405161048d9190612c02565b60405180910390f35b3480156104a257600080fd5b506104ab610e7c565b6040516104b89190612e7a565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190612b7d565b610ea5565b005b3480156104f657600080fd5b506104ff611036565b60405161050c9190612abd565b60405180910390f35b34801561052157600080fd5b5061052a611073565b6040516105379190612e7a565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612b7d565b611099565b6040516105749190612bd8565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612e95565b6110b0565b6040516105b19190612c02565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612cae565b611137565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190612ed5565b611224565b005b34801561061857600080fd5b50610633600480360381019061062e9190612fb5565b611346565b005b60606040518060400160405280601581526020017f456e69676d612052756e65732050726f746f636f6c0000000000000000000000815250905090565b600061067f338484611408565b6001905092915050565b60006106c56106986000610ca6565b6106b76106a661dead610ca6565b6001546115d190919063ffffffff16565b6115d190919063ffffffff16565b905090565b6106d3336108e7565b610712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107099061302e565b60405180910390fd5b60005b838390508110156107b15781600560008686858181106107385761073761304e565b5b905060200201602081019061074d9190612d61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107a9906130ac565b915050610715565b50505050565b60006107c48484846115e7565b610877843361087285604051806060016040528060288152602001613ae060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb19092919063ffffffff16565b611408565b600190509392505050565b61088b336108e7565b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061302e565b60405180910390fd5b6001600760146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b60046020528060005260406000206000915054906101000a900460ff1681565b610972336108e7565b6109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061302e565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b610b8a336108e7565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc09061302e565b60405180910390fd5b6000610bd430610ca6565b9050600b54811115610be657600b5490505b610bef81611f06565b50565b610bfb336108e7565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c319061302e565b60405180910390fd5b82600a81905550610c6b620186a0610c5d8460015461217390919063ffffffff16565b61218990919063ffffffff16565b600b81905550610c9b620186a0610c8d8360015461217390919063ffffffff16565b61218990919063ffffffff16565b600c81905550505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf8336108e7565b610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e9061302e565b60405180910390fd5b6000610d62612710610d548660015461217390919063ffffffff16565b61218990919063ffffffff16565b90506000610d8f612710610d818660015461217390919063ffffffff16565b61218990919063ffffffff16565b90506000610dbc612710610dae8660015461217390919063ffffffff16565b61218990919063ffffffff16565b9050826018819055508160198190555080601a819055506000610e046103e8610df66005610de8610689565b61217390919063ffffffff16565b61218990919063ffffffff16565b9050808410158015610e165750808310155b8015610e225750808210155b610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613166565b60405180910390fd5b50505050505050565b601a5481565b60195481565b60185481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610eae336108e7565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee49061302e565b60405180910390fd5b6000610f8e6064610f80848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f319190612e7a565b602060405180830381865afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061319b565b61217390919063ffffffff16565b61218990919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fed9291906131c8565b6020604051808303816000875af115801561100c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110309190613206565b50505050565b60606040518060400160405280600681526020017f454e49474d410000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110a63384846115e7565b6001905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611140336108e7565b61117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061302e565b60405180910390fd5b60005b8383905081101561121e5781600460008686858181106111a5576111a461304e565b5b90506020020160208101906111ba9190612d61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611216906130ac565b915050611182565b50505050565b61122d336108e7565b61126c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112639061302e565b60405180910390fd5b86600d8190555085600e819055508460108190555083600f819055508260118190555081601281905550806013819055506112b3600160145461218990919063ffffffff16565b601154111580156112db57506112d5600160145461218990919063ffffffff16565b60125411155b80156112fe57506112f8600160145461218990919063ffffffff16565b60135411155b61133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906132a5565b60405180910390fd5b50505050505050565b61134f336108e7565b61138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061302e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516113fd9190613324565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906133b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613443565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115c49190612c02565b60405180910390a3505050565b600081836115df9190613463565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc9061359b565b60405180910390fd5b6116ce83610ca6565b811115611710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117079061362d565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117b45750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561180957600760149054906101000a900460ff16611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613699565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118ad5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119075750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611941575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119dd57601a5461199b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b11156119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613705565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b205760195481111580611a8c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ae05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613771565b60405180910390fd5b5b60185481111580611b7a5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bce5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613771565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611cb45750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cd457600160086000828254611ccc9190613791565b925050819055505b611cdf8383836121b5565b15611cf857611cef600b54611f06565b60006008819055505b611d4a81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d190919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611d9984846122ef565b611da35781611daf565b611dae84848461239d565b5b9050611e0381600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ea39190612c02565b60405180910390a350505050565b6000838311158290611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09190612abd565b60405180910390fd5b5082840390509392505050565b6001600960006101000a81548160ff0219169083151502179055506000611f746002611f66600f54611f58600e54611f4a6001600d5461219f90919063ffffffff16565b61219f90919063ffffffff16565b61219f90919063ffffffff16565b61217390919063ffffffff16565b90506000611f9f82611f91600d548661217390919063ffffffff16565b61218990919063ffffffff16565b90506000611fb682856115d190919063ffffffff16565b90506000479050611fc68261255b565b6000611fdb82476115d190919063ffffffff16565b90506000612006611ff7600d54886115d190919063ffffffff16565b8361218990919063ffffffff16565b9050600061201f600d548361217390919063ffffffff16565b9050600081111561203557612034868261279e565b5b600061205f600e5461205160028661217390919063ffffffff16565b61217390919063ffffffff16565b905060008111156120d457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120d2573d6000803e3d6000fd5b505b6000479050600081111561214c57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561214a573d6000803e3d6000fd5b505b5050505050505050506000600960006101000a81548160ff02191690831515021790555050565b6000818361218191906137c5565b905092915050565b600081836121979190613836565b905092915050565b600081836121ad9190613791565b905092915050565b600080600c5483101590506000600b546121ce30610ca6565b10159050600960009054906101000a900460ff161580156121fb5750600760159054906101000a900460ff165b80156122135750600760149054906101000a900460ff165b801561221c5750815b80156122725750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122cb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156122db5750600a5460085410155b80156122e45750805b925050509392505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123955750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b6000806123aa858561289e565b11156125505760006123e26123bf868661289e565b6123d46014548661218990919063ffffffff16565b61217390919063ffffffff16565b905061243681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d69190612c02565b60405180910390a360006010541180156124fa57506010546124f8868661289e565b115b15612535576125343061dead61252f6010546125216014548961218990919063ffffffff16565b61217390919063ffffffff16565b6115e7565b5b61254881846115d190919063ffffffff16565b915050612554565b8190505b9392505050565b6000600267ffffffffffffffff81111561257857612577613867565b5b6040519080825280602002602001820160405280156125a65781602001602082028036833780820191505090505b50905030816000815181106125be576125bd61304e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268991906138ab565b8160018151811061269d5761269c61304e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061270430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611408565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127689594939291906139d1565b600060405180830381600087803b15801561278257600080fd5b505af1158015612796573d6000803e3d6000fd5b505050505050565b6127cb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611408565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161285496959493929190613a2b565b60606040518083038185885af1158015612872573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128979190613a8c565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129415750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129635761295c60646014546115d190919063ffffffff16565b9050612a27565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c2576012549050612a27565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a21576011549050612a27565b60135490505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a67578082015181840152602081019050612a4c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a8f82612a2d565b612a998185612a38565b9350612aa9818560208601612a49565b612ab281612a73565b840191505092915050565b60006020820190508181036000830152612ad78184612a84565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1482612ae9565b9050919050565b612b2481612b09565b8114612b2f57600080fd5b50565b600081359050612b4181612b1b565b92915050565b6000819050919050565b612b5a81612b47565b8114612b6557600080fd5b50565b600081359050612b7781612b51565b92915050565b60008060408385031215612b9457612b93612adf565b5b6000612ba285828601612b32565b9250506020612bb385828601612b68565b9150509250929050565b60008115159050919050565b612bd281612bbd565b82525050565b6000602082019050612bed6000830184612bc9565b92915050565b612bfc81612b47565b82525050565b6000602082019050612c176000830184612bf3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612c4257612c41612c1d565b5b8235905067ffffffffffffffff811115612c5f57612c5e612c22565b5b602083019150836020820283011115612c7b57612c7a612c27565b5b9250929050565b612c8b81612bbd565b8114612c9657600080fd5b50565b600081359050612ca881612c82565b92915050565b600080600060408486031215612cc757612cc6612adf565b5b600084013567ffffffffffffffff811115612ce557612ce4612ae4565b5b612cf186828701612c2c565b93509350506020612d0486828701612c99565b9150509250925092565b600080600060608486031215612d2757612d26612adf565b5b6000612d3586828701612b32565b9350506020612d4686828701612b32565b9250506040612d5786828701612b68565b9150509250925092565b600060208284031215612d7757612d76612adf565b5b6000612d8584828501612b32565b91505092915050565b600060ff82169050919050565b612da481612d8e565b82525050565b6000602082019050612dbf6000830184612d9b565b92915050565b600080600060608486031215612dde57612ddd612adf565b5b6000612dec86828701612b32565b9350506020612dfd86828701612b32565b9250506040612e0e86828701612b32565b9150509250925092565b600080600060608486031215612e3157612e30612adf565b5b6000612e3f86828701612b68565b9350506020612e5086828701612b68565b9250506040612e6186828701612b68565b9150509250925092565b612e7481612b09565b82525050565b6000602082019050612e8f6000830184612e6b565b92915050565b60008060408385031215612eac57612eab612adf565b5b6000612eba85828601612b32565b9250506020612ecb85828601612b32565b9150509250929050565b600080600080600080600060e0888a031215612ef457612ef3612adf565b5b6000612f028a828b01612b68565b9750506020612f138a828b01612b68565b9650506040612f248a828b01612b68565b9550506060612f358a828b01612b68565b9450506080612f468a828b01612b68565b93505060a0612f578a828b01612b68565b92505060c0612f688a828b01612b68565b91505092959891949750929550565b6000612f8282612ae9565b9050919050565b612f9281612f77565b8114612f9d57600080fd5b50565b600081359050612faf81612f89565b92915050565b600060208284031215612fcb57612fca612adf565b5b6000612fd984828501612fa0565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613018600683612a38565b915061302382612fe2565b602082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130b782612b47565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130e9576130e861307d565b5b600182019050919050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b6000613150602e83612a38565b915061315b826130f4565b604082019050919050565b6000602082019050818103600083015261317f81613143565b9050919050565b60008151905061319581612b51565b92915050565b6000602082840312156131b1576131b0612adf565b5b60006131bf84828501613186565b91505092915050565b60006040820190506131dd6000830185612e6b565b6131ea6020830184612bf3565b9392505050565b60008151905061320081612c82565b92915050565b60006020828403121561321c5761321b612adf565b5b600061322a848285016131f1565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061328f602c83612a38565b915061329a82613233565b604082019050919050565b600060208201905081810360008301526132be81613282565b9050919050565b6000819050919050565b60006132ea6132e56132e084612ae9565b6132c5565b612ae9565b9050919050565b60006132fc826132cf565b9050919050565b600061330e826132f1565b9050919050565b61331e81613303565b82525050565b60006020820190506133396000830184613315565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061339b602483612a38565b91506133a68261333f565b604082019050919050565b600060208201905081810360008301526133ca8161338e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061342d602283612a38565b9150613438826133d1565b604082019050919050565b6000602082019050818103600083015261345c81613420565b9050919050565b600061346e82612b47565b915061347983612b47565b92508282039050818111156134915761349061307d565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134f3602583612a38565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613585602383612a38565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000613617603183612a38565b9150613622826135bb565b604082019050919050565b600060208201905081810360008301526136468161360a565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b6000613683600e83612a38565b915061368e8261364d565b602082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b60006136ef601e83612a38565b91506136fa826136b9565b602082019050919050565b6000602082019050818103600083015261371e816136e2565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061375b601183612a38565b915061376682613725565b602082019050919050565b6000602082019050818103600083015261378a8161374e565b9050919050565b600061379c82612b47565b91506137a783612b47565b92508282019050808211156137bf576137be61307d565b5b92915050565b60006137d082612b47565b91506137db83612b47565b92508282026137e981612b47565b91508282048414831517613800576137ff61307d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061384182612b47565b915061384c83612b47565b92508261385c5761385b613807565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506138a581612b1b565b92915050565b6000602082840312156138c1576138c0612adf565b5b60006138cf84828501613896565b91505092915050565b6000819050919050565b60006138fd6138f86138f3846138d8565b6132c5565b612b47565b9050919050565b61390d816138e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61394881612b09565b82525050565b600061395a838361393f565b60208301905092915050565b6000602082019050919050565b600061397e82613913565b613988818561391e565b93506139938361392f565b8060005b838110156139c45781516139ab888261394e565b97506139b683613966565b925050600181019050613997565b5085935050505092915050565b600060a0820190506139e66000830188612bf3565b6139f36020830187613904565b8181036040830152613a058186613973565b9050613a146060830185612e6b565b613a216080830184612bf3565b9695505050505050565b600060c082019050613a406000830189612e6b565b613a4d6020830188612bf3565b613a5a6040830187613904565b613a676060830186613904565b613a746080830185612e6b565b613a8160a0830184612bf3565b979650505050505050565b600080600060608486031215613aa557613aa4612adf565b5b6000613ab386828701613186565b9350506020613ac486828701613186565b9250506040613ad586828701613186565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122022ce858dc9205bc61c7086178cc7e4d2e00152673be4d73257bbe47789e82ba164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101855760003560e01c806371bc0f1e116100d157806395d89b411161008a578063dd62ed3e11610064578063dd62ed3e1461057d578063f0f9cd57146105ba578063f2d239e8146105e3578063f2fde38b1461060c5761018c565b806395d89b41146104ea578063a8aa1b3114610515578063a9059cbb146105405761018c565b806371bc0f1e146103ec57806378109e54146104155780637cca52fe146104405780637d1db4a51461046b578063893d20e8146104965780638cd4426d146104c15761018c565b80632f54bf6e1161013e5780634249158a116101185780634249158a1461034657806351bc3c851461036f5780635828456e1461038657806370a08231146103af5761018c565b80632f54bf6e146102a1578063313ce567146102de5780633f4218e0146103095761018c565b806306fdde0314610191578063095ea7b3146101bc57806318160ddd146101f9578063229b6a5e1461022457806323b872dd1461024d578063293230b81461028a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610635565b6040516101b39190612abd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612b7d565b610672565b6040516101f09190612bd8565b60405180910390f35b34801561020557600080fd5b5061020e610689565b60405161021b9190612c02565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612cae565b6106ca565b005b34801561025957600080fd5b50610274600480360381019061026f9190612d0e565b6107b7565b6040516102819190612bd8565b60405180910390f35b34801561029657600080fd5b5061029f610882565b005b3480156102ad57600080fd5b506102c860048036038101906102c39190612d61565b6108e7565b6040516102d59190612bd8565b60405180910390f35b3480156102ea57600080fd5b506102f3610940565b6040516103009190612daa565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612d61565b610949565b60405161033d9190612bd8565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612dc5565b610969565b005b34801561037b57600080fd5b50610384610b81565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612e18565b610bf2565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612d61565b610ca6565b6040516103e39190612c02565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612e18565b610cef565b005b34801561042157600080fd5b5061042a610e6a565b6040516104379190612c02565b60405180910390f35b34801561044c57600080fd5b50610455610e70565b6040516104629190612c02565b60405180910390f35b34801561047757600080fd5b50610480610e76565b60405161048d9190612c02565b60405180910390f35b3480156104a257600080fd5b506104ab610e7c565b6040516104b89190612e7a565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190612b7d565b610ea5565b005b3480156104f657600080fd5b506104ff611036565b60405161050c9190612abd565b60405180910390f35b34801561052157600080fd5b5061052a611073565b6040516105379190612e7a565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612b7d565b611099565b6040516105749190612bd8565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612e95565b6110b0565b6040516105b19190612c02565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612cae565b611137565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190612ed5565b611224565b005b34801561061857600080fd5b50610633600480360381019061062e9190612fb5565b611346565b005b60606040518060400160405280601581526020017f456e69676d612052756e65732050726f746f636f6c0000000000000000000000815250905090565b600061067f338484611408565b6001905092915050565b60006106c56106986000610ca6565b6106b76106a661dead610ca6565b6001546115d190919063ffffffff16565b6115d190919063ffffffff16565b905090565b6106d3336108e7565b610712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107099061302e565b60405180910390fd5b60005b838390508110156107b15781600560008686858181106107385761073761304e565b5b905060200201602081019061074d9190612d61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107a9906130ac565b915050610715565b50505050565b60006107c48484846115e7565b610877843361087285604051806060016040528060288152602001613ae060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb19092919063ffffffff16565b611408565b600190509392505050565b61088b336108e7565b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061302e565b60405180910390fd5b6001600760146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b60046020528060005260406000206000915054906101000a900460ff1681565b610972336108e7565b6109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061302e565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b610b8a336108e7565b610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc09061302e565b60405180910390fd5b6000610bd430610ca6565b9050600b54811115610be657600b5490505b610bef81611f06565b50565b610bfb336108e7565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c319061302e565b60405180910390fd5b82600a81905550610c6b620186a0610c5d8460015461217390919063ffffffff16565b61218990919063ffffffff16565b600b81905550610c9b620186a0610c8d8360015461217390919063ffffffff16565b61218990919063ffffffff16565b600c81905550505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf8336108e7565b610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e9061302e565b60405180910390fd5b6000610d62612710610d548660015461217390919063ffffffff16565b61218990919063ffffffff16565b90506000610d8f612710610d818660015461217390919063ffffffff16565b61218990919063ffffffff16565b90506000610dbc612710610dae8660015461217390919063ffffffff16565b61218990919063ffffffff16565b9050826018819055508160198190555080601a819055506000610e046103e8610df66005610de8610689565b61217390919063ffffffff16565b61218990919063ffffffff16565b9050808410158015610e165750808310155b8015610e225750808210155b610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613166565b60405180910390fd5b50505050505050565b601a5481565b60195481565b60185481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610eae336108e7565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee49061302e565b60405180910390fd5b6000610f8e6064610f80848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f319190612e7a565b602060405180830381865afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061319b565b61217390919063ffffffff16565b61218990919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fed9291906131c8565b6020604051808303816000875af115801561100c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110309190613206565b50505050565b60606040518060400160405280600681526020017f454e49474d410000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110a63384846115e7565b6001905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611140336108e7565b61117f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111769061302e565b60405180910390fd5b60005b8383905081101561121e5781600460008686858181106111a5576111a461304e565b5b90506020020160208101906111ba9190612d61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611216906130ac565b915050611182565b50505050565b61122d336108e7565b61126c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112639061302e565b60405180910390fd5b86600d8190555085600e819055508460108190555083600f819055508260118190555081601281905550806013819055506112b3600160145461218990919063ffffffff16565b601154111580156112db57506112d5600160145461218990919063ffffffff16565b60125411155b80156112fe57506112f8600160145461218990919063ffffffff16565b60135411155b61133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906132a5565b60405180910390fd5b50505050505050565b61134f336108e7565b61138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061302e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516113fd9190613324565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906133b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613443565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115c49190612c02565b60405180910390a3505050565b600081836115df9190613463565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc9061359b565b60405180910390fd5b6116ce83610ca6565b811115611710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117079061362d565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117b45750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561180957600760149054906101000a900460ff16611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613699565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118ad5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119075750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611941575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119dd57601a5461199b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b11156119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390613705565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b205760195481111580611a8c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ae05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613771565b60405180910390fd5b5b60185481111580611b7a5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611bce5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613771565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611cb45750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cd457600160086000828254611ccc9190613791565b925050819055505b611cdf8383836121b5565b15611cf857611cef600b54611f06565b60006008819055505b611d4a81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d190919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611d9984846122ef565b611da35781611daf565b611dae84848461239d565b5b9050611e0381600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ea39190612c02565b60405180910390a350505050565b6000838311158290611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef09190612abd565b60405180910390fd5b5082840390509392505050565b6001600960006101000a81548160ff0219169083151502179055506000611f746002611f66600f54611f58600e54611f4a6001600d5461219f90919063ffffffff16565b61219f90919063ffffffff16565b61219f90919063ffffffff16565b61217390919063ffffffff16565b90506000611f9f82611f91600d548661217390919063ffffffff16565b61218990919063ffffffff16565b90506000611fb682856115d190919063ffffffff16565b90506000479050611fc68261255b565b6000611fdb82476115d190919063ffffffff16565b90506000612006611ff7600d54886115d190919063ffffffff16565b8361218990919063ffffffff16565b9050600061201f600d548361217390919063ffffffff16565b9050600081111561203557612034868261279e565b5b600061205f600e5461205160028661217390919063ffffffff16565b61217390919063ffffffff16565b905060008111156120d457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120d2573d6000803e3d6000fd5b505b6000479050600081111561214c57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561214a573d6000803e3d6000fd5b505b5050505050505050506000600960006101000a81548160ff02191690831515021790555050565b6000818361218191906137c5565b905092915050565b600081836121979190613836565b905092915050565b600081836121ad9190613791565b905092915050565b600080600c5483101590506000600b546121ce30610ca6565b10159050600960009054906101000a900460ff161580156121fb5750600760159054906101000a900460ff165b80156122135750600760149054906101000a900460ff165b801561221c5750815b80156122725750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122cb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156122db5750600a5460085410155b80156122e45750805b925050509392505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123955750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b6000806123aa858561289e565b11156125505760006123e26123bf868661289e565b6123d46014548661218990919063ffffffff16565b61217390919063ffffffff16565b905061243681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219f90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d69190612c02565b60405180910390a360006010541180156124fa57506010546124f8868661289e565b115b15612535576125343061dead61252f6010546125216014548961218990919063ffffffff16565b61217390919063ffffffff16565b6115e7565b5b61254881846115d190919063ffffffff16565b915050612554565b8190505b9392505050565b6000600267ffffffffffffffff81111561257857612577613867565b5b6040519080825280602002602001820160405280156125a65781602001602082028036833780820191505090505b50905030816000815181106125be576125bd61304e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612665573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268991906138ab565b8160018151811061269d5761269c61304e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061270430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611408565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127689594939291906139d1565b600060405180830381600087803b15801561278257600080fd5b505af1158015612796573d6000803e3d6000fd5b505050505050565b6127cb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611408565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161285496959493929190613a2b565b60606040518083038185885af1158015612872573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128979190613a8c565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129415750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129635761295c60646014546115d190919063ffffffff16565b9050612a27565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c2576012549050612a27565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a21576011549050612a27565b60135490505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a67578082015181840152602081019050612a4c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a8f82612a2d565b612a998185612a38565b9350612aa9818560208601612a49565b612ab281612a73565b840191505092915050565b60006020820190508181036000830152612ad78184612a84565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1482612ae9565b9050919050565b612b2481612b09565b8114612b2f57600080fd5b50565b600081359050612b4181612b1b565b92915050565b6000819050919050565b612b5a81612b47565b8114612b6557600080fd5b50565b600081359050612b7781612b51565b92915050565b60008060408385031215612b9457612b93612adf565b5b6000612ba285828601612b32565b9250506020612bb385828601612b68565b9150509250929050565b60008115159050919050565b612bd281612bbd565b82525050565b6000602082019050612bed6000830184612bc9565b92915050565b612bfc81612b47565b82525050565b6000602082019050612c176000830184612bf3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612c4257612c41612c1d565b5b8235905067ffffffffffffffff811115612c5f57612c5e612c22565b5b602083019150836020820283011115612c7b57612c7a612c27565b5b9250929050565b612c8b81612bbd565b8114612c9657600080fd5b50565b600081359050612ca881612c82565b92915050565b600080600060408486031215612cc757612cc6612adf565b5b600084013567ffffffffffffffff811115612ce557612ce4612ae4565b5b612cf186828701612c2c565b93509350506020612d0486828701612c99565b9150509250925092565b600080600060608486031215612d2757612d26612adf565b5b6000612d3586828701612b32565b9350506020612d4686828701612b32565b9250506040612d5786828701612b68565b9150509250925092565b600060208284031215612d7757612d76612adf565b5b6000612d8584828501612b32565b91505092915050565b600060ff82169050919050565b612da481612d8e565b82525050565b6000602082019050612dbf6000830184612d9b565b92915050565b600080600060608486031215612dde57612ddd612adf565b5b6000612dec86828701612b32565b9350506020612dfd86828701612b32565b9250506040612e0e86828701612b32565b9150509250925092565b600080600060608486031215612e3157612e30612adf565b5b6000612e3f86828701612b68565b9350506020612e5086828701612b68565b9250506040612e6186828701612b68565b9150509250925092565b612e7481612b09565b82525050565b6000602082019050612e8f6000830184612e6b565b92915050565b60008060408385031215612eac57612eab612adf565b5b6000612eba85828601612b32565b9250506020612ecb85828601612b32565b9150509250929050565b600080600080600080600060e0888a031215612ef457612ef3612adf565b5b6000612f028a828b01612b68565b9750506020612f138a828b01612b68565b9650506040612f248a828b01612b68565b9550506060612f358a828b01612b68565b9450506080612f468a828b01612b68565b93505060a0612f578a828b01612b68565b92505060c0612f688a828b01612b68565b91505092959891949750929550565b6000612f8282612ae9565b9050919050565b612f9281612f77565b8114612f9d57600080fd5b50565b600081359050612faf81612f89565b92915050565b600060208284031215612fcb57612fca612adf565b5b6000612fd984828501612fa0565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613018600683612a38565b915061302382612fe2565b602082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130b782612b47565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130e9576130e861307d565b5b600182019050919050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b6000613150602e83612a38565b915061315b826130f4565b604082019050919050565b6000602082019050818103600083015261317f81613143565b9050919050565b60008151905061319581612b51565b92915050565b6000602082840312156131b1576131b0612adf565b5b60006131bf84828501613186565b91505092915050565b60006040820190506131dd6000830185612e6b565b6131ea6020830184612bf3565b9392505050565b60008151905061320081612c82565b92915050565b60006020828403121561321c5761321b612adf565b5b600061322a848285016131f1565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061328f602c83612a38565b915061329a82613233565b604082019050919050565b600060208201905081810360008301526132be81613282565b9050919050565b6000819050919050565b60006132ea6132e56132e084612ae9565b6132c5565b612ae9565b9050919050565b60006132fc826132cf565b9050919050565b600061330e826132f1565b9050919050565b61331e81613303565b82525050565b60006020820190506133396000830184613315565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061339b602483612a38565b91506133a68261333f565b604082019050919050565b600060208201905081810360008301526133ca8161338e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061342d602283612a38565b9150613438826133d1565b604082019050919050565b6000602082019050818103600083015261345c81613420565b9050919050565b600061346e82612b47565b915061347983612b47565b92508282039050818111156134915761349061307d565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134f3602583612a38565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613585602383612a38565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000613617603183612a38565b9150613622826135bb565b604082019050919050565b600060208201905081810360008301526136468161360a565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b6000613683600e83612a38565b915061368e8261364d565b602082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b60006136ef601e83612a38565b91506136fa826136b9565b602082019050919050565b6000602082019050818103600083015261371e816136e2565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061375b601183612a38565b915061376682613725565b602082019050919050565b6000602082019050818103600083015261378a8161374e565b9050919050565b600061379c82612b47565b91506137a783612b47565b92508282019050808211156137bf576137be61307d565b5b92915050565b60006137d082612b47565b91506137db83612b47565b92508282026137e981612b47565b91508282048414831517613800576137ff61307d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061384182612b47565b915061384c83612b47565b92508261385c5761385b613807565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506138a581612b1b565b92915050565b6000602082840312156138c1576138c0612adf565b5b60006138cf84828501613896565b91505092915050565b6000819050919050565b60006138fd6138f86138f3846138d8565b6132c5565b612b47565b9050919050565b61390d816138e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61394881612b09565b82525050565b600061395a838361393f565b60208301905092915050565b6000602082019050919050565b600061397e82613913565b613988818561391e565b93506139938361392f565b8060005b838110156139c45781516139ab888261394e565b97506139b683613966565b925050600181019050613997565b5085935050505092915050565b600060a0820190506139e66000830188612bf3565b6139f36020830187613904565b8181036040830152613a058186613973565b9050613a146060830185612e6b565b613a216080830184612bf3565b9695505050505050565b600060c082019050613a406000830189612e6b565b613a4d6020830188612bf3565b613a5a6040830187613904565b613a676060830186613904565b613a746080830185612e6b565b613a8160a0830184612bf3565b979650505050505050565b600080600060608486031215613aa557613aa4612adf565b5b6000613ab386828701613186565b9350506020613ac486828701613186565b9250506040613ad586828701613186565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122022ce858dc9205bc61c7086178cc7e4d2e00152673be4d73257bbe47789e82ba164736f6c63430008130033

Deployed Bytecode Sourcemap

4829:11577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7297:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8064:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8203:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10722:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15751:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7520:67;;;;;;;;;;;;;:::i;:::-;;3733:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7447:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5259:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10170:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10914:195;;;;;;;;;;;;;:::i;:::-;;8754:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7677:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9612:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6580:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6511:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6444:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7593:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11117:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7370:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5377:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7786:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7931:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10522:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9090:514;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3826:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7297:67;7334:13;7357:5;;;;;;;;;;;;;;;;;7350:12;;7297:67;:::o;8064:133::-;8139:4;8146:37;8155:10;8167:7;8176:6;8146:8;:37::i;:::-;8191:4;8184:11;;8064:133;;;;:::o;8203:132::-;8256:7;8273:60;8311:21;8329:1;8311:9;:21::i;:::-;8273:33;8290:15;6129:42;8290:9;:15::i;:::-;8273:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;8266:67;;8203:132;:::o;10722:184::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10819:6:::1;10815:84;10833:9;;:16;;10829:1;:20;10815:84;;;10888:8;10866:5;:19;10872:9;;10882:1;10872:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10866:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;10851:3;;;;;:::i;:::-;;;;10815:84;;;;10722:184:::0;;;:::o;15751:309::-;15849:4;15866:36;15876:6;15884:9;15895:6;15866:9;:36::i;:::-;15913:117;15922:6;15930:10;15942:87;15978:6;15942:87;;;;;;;;;;;;;;;;;:11;:19;15954:6;15942:19;;;;;;;;;;;;;;;:31;15962:10;15942:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;15913:8;:117::i;:::-;16048:4;16041:11;;15751:309;;;;;:::o;7520:67::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7581:4:::1;7564:14;;:21;;;;;;;;;;;;;;;;;;7520:67::o:0;3733:87::-;3788:4;3813:5;;;;;;;;;;;3802:16;;:7;:16;;;3795:23;;3733:87;;;:::o;7447:67::-;7488:5;5064:1;7496:16;;7447:67;:::o;5259:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;10170:344::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10319:10:::1;10298:18;;:31;;;;;;;;;;;;;;;;;;10352:10;10331:18;;:31;;;;;;;;;;;;;;;;;;10387:12;10364:20;;:35;;;;;;;;;;;;;;;;;;10436:4;10410:11;:23;10422:10;10410:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;10468:4;10442:11;:23;10454:10;10442:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;10502:4;10474:11;:25;10486:12;10474:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;10170:344:::0;;;:::o;10914:195::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10966:14:::1;10983:24;11001:4;10983:9;:24::i;:::-;10966:41;;11030:13;;11021:6;:22;11018:51;;;11054:13;;11045:22;;11018:51;11079:22;11094:6;11079:14;:22::i;:::-;10955:154;10914:195::o:0;8754:328::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8909:11:::1;8896:10;:24;;;;8938:53;8983:6;8938:32;8955:14;8938:12;;:16;;:32;;;;:::i;:::-;:36;;:53;;;;:::i;:::-;8922:13;:69;;;;9020:54;9066:6;9020:33;9037:15;9020:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;9003:14;:71;;;;8754:328:::0;;;:::o;7677:103::-;7743:7;7760:9;:18;7770:7;7760:18;;;;;;;;;;;;;;;;7753:25;;7677:103;;;:::o;9612:550::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9712:13:::1;9728:33;9755:5;9728:22;9745:4;9728:12;;:16;;:22;;;;:::i;:::-;:26;;:33;;;;:::i;:::-;9712:49;;9763:19;9785:34;9813:5;9785:23;9802:5;9785:12;;:16;;:23;;;;:::i;:::-;:27;;:34;;;;:::i;:::-;9763:56;;9821:17;9841:36;9871:5;9841:25;9858:7;9841:12;;:16;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;9821:56;;9903:5;9888:12;:20;;;;9927:11;9910:14;:28;;;;9958:9;9940:15;:27;;;;9978:13;9994:30;10019:4;9994:20;10012:1;9994:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;9978:46;;10052:5;10043;:14;;:38;;;;;10076:5;10061:11;:20;;10043:38;:60;;;;;10098:5;10085:9;:18;;10043:60;10035:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;9701:461;;;;9612:550:::0;;;:::o;6580:63::-;;;;:::o;6511:62::-;;;;:::o;6444:60::-;;;;:::o;7593:78::-;7645:7;7663:5;;;;;;;;;;;7656:12;;7593:78;:::o;11117:242::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11203:15:::1;11221:63;11280:3;11221:54;11267:7;11228:8;11221:26;;;11256:4;11221:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;11203:81;;11302:8;11295:25;;;11321:20;;;;;;;;;;;11343:7;11295:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11192:167;11117:242:::0;;:::o;7370:71::-;7409:13;7432:7;;;;;;;;;;;;;;;;;7425:14;;7370:71;:::o;5377:19::-;;;;;;;;;;;;;:::o;7786:139::-;7864:4;7871:40;7881:10;7893:9;7904:6;7871:9;:40::i;:::-;7919:4;7912:11;;7786:139;;;;:::o;7931:127::-;8012:7;8029:11;:18;8041:5;8029:18;;;;;;;;;;;;;;;:27;8048:7;8029:27;;;;;;;;;;;;;;;;8022:34;;7931:127;;;;:::o;10522:192::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10622:6:::1;10618:89;10636:9;;:16;;10632:1;:20;10618:89;;;10697:8;10669:11;:25;10681:9;;10691:1;10681:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10669:25;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;10654:3;;;;;:::i;:::-;;;;10618:89;;;;10522:192:::0;;;:::o;9090:514::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9285:10:::1;9270:12;:25;;;;9312:10;9297:12;:25;;;;9334:5;9324:7;:15;;;;9358:12;9341:14;:29;;;;9383:6;9372:8;:17;;;;9401:5;9391:7;:15;;;;9422:6;9408:11;:20;;;;9459:18;9475:1;9459:11;;:15;;:18;;;;:::i;:::-;9447:8;;:30;;:63;;;;;9492:18;9508:1;9492:11;;:15;;:18;;;;:::i;:::-;9481:7;;:29;;9447:63;:100;;;;;9529:18;9545:1;9529:11;;:15;;:18;;;;:::i;:::-;9514:11;;:33;;9447:100;9439:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;9090:514:::0;;;;;;;:::o;3826:111::-;3692:19;3700:10;3692:7;:19::i;:::-;3684:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3900:3:::1;3892:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3910:25;3931:3;3910:25;;;;;;:::i;:::-;;;;;;;;3826:111:::0;:::o;16068:335::-;16178:1;16161:19;;:5;:19;;;16153:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16259:1;16240:21;;:7;:21;;;16232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16341:6;16311:11;:18;16323:5;16311:18;;;;;;;;;;;;;;;:27;16330:7;16311:27;;;;;;;;;;;;;;;:36;;;;16379:7;16363:32;;16372:5;16363:32;;;16388:6;16363:32;;;;;;:::i;:::-;;;;;;;;16068:335;;;:::o;1472:98::-;1530:7;1561:1;1557;:5;;;;:::i;:::-;1550:12;;1472:98;;;;:::o;14310:1433::-;14425:1;14407:20;;:6;:20;;;14399:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14509:1;14488:23;;:9;:23;;;14480:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14580:17;14590:6;14580:9;:17::i;:::-;14570:6;:27;;14562:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;14665:11;:19;14677:6;14665:19;;;;;;;;;;;;;;;;;;;;;;;;;14664:20;:47;;;;;14689:11;:22;14701:9;14689:22;;;;;;;;;;;;;;;;;;;;;;;;;14688:23;14664:47;14661:95;;;14721:14;;;;;;;;;;;14713:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;14661:95;14770:11;:19;14782:6;14770:19;;;;;;;;;;;;;;;;;;;;;;;;;14769:20;:47;;;;;14794:11;:22;14806:9;14794:22;;;;;;;;;;;;;;;;;;;;;;;;;14793:23;14769:47;:77;;;;;14841:4;;;;;;;;;;;14820:26;;:9;:26;;;;14769:77;:107;;;;;6129:42;14850:26;;:9;:26;;;;14769:107;14766:220;;;14934:15;;14897:32;14922:6;14897:9;:20;14907:9;14897:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14896:53;;14888:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;14766:220;15009:4;;;;;;;;;;;14999:14;;:6;:14;;;14996:124;;15033:14;;15023:6;:24;;:47;;;;15051:11;:19;15063:6;15051:19;;;;;;;;;;;;;;;;;;;;;;;;;15023:47;:73;;;;15074:11;:22;15086:9;15074:22;;;;;;;;;;;;;;;;;;;;;;;;;15023:73;15015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14996:124;15148:12;;15138:6;:22;;:45;;;;15164:11;:19;15176:6;15164:19;;;;;;;;;;;;;;;;;;;;;;;;;15138:45;:71;;;;15187:11;:22;15199:9;15187:22;;;;;;;;;;;;;;;;;;;;;;;;;15138:71;15130:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;15259:4;;;;;;;;;;;15246:17;;:9;:17;;;:41;;;;;15268:11;:19;15280:6;15268:19;;;;;;;;;;;;;;;;;;;;;;;;;15267:20;15246:41;15243:71;;;15310:1;15289:9;;:23;;;;;;;:::i;:::-;;;;;;;;15243:71;15327:45;15346:6;15354:9;15365:6;15327:18;:45::i;:::-;15324:105;;;15374:29;15389:13;;15374:14;:29::i;:::-;15425:1;15405:9;:22;;;;15324:105;15459:29;15481:6;15459:9;:17;15469:6;15459:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;15439:9;:17;15449:6;15439:17;;;;;;;;;;;;;;;:49;;;;15499:22;15524:32;15538:6;15546:9;15524:13;:32::i;:::-;:78;;15596:6;15524:78;;;15559:34;15567:6;15575:9;15586:6;15559:7;:34::i;:::-;15524:78;15499:103;;15636:40;15661:14;15636:9;:20;15646:9;15636:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;15613:9;:20;15623:9;15613:20;;;;;;;;;;;;;;;:63;;;;15709:9;15692:43;;15701:6;15692:43;;;15720:14;15692:43;;;;;;:::i;:::-;;;;;;;;14388:1355;14310:1433;;;:::o;1896:240::-;2016:7;2074:1;2069;:6;;2077:12;2061:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2116:1;2112;:5;2105:12;;1896:240;;;;;:::o;11367:1063::-;5746:4;5735:8;;:15;;;;;;;;;;;;;;;;;;11438:20:::1;11461:66;11525:1;11462:57;11504:14;;11462:37;11486:12;;11462:19;11479:1;11462:12;;:16;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;11461:63;;:66;;;;:::i;:::-;11438:89;;11538:32;11573:42;11602:12;11573:24;11584:12;;11573:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;11538:77;;11626:14;11643:36;11654:24;11643:6;:10;;:36;;;;:::i;:::-;11626:53;;11690:22;11715:21;11690:46;;11747:24;11764:6;11747:16;:24::i;:::-;11782:20;11805:41;11831:14;11805:21;:25;;:41;;;;:::i;:::-;11782:64;;11857:19;11878:48;11895:30;11912:12;;11895;:16;;:30;;;;:::i;:::-;11878:12;:16;;:48;;;;:::i;:::-;11857:69;;11937:29;11969;11985:12;;11969:11;:15;;:29;;;;:::i;:::-;11937:61;;12044:1;12012:21;:34;12009:103;;;12048:61;12061:24;12087:21;12048:12;:61::i;:::-;12009:103;12122:20;12145:36;12168:12;;12145:18;12161:1;12145:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;12122:59;;12210:1;12195:12;:16;12192:73;;;12221:18;;;;;;;;;;;12213:36;;:50;12250:12;12213:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;12192:73;12275:23;12301:21;12275:47;;12362:1;12336:15;:28;12333:90;;;12374:20;;;;;;;;;;;12366:38;;:55;12405:15;12366:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;12333:90;11427:1003;;;;;;;;;5766:5:::0;5755:8;;:16;;;;;;;;;;;;;;;;;;11367:1063;:::o;1578:98::-;1636:7;1667:1;1663;:5;;;;:::i;:::-;1656:12;;1578:98;;;;:::o;1684:::-;1742:7;1773:1;1769;:5;;;;:::i;:::-;1762:12;;1684:98;;;;:::o;1366:::-;1424:7;1455:1;1451;:5;;;;:::i;:::-;1444:12;;1366:98;;;;:::o;8343:403::-;8445:4;8462:13;8488:14;;8478:6;:24;;8462:40;;8513:19;8563:13;;8535:24;8553:4;8535:9;:24::i;:::-;:41;;8513:63;;8595:8;;;;;;;;;;;8594:9;:24;;;;;8607:11;;;;;;;;;;;8594:24;:42;;;;;8622:14;;;;;;;;;;;8594:42;:54;;;;;8640:8;8594:54;:78;;;;;8653:11;:19;8665:6;8653:19;;;;;;;;;;;;;;;;;;;;;;;;;8652:20;8594:78;:99;;;;;8689:4;;;;;;;;;;;8676:17;;:9;:17;;;8594:99;:126;;;;;8710:10;;8697:9;;:23;;8594:126;:144;;;;;8724:14;8594:144;8587:151;;;;8343:403;;;;;:::o;13231:160::-;13312:4;13337:11;:19;13349:6;13337:19;;;;;;;;;;;;;;;;;;;;;;;;;13336:20;:47;;;;;13361:11;:22;13373:9;13361:22;;;;;;;;;;;;;;;;;;;;;;;;;13360:23;13336:47;13329:54;;13231:160;;;;:::o;13712:590::-;13798:7;13854:1;13821:30;13833:6;13841:9;13821:11;:30::i;:::-;:34;13818:462;;;13867:17;13887:59;13915:30;13927:6;13935:9;13915:11;:30::i;:::-;13887:23;13898:11;;13887:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;13867:79;;13984:39;14013:9;13984;:24;14002:4;13984:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;13957:9;:24;13975:4;13957:24;;;;;;;;;;;;;;;:66;;;;14064:4;14039:42;;14048:6;14039:42;;;14071:9;14039:42;;;;;;:::i;:::-;;;;;;;;14113:1;14095:7;;:20;:64;;;;;14152:7;;14119:30;14131:6;14139:9;14119:11;:30::i;:::-;:40;14095:64;14092:148;;;14161:77;14179:4;6129:42;14201:36;14229:7;;14201:23;14212:11;;14201:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;14161:9;:77::i;:::-;14092:148;14257:21;14268:9;14257:6;:10;;:21;;;;:::i;:::-;14250:28;;;;;13818:462;14288:6;14281:13;;13712:590;;;;;;:::o;12789:434::-;12855:21;12893:1;12879:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12855:40;;12924:4;12906;12911:1;12906:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12950:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12940:4;12945:1;12940:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12974:53;12991:4;13006:6;;;;;;;;;;;13015:11;12974:8;:53::i;:::-;13038:6;;;;;;;;;;;:57;;;13110:11;13136:1;13152:4;13179;13199:15;13038:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12844:379;12789:434;:::o;12438:343::-;12519:53;12536:4;12551:6;;;;;;;;;;;12560:11;12519:8;:53::i;:::-;12583:6;;;;;;;;;;;:22;;;12613:9;12646:4;12666:11;12692:1;12708;12724:18;;;;;;;;;;;12757:15;12583:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12438:343;;:::o;13399:305::-;13478:7;13501:5;:13;13507:6;13501:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;13518:5;:16;13524:9;13518:16;;;;;;;;;;;;;;;;;;;;;;;;;13501:33;13498:76;;;13543:29;13567:3;13543:11;;:15;;:29;;;;:::i;:::-;13536:36;;;;13498:76;13600:4;;;;;;;;;;;13587:17;;:9;:17;;;13584:38;;13613:7;;13606:14;;;;13584:38;13645:4;;;;;;;;;;;13635:14;;:6;:14;;;13632:36;;13658:8;;13651:15;;;;13632:36;13685:11;;13678:18;;13399:305;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:117::-;3907:1;3904;3897:12;3921:117;4030:1;4027;4020:12;4044:117;4153:1;4150;4143:12;4184:568;4257:8;4267:6;4317:3;4310:4;4302:6;4298:17;4294:27;4284:122;;4325:79;;:::i;:::-;4284:122;4438:6;4425:20;4415:30;;4468:18;4460:6;4457:30;4454:117;;;4490:79;;:::i;:::-;4454:117;4604:4;4596:6;4592:17;4580:29;;4658:3;4650:4;4642:6;4638:17;4628:8;4624:32;4621:41;4618:128;;;4665:79;;:::i;:::-;4618:128;4184:568;;;;;:::o;4758:116::-;4828:21;4843:5;4828:21;:::i;:::-;4821:5;4818:32;4808:60;;4864:1;4861;4854:12;4808:60;4758:116;:::o;4880:133::-;4923:5;4961:6;4948:20;4939:29;;4977:30;5001:5;4977:30;:::i;:::-;4880:133;;;;:::o;5019:698::-;5111:6;5119;5127;5176:2;5164:9;5155:7;5151:23;5147:32;5144:119;;;5182:79;;:::i;:::-;5144:119;5330:1;5319:9;5315:17;5302:31;5360:18;5352:6;5349:30;5346:117;;;5382:79;;:::i;:::-;5346:117;5495:80;5567:7;5558:6;5547:9;5543:22;5495:80;:::i;:::-;5477:98;;;;5273:312;5624:2;5650:50;5692:7;5683:6;5672:9;5668:22;5650:50;:::i;:::-;5640:60;;5595:115;5019:698;;;;;:::o;5723:619::-;5800:6;5808;5816;5865:2;5853:9;5844:7;5840:23;5836:32;5833:119;;;5871:79;;:::i;:::-;5833:119;5991:1;6016:53;6061:7;6052:6;6041:9;6037:22;6016:53;:::i;:::-;6006:63;;5962:117;6118:2;6144:53;6189:7;6180:6;6169:9;6165:22;6144:53;:::i;:::-;6134:63;;6089:118;6246:2;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6217:118;5723:619;;;;;:::o;6348:329::-;6407:6;6456:2;6444:9;6435:7;6431:23;6427:32;6424:119;;;6462:79;;:::i;:::-;6424:119;6582:1;6607:53;6652:7;6643:6;6632:9;6628:22;6607:53;:::i;:::-;6597:63;;6553:117;6348:329;;;;:::o;6683:86::-;6718:7;6758:4;6751:5;6747:16;6736:27;;6683:86;;;:::o;6775:112::-;6858:22;6874:5;6858:22;:::i;:::-;6853:3;6846:35;6775:112;;:::o;6893:214::-;6982:4;7020:2;7009:9;7005:18;6997:26;;7033:67;7097:1;7086:9;7082:17;7073:6;7033:67;:::i;:::-;6893:214;;;;:::o;7113:619::-;7190:6;7198;7206;7255:2;7243:9;7234:7;7230:23;7226:32;7223:119;;;7261:79;;:::i;:::-;7223:119;7381:1;7406:53;7451:7;7442:6;7431:9;7427:22;7406:53;:::i;:::-;7396:63;;7352:117;7508:2;7534:53;7579:7;7570:6;7559:9;7555:22;7534:53;:::i;:::-;7524:63;;7479:118;7636:2;7662:53;7707:7;7698:6;7687:9;7683:22;7662:53;:::i;:::-;7652:63;;7607:118;7113:619;;;;;:::o;7738:::-;7815:6;7823;7831;7880:2;7868:9;7859:7;7855:23;7851:32;7848:119;;;7886:79;;:::i;:::-;7848:119;8006:1;8031:53;8076:7;8067:6;8056:9;8052:22;8031:53;:::i;:::-;8021:63;;7977:117;8133:2;8159:53;8204:7;8195:6;8184:9;8180:22;8159:53;:::i;:::-;8149:63;;8104:118;8261:2;8287:53;8332:7;8323:6;8312:9;8308:22;8287:53;:::i;:::-;8277:63;;8232:118;7738:619;;;;;:::o;8363:118::-;8450:24;8468:5;8450:24;:::i;:::-;8445:3;8438:37;8363:118;;:::o;8487:222::-;8580:4;8618:2;8607:9;8603:18;8595:26;;8631:71;8699:1;8688:9;8684:17;8675:6;8631:71;:::i;:::-;8487:222;;;;:::o;8715:474::-;8783:6;8791;8840:2;8828:9;8819:7;8815:23;8811:32;8808:119;;;8846:79;;:::i;:::-;8808:119;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;8715:474;;;;;:::o;9195:1203::-;9308:6;9316;9324;9332;9340;9348;9356;9405:3;9393:9;9384:7;9380:23;9376:33;9373:120;;;9412:79;;:::i;:::-;9373:120;9532:1;9557:53;9602:7;9593:6;9582:9;9578:22;9557:53;:::i;:::-;9547:63;;9503:117;9659:2;9685:53;9730:7;9721:6;9710:9;9706:22;9685:53;:::i;:::-;9675:63;;9630:118;9787:2;9813:53;9858:7;9849:6;9838:9;9834:22;9813:53;:::i;:::-;9803:63;;9758:118;9915:2;9941:53;9986:7;9977:6;9966:9;9962:22;9941:53;:::i;:::-;9931:63;;9886:118;10043:3;10070:53;10115:7;10106:6;10095:9;10091:22;10070:53;:::i;:::-;10060:63;;10014:119;10172:3;10199:53;10244:7;10235:6;10224:9;10220:22;10199:53;:::i;:::-;10189:63;;10143:119;10301:3;10328:53;10373:7;10364:6;10353:9;10349:22;10328:53;:::i;:::-;10318:63;;10272:119;9195:1203;;;;;;;;;;:::o;10404:104::-;10449:7;10478:24;10496:5;10478:24;:::i;:::-;10467:35;;10404:104;;;:::o;10514:138::-;10595:32;10621:5;10595:32;:::i;:::-;10588:5;10585:43;10575:71;;10642:1;10639;10632:12;10575:71;10514:138;:::o;10658:155::-;10712:5;10750:6;10737:20;10728:29;;10766:41;10801:5;10766:41;:::i;:::-;10658:155;;;;:::o;10819:345::-;10886:6;10935:2;10923:9;10914:7;10910:23;10906:32;10903:119;;;10941:79;;:::i;:::-;10903:119;11061:1;11086:61;11139:7;11130:6;11119:9;11115:22;11086:61;:::i;:::-;11076:71;;11032:125;10819:345;;;;:::o;11170:156::-;11310:8;11306:1;11298:6;11294:14;11287:32;11170:156;:::o;11332:365::-;11474:3;11495:66;11559:1;11554:3;11495:66;:::i;:::-;11488:73;;11570:93;11659:3;11570:93;:::i;:::-;11688:2;11683:3;11679:12;11672:19;;11332:365;;;:::o;11703:419::-;11869:4;11907:2;11896:9;11892:18;11884:26;;11956:9;11950:4;11946:20;11942:1;11931:9;11927:17;11920:47;11984:131;12110:4;11984:131;:::i;:::-;11976:139;;11703:419;;;:::o;12128:180::-;12176:77;12173:1;12166:88;12273:4;12270:1;12263:15;12297:4;12294:1;12287:15;12314:180;12362:77;12359:1;12352:88;12459:4;12456:1;12449:15;12483:4;12480:1;12473:15;12500:233;12539:3;12562:24;12580:5;12562:24;:::i;:::-;12553:33;;12608:66;12601:5;12598:77;12595:103;;12678:18;;:::i;:::-;12595:103;12725:1;12718:5;12714:13;12707:20;;12500:233;;;:::o;12739:::-;12879:34;12875:1;12867:6;12863:14;12856:58;12948:16;12943:2;12935:6;12931:15;12924:41;12739:233;:::o;12978:366::-;13120:3;13141:67;13205:2;13200:3;13141:67;:::i;:::-;13134:74;;13217:93;13306:3;13217:93;:::i;:::-;13335:2;13330:3;13326:12;13319:19;;12978:366;;;:::o;13350:419::-;13516:4;13554:2;13543:9;13539:18;13531:26;;13603:9;13597:4;13593:20;13589:1;13578:9;13574:17;13567:47;13631:131;13757:4;13631:131;:::i;:::-;13623:139;;13350:419;;;:::o;13775:143::-;13832:5;13863:6;13857:13;13848:22;;13879:33;13906:5;13879:33;:::i;:::-;13775:143;;;;:::o;13924:351::-;13994:6;14043:2;14031:9;14022:7;14018:23;14014:32;14011:119;;;14049:79;;:::i;:::-;14011:119;14169:1;14194:64;14250:7;14241:6;14230:9;14226:22;14194:64;:::i;:::-;14184:74;;14140:128;13924:351;;;;:::o;14281:332::-;14402:4;14440:2;14429:9;14425:18;14417:26;;14453:71;14521:1;14510:9;14506:17;14497:6;14453:71;:::i;:::-;14534:72;14602:2;14591:9;14587:18;14578:6;14534:72;:::i;:::-;14281:332;;;;;:::o;14619:137::-;14673:5;14704:6;14698:13;14689:22;;14720:30;14744:5;14720:30;:::i;:::-;14619:137;;;;:::o;14762:345::-;14829:6;14878:2;14866:9;14857:7;14853:23;14849:32;14846:119;;;14884:79;;:::i;:::-;14846:119;15004:1;15029:61;15082:7;15073:6;15062:9;15058:22;15029:61;:::i;:::-;15019:71;;14975:125;14762:345;;;;:::o;15113:231::-;15253:34;15249:1;15241:6;15237:14;15230:58;15322:14;15317:2;15309:6;15305:15;15298:39;15113:231;:::o;15350:366::-;15492:3;15513:67;15577:2;15572:3;15513:67;:::i;:::-;15506:74;;15589:93;15678:3;15589:93;:::i;:::-;15707:2;15702:3;15698:12;15691:19;;15350:366;;;:::o;15722:419::-;15888:4;15926:2;15915:9;15911:18;15903:26;;15975:9;15969:4;15965:20;15961:1;15950:9;15946:17;15939:47;16003:131;16129:4;16003:131;:::i;:::-;15995:139;;15722:419;;;:::o;16147:60::-;16175:3;16196:5;16189:12;;16147:60;;;:::o;16213:142::-;16263:9;16296:53;16314:34;16323:24;16341:5;16323:24;:::i;:::-;16314:34;:::i;:::-;16296:53;:::i;:::-;16283:66;;16213:142;;;:::o;16361:126::-;16411:9;16444:37;16475:5;16444:37;:::i;:::-;16431:50;;16361:126;;;:::o;16493:134::-;16551:9;16584:37;16615:5;16584:37;:::i;:::-;16571:50;;16493:134;;;:::o;16633:147::-;16728:45;16767:5;16728:45;:::i;:::-;16723:3;16716:58;16633:147;;:::o;16786:238::-;16887:4;16925:2;16914:9;16910:18;16902:26;;16938:79;17014:1;17003:9;16999:17;16990:6;16938:79;:::i;:::-;16786:238;;;;:::o;17030:223::-;17170:34;17166:1;17158:6;17154:14;17147:58;17239:6;17234:2;17226:6;17222:15;17215:31;17030:223;:::o;17259:366::-;17401:3;17422:67;17486:2;17481:3;17422:67;:::i;:::-;17415:74;;17498:93;17587:3;17498:93;:::i;:::-;17616:2;17611:3;17607:12;17600:19;;17259:366;;;:::o;17631:419::-;17797:4;17835:2;17824:9;17820:18;17812:26;;17884:9;17878:4;17874:20;17870:1;17859:9;17855:17;17848:47;17912:131;18038:4;17912:131;:::i;:::-;17904:139;;17631:419;;;:::o;18056:221::-;18196:34;18192:1;18184:6;18180:14;18173:58;18265:4;18260:2;18252:6;18248:15;18241:29;18056:221;:::o;18283:366::-;18425:3;18446:67;18510:2;18505:3;18446:67;:::i;:::-;18439:74;;18522:93;18611:3;18522:93;:::i;:::-;18640:2;18635:3;18631:12;18624:19;;18283:366;;;:::o;18655:419::-;18821:4;18859:2;18848:9;18844:18;18836:26;;18908:9;18902:4;18898:20;18894:1;18883:9;18879:17;18872:47;18936:131;19062:4;18936:131;:::i;:::-;18928:139;;18655:419;;;:::o;19080:194::-;19120:4;19140:20;19158:1;19140:20;:::i;:::-;19135:25;;19174:20;19192:1;19174:20;:::i;:::-;19169:25;;19218:1;19215;19211:9;19203:17;;19242:1;19236:4;19233:11;19230:37;;;19247:18;;:::i;:::-;19230:37;19080:194;;;;:::o;19280:224::-;19420:34;19416:1;19408:6;19404:14;19397:58;19489:7;19484:2;19476:6;19472:15;19465:32;19280:224;:::o;19510:366::-;19652:3;19673:67;19737:2;19732:3;19673:67;:::i;:::-;19666:74;;19749:93;19838:3;19749:93;:::i;:::-;19867:2;19862:3;19858:12;19851:19;;19510:366;;;:::o;19882:419::-;20048:4;20086:2;20075:9;20071:18;20063:26;;20135:9;20129:4;20125:20;20121:1;20110:9;20106:17;20099:47;20163:131;20289:4;20163:131;:::i;:::-;20155:139;;19882:419;;;:::o;20307:222::-;20447:34;20443:1;20435:6;20431:14;20424:58;20516:5;20511:2;20503:6;20499:15;20492:30;20307:222;:::o;20535:366::-;20677:3;20698:67;20762:2;20757:3;20698:67;:::i;:::-;20691:74;;20774:93;20863:3;20774:93;:::i;:::-;20892:2;20887:3;20883:12;20876:19;;20535:366;;;:::o;20907:419::-;21073:4;21111:2;21100:9;21096:18;21088:26;;21160:9;21154:4;21150:20;21146:1;21135:9;21131:17;21124:47;21188:131;21314:4;21188:131;:::i;:::-;21180:139;;20907:419;;;:::o;21332:236::-;21472:34;21468:1;21460:6;21456:14;21449:58;21541:19;21536:2;21528:6;21524:15;21517:44;21332:236;:::o;21574:366::-;21716:3;21737:67;21801:2;21796:3;21737:67;:::i;:::-;21730:74;;21813:93;21902:3;21813:93;:::i;:::-;21931:2;21926:3;21922:12;21915:19;;21574:366;;;:::o;21946:419::-;22112:4;22150:2;22139:9;22135:18;22127:26;;22199:9;22193:4;22189:20;22185:1;22174:9;22170:17;22163:47;22227:131;22353:4;22227:131;:::i;:::-;22219:139;;21946:419;;;:::o;22371:164::-;22511:16;22507:1;22499:6;22495:14;22488:40;22371:164;:::o;22541:366::-;22683:3;22704:67;22768:2;22763:3;22704:67;:::i;:::-;22697:74;;22780:93;22869:3;22780:93;:::i;:::-;22898:2;22893:3;22889:12;22882:19;;22541:366;;;:::o;22913:419::-;23079:4;23117:2;23106:9;23102:18;23094:26;;23166:9;23160:4;23156:20;23152:1;23141:9;23137:17;23130:47;23194:131;23320:4;23194:131;:::i;:::-;23186:139;;22913:419;;;:::o;23338:180::-;23478:32;23474:1;23466:6;23462:14;23455:56;23338:180;:::o;23524:366::-;23666:3;23687:67;23751:2;23746:3;23687:67;:::i;:::-;23680:74;;23763:93;23852:3;23763:93;:::i;:::-;23881:2;23876:3;23872:12;23865:19;;23524:366;;;:::o;23896:419::-;24062:4;24100:2;24089:9;24085:18;24077:26;;24149:9;24143:4;24139:20;24135:1;24124:9;24120:17;24113:47;24177:131;24303:4;24177:131;:::i;:::-;24169:139;;23896:419;;;:::o;24321:167::-;24461:19;24457:1;24449:6;24445:14;24438:43;24321:167;:::o;24494:366::-;24636:3;24657:67;24721:2;24716:3;24657:67;:::i;:::-;24650:74;;24733:93;24822:3;24733:93;:::i;:::-;24851:2;24846:3;24842:12;24835:19;;24494:366;;;:::o;24866:419::-;25032:4;25070:2;25059:9;25055:18;25047:26;;25119:9;25113:4;25109:20;25105:1;25094:9;25090:17;25083:47;25147:131;25273:4;25147:131;:::i;:::-;25139:139;;24866:419;;;:::o;25291:191::-;25331:3;25350:20;25368:1;25350:20;:::i;:::-;25345:25;;25384:20;25402:1;25384:20;:::i;:::-;25379:25;;25427:1;25424;25420:9;25413:16;;25448:3;25445:1;25442:10;25439:36;;;25455:18;;:::i;:::-;25439:36;25291:191;;;;:::o;25488:410::-;25528:7;25551:20;25569:1;25551:20;:::i;:::-;25546:25;;25585:20;25603:1;25585:20;:::i;:::-;25580:25;;25640:1;25637;25633:9;25662:30;25680:11;25662:30;:::i;:::-;25651:41;;25841:1;25832:7;25828:15;25825:1;25822:22;25802:1;25795:9;25775:83;25752:139;;25871:18;;:::i;:::-;25752:139;25536:362;25488:410;;;;:::o;25904:180::-;25952:77;25949:1;25942:88;26049:4;26046:1;26039:15;26073:4;26070:1;26063:15;26090:185;26130:1;26147:20;26165:1;26147:20;:::i;:::-;26142:25;;26181:20;26199:1;26181:20;:::i;:::-;26176:25;;26220:1;26210:35;;26225:18;;:::i;:::-;26210:35;26267:1;26264;26260:9;26255:14;;26090:185;;;;:::o;26281:180::-;26329:77;26326:1;26319:88;26426:4;26423:1;26416:15;26450:4;26447:1;26440:15;26467:143;26524:5;26555:6;26549:13;26540:22;;26571:33;26598:5;26571:33;:::i;:::-;26467:143;;;;:::o;26616:351::-;26686:6;26735:2;26723:9;26714:7;26710:23;26706:32;26703:119;;;26741:79;;:::i;:::-;26703:119;26861:1;26886:64;26942:7;26933:6;26922:9;26918:22;26886:64;:::i;:::-;26876:74;;26832:128;26616:351;;;;:::o;26973:85::-;27018:7;27047:5;27036:16;;26973:85;;;:::o;27064:158::-;27122:9;27155:61;27173:42;27182:32;27208:5;27182:32;:::i;:::-;27173:42;:::i;:::-;27155:61;:::i;:::-;27142:74;;27064:158;;;:::o;27228:147::-;27323:45;27362:5;27323:45;:::i;:::-;27318:3;27311:58;27228:147;;:::o;27381:114::-;27448:6;27482:5;27476:12;27466:22;;27381:114;;;:::o;27501:184::-;27600:11;27634:6;27629:3;27622:19;27674:4;27669:3;27665:14;27650:29;;27501:184;;;;:::o;27691:132::-;27758:4;27781:3;27773:11;;27811:4;27806:3;27802:14;27794:22;;27691:132;;;:::o;27829:108::-;27906:24;27924:5;27906:24;:::i;:::-;27901:3;27894:37;27829:108;;:::o;27943:179::-;28012:10;28033:46;28075:3;28067:6;28033:46;:::i;:::-;28111:4;28106:3;28102:14;28088:28;;27943:179;;;;:::o;28128:113::-;28198:4;28230;28225:3;28221:14;28213:22;;28128:113;;;:::o;28277:732::-;28396:3;28425:54;28473:5;28425:54;:::i;:::-;28495:86;28574:6;28569:3;28495:86;:::i;:::-;28488:93;;28605:56;28655:5;28605:56;:::i;:::-;28684:7;28715:1;28700:284;28725:6;28722:1;28719:13;28700:284;;;28801:6;28795:13;28828:63;28887:3;28872:13;28828:63;:::i;:::-;28821:70;;28914:60;28967:6;28914:60;:::i;:::-;28904:70;;28760:224;28747:1;28744;28740:9;28735:14;;28700:284;;;28704:14;29000:3;28993:10;;28401:608;;;28277:732;;;;:::o;29015:831::-;29278:4;29316:3;29305:9;29301:19;29293:27;;29330:71;29398:1;29387:9;29383:17;29374:6;29330:71;:::i;:::-;29411:80;29487:2;29476:9;29472:18;29463:6;29411:80;:::i;:::-;29538:9;29532:4;29528:20;29523:2;29512:9;29508:18;29501:48;29566:108;29669:4;29660:6;29566:108;:::i;:::-;29558:116;;29684:72;29752:2;29741:9;29737:18;29728:6;29684:72;:::i;:::-;29766:73;29834:3;29823:9;29819:19;29810:6;29766:73;:::i;:::-;29015:831;;;;;;;;:::o;29852:807::-;30101:4;30139:3;30128:9;30124:19;30116:27;;30153:71;30221:1;30210:9;30206:17;30197:6;30153:71;:::i;:::-;30234:72;30302:2;30291:9;30287:18;30278:6;30234:72;:::i;:::-;30316:80;30392:2;30381:9;30377:18;30368:6;30316:80;:::i;:::-;30406;30482:2;30471:9;30467:18;30458:6;30406:80;:::i;:::-;30496:73;30564:3;30553:9;30549:19;30540:6;30496:73;:::i;:::-;30579;30647:3;30636:9;30632:19;30623:6;30579:73;:::i;:::-;29852:807;;;;;;;;;:::o;30665:663::-;30753:6;30761;30769;30818:2;30806:9;30797:7;30793:23;30789:32;30786:119;;;30824:79;;:::i;:::-;30786:119;30944:1;30969:64;31025:7;31016:6;31005:9;31001:22;30969:64;:::i;:::-;30959:74;;30915:128;31082:2;31108:64;31164:7;31155:6;31144:9;31140:22;31108:64;:::i;:::-;31098:74;;31053:129;31221:2;31247:64;31303:7;31294:6;31283:9;31279:22;31247:64;:::i;:::-;31237:74;;31192:129;30665:663;;;;;:::o

Swarm Source

ipfs://22ce858dc9205bc61c7086178cc7e4d2e00152673be4d73257bbe47789e82ba1
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.