ETH Price: $2,495.14 (-0.95%)

Token

GELRWeave (GELR)
 

Overview

Max Total Supply

100,000,000,000 GELR

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
845,500,000 GELR

Value
$0.00
0xAB46bD41CB5CB97028E4946B5e90cE1473B3ab0e
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:
GELRWeave

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-14
*/

/*
                            GELRWeave: Release 001 
                   
                              Author lightclient
                              Compiled by gnomad

GELRWeave is a protocol implementation of EIP-7685, designed to seamlessly 
integrate and process general-purpose execution layer requests.

  --------------------------------------------------------------------------

                                  Contents
   Title                                                        Hypertext
   -----                                                           ------
   Website....................................................www.gelr.io
   Twitter..........................................twitter.com/GELRWeave
   Docs.........................................github.com/GELRWeave/GELR
   Community.........................................t.me/GELRWeavePORTAL
   EM...................................................shorturl.at/sULhJ
*/

pragma solidity 0.8.28;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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);
}

contract GELRWeave is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    mapping(uint256 => bool) public requestProcessed;

    address payable private _operationAddress;
    address payable private _developmentAddress;
    address payable private _marketingAddress;

    string private constant _name = unicode"GELRWeave";
    string private constant _symbol = unicode"GELR";

    uint256 private _initialBuyTax=15;
    uint256 private _initialSellTax=20;
    uint256 private _finalBuyTax=5;
    uint256 private _finalSellTax=5;
    uint256 private _reduceBuyTaxAt=15;
    uint256 private _reduceSellTaxAt=20;
    uint256 private _preventSwapBefore=25;
    uint256 private _transferTax=50;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 100000000000 * 10**_decimals;
    uint256 public _maxTxAmount = 890000000 * 10**_decimals;
    uint256 public _maxWalletSize = 890000000 * 10**_decimals;
    uint256 public _taxSwapThreshold= 6000000 * 10**_decimals;
    uint256 public _maxTaxSwap= 600000000 * 10**_decimals;
    
    event RequestAdded(uint256 indexed requestId, uint256 requestType);
    event RequestProcessed(uint256 indexed requestId);

    struct Request {
        uint256 requestType;
        bytes data;
    }

    Request[] public requests;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    uint256 private sellCount = 0;
    uint256 private lastSellBlock = 0;
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event TransferTaxUpdated(uint _tax);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _operationAddress = payable(_msgSender());
        _developmentAddress = payable (_msgSender());
        _marketingAddress = payable (_msgSender());

        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_operationAddress] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);

            if(_buyCount==0){
                taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);
            }
            if(_buyCount>0){
                taxAmount = amount.mul(_transferTax).div(100);
            }

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);
                _buyCount++;
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore) {
                if (block.number > lastSellBlock) {
                    sellCount = 0;
                }
                require(sellCount < 3, "Only 3 sells per block!");
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
                sellCount++;
                lastSellBlock = block.number;
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

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

    function addRequest(uint256 _requestType, bytes memory _data) public {
        uint256 requestId = requests.length;
            requests.push(Request(_requestType, _data));
            requestProcessed[requestId] = false;
            emit RequestAdded(requestId, _requestType);
        }

    function getRequestCount() public view returns (uint256) {
        return requests.length;
    }

    function getRequest(uint256 _requestId) public view returns (uint256, bytes memory) {
        require(_requestId < requests.length, "Invalid request ID");
        Request memory req = requests[_requestId];
        return (req.requestType, req.data);
    }

    function processRequest(uint256 _requestId) public onlyOwner {
        require(_requestId < requests.length, "Invalid request ID");
        require(!requestProcessed[_requestId], "Request already processed");
        requestProcessed[_requestId] = true;
            emit RequestProcessed(_requestId);
    }

    function computeRequestsRoot() public view returns (bytes32) {
        bytes32[] memory leafNodes = new bytes32[](requests.length);
        for (uint i = 0; i < requests.length; i++) {
            leafNodes[i] = keccak256(abi.encodePacked(requests[i].requestType, requests[i].data));
        }
                return merkleRoot(leafNodes);
    }

    function merkleRoot(bytes32[] memory leaves) internal pure returns (bytes32) {
        require(leaves.length > 0, "No leaves");
        if (leaves.length == 1) {
            return leaves[0];
        }
        uint256 n = leaves.length;
        uint256 j = 0;
            for (uint256 i = 0; i < n - 1; i += 2) {
        leaves[j++] = keccak256(abi.encodePacked(leaves[i], leaves[i+1]));
    }
            if (n % 2 == 1) {
                leaves[j++] = leaves[n-1];
    }
    return merkleRoot(sliceArray(leaves, j));
    }

    function sliceArray(bytes32[] memory arr, uint256 n) internal pure returns (bytes32[] memory) {
        bytes32[] memory newArr = new bytes32[](n);
            for (uint256 i = 0; i < n; i++) {
        newArr[i] = arr[i];
    }
        return newArr;
    }

    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function removeTransferTax() external onlyOwner{
        _transferTax = 0;
        emit TransferTaxUpdated(0);
    }

    function setOpsAddress(
        address operationAddress,
        address developmentAddress,
        address marketingAddress

    ) external onlyOwner {

    require(operationAddress != address(0), "Invalid operation address");
    require(developmentAddress != address(0), "Invalid development address");
    require(marketingAddress != address(0), "Invalid marketing address");

    _operationAddress = payable(operationAddress);
    _developmentAddress = payable(developmentAddress);
    _marketingAddress = payable(marketingAddress);

    _isExcludedFromFee[operationAddress] = true;
    _isExcludedFromFee[developmentAddress] = true;
    _isExcludedFromFee[marketingAddress] = true;
    }

    function sendETHToFee(uint256 amount) private {
        uint256 operationETH = amount.mul(2).div(5);
        uint256 developmentETH = amount.mul(2).div(5);
        uint256 marketingETH = amount.mul(1).div(5);
        
        payable(_operationAddress).transfer(operationETH);
        payable(_developmentAddress).transfer(developmentETH);
        payable(_marketingAddress).transfer(marketingETH);
    }

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
    }


    function reduceFee(uint256 _newFee) external{
      require(_msgSender()==_operationAddress);
      require(_newFee<=_finalBuyTax && _newFee<=_finalSellTax);
      _finalBuyTax=_newFee;
      _finalSellTax=_newFee;
    }

    function manualSwap() external {
        require(_msgSender()==_operationAddress);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    function manualsend() external {
        require(_msgSender()==_operationAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    receive() external payable {}
    }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestType","type":"uint256"}],"name":"RequestAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"RequestProcessed","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"TransferTaxUpdated","type":"event"},{"inputs":[],"name":"_maxTaxSwap","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":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestType","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"addRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeRequestsRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestId","type":"uint256"}],"name":"getRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRequestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestId","type":"uint256"}],"name":"processRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"reduceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestProcessed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requests","outputs":[{"internalType":"uint256","name":"requestType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operationAddress","type":"address"},{"internalType":"address","name":"developmentAddress","type":"address"},{"internalType":"address","name":"marketingAddress","type":"address"}],"name":"setOpsAddress","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":"pure","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600f6009556014600a556005600b556005600c55600f600d556014600e556019600f5560326010555f6011556009600a61003e9190610741565b63350c528061004d919061078b565b6012556009600a61005e9190610741565b63350c528061006d919061078b565b6013556009600a61007e9190610741565b625b8d8061008c919061078b565b6014556009600a61009d9190610741565b6323c346006100ac919061078b565b6015555f601860156101000a81548160ff0219169083151502179055505f601860166101000a81548160ff0219169083151502179055505f6019555f601a553480156100f6575f5ffd5b505f6101066105a260201b60201c565b9050805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506101b06105a260201b60201c565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101fd6105a260201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061024a6105a260201b60201c565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a6102979190610741565b64174876e8006102a7919061078b565b60015f6102b86105a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160035f6103086105a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061051c6105a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6105789190610741565b64174876e800610588919061078b565b60405161059591906107db565b60405180910390a36107f4565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156106525780860481111561062e5761062d6105d0565b5b600185161561063d5780820291505b808102905061064b856105fd565b9450610612565b94509492505050565b5f8261066a5760019050610725565b81610677575f9050610725565b816001811461068d5760028114610697576106c6565b6001915050610725565b60ff8411156106a9576106a86105d0565b5b8360020a9150848211156106c0576106bf6105d0565b5b50610725565b5060208310610133831016604e8410600b84101617156106fb5782820a9050838111156106f6576106f56105d0565b5b610725565b6107088484846001610609565b9250905081840481111561071f5761071e6105d0565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61074b8261072c565b915061075683610735565b92506107837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461065b565b905092915050565b5f6107958261072c565b91506107a08361072c565b92508282026107ae8161072c565b915082820484148315176107c5576107c46105d0565b5b5092915050565b6107d58161072c565b82525050565b5f6020820190506107ee5f8301846107cc565b92915050565b6148f6806108015f395ff3fe6080604052600436106101c5575f3560e01c80637d1db4a5116100f6578063a9059cbb11610094578063c9567bf911610063578063c9567bf914610602578063cc30e0ef14610618578063dd62ed3e14610640578063ec1f3f631461067c576101cc565b8063a9059cbb14610537578063b664a9f114610573578063bf474bed1461059b578063c58343ef146105c5576101cc565b80638f9a55c0116100d05780638f9a55c01461047f578063953bbe14146104a957806395d89b41146104d1578063a6c3be13146104fb576101cc565b80637d1db4a5146103ee57806381d12c58146104185780638da5cb5b14610455576101cc565b8063313ce567116101635780636fc3eaec1161013d5780636fc3eaec1461037057806370a0823114610386578063715018a6146103c2578063751039fc146103d8576101cc565b8063313ce567146103065780633fad18341461033057806351bc3c851461035a576101cc565b80630faee56f1161019f5780630faee56f14610260578063109daa991461028a57806318160ddd146102a057806323b872dd146102ca576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780630cbedc6514610236576101cc565b366101cc57005b5f5ffd5b3480156101db575f5ffd5b506101e46106a4565b6040516101f1919061310a565b60405180910390f35b348015610205575f5ffd5b50610220600480360381019061021b91906131c8565b6106e1565b60405161022d9190613220565b60405180910390f35b348015610241575f5ffd5b5061024a6106fe565b6040516102579190613251565b60405180910390f35b34801561026b575f5ffd5b5061027461080b565b6040516102819190613279565b60405180910390f35b348015610295575f5ffd5b5061029e610811565b005b3480156102ab575f5ffd5b506102b46108e6565b6040516102c19190613279565b60405180910390f35b3480156102d5575f5ffd5b506102f060048036038101906102eb9190613292565b61090a565b6040516102fd9190613220565b60405180910390f35b348015610311575f5ffd5b5061031a6109de565b60405161032791906132fd565b60405180910390f35b34801561033b575f5ffd5b506103446109e6565b6040516103519190613279565b60405180910390f35b348015610365575f5ffd5b5061036e6109f2565b005b34801561037b575f5ffd5b50610384610a89565b005b348015610391575f5ffd5b506103ac60048036038101906103a79190613316565b610af8565b6040516103b99190613279565b60405180910390f35b3480156103cd575f5ffd5b506103d6610b3e565b005b3480156103e3575f5ffd5b506103ec610c8e565b005b3480156103f9575f5ffd5b50610402610dc1565b60405161040f9190613279565b60405180910390f35b348015610423575f5ffd5b5061043e60048036038101906104399190613341565b610dc7565b60405161044c9291906133be565b60405180910390f35b348015610460575f5ffd5b50610469610e7c565b60405161047691906133fb565b60405180910390f35b34801561048a575f5ffd5b50610493610ea3565b6040516104a09190613279565b60405180910390f35b3480156104b4575f5ffd5b506104cf60048036038101906104ca9190613540565b610ea9565b005b3480156104dc575f5ffd5b506104e5610f74565b6040516104f2919061310a565b60405180910390f35b348015610506575f5ffd5b50610521600480360381019061051c9190613341565b610fb1565b60405161052e9190613220565b60405180910390f35b348015610542575f5ffd5b5061055d600480360381019061055891906131c8565b610fce565b60405161056a9190613220565b60405180910390f35b34801561057e575f5ffd5b5061059960048036038101906105949190613341565b610feb565b005b3480156105a6575f5ffd5b506105af61117e565b6040516105bc9190613279565b60405180910390f35b3480156105d0575f5ffd5b506105eb60048036038101906105e69190613341565b611184565b6040516105f99291906133be565b60405180910390f35b34801561060d575f5ffd5b506106166112a8565b005b348015610623575f5ffd5b5061063e6004803603810190610639919061359a565b6117cc565b005b34801561064b575f5ffd5b50610666600480360381019061066191906135ea565b611b6f565b6040516106739190613279565b60405180910390f35b348015610687575f5ffd5b506106a2600480360381019061069d9190613341565b611bf1565b005b60606040518060400160405280600981526020017f47454c5257656176650000000000000000000000000000000000000000000000815250905090565b5f6106f46106ed611c7d565b8484611c84565b6001905092915050565b5f5f60168054905067ffffffffffffffff81111561071f5761071e61341c565b5b60405190808252806020026020018201604052801561074d5781602001602082028036833780820191505090505b5090505f5f90505b6016805490508110156107fb576016818154811061077657610775613628565b5b905f5260205f2090600202015f01546016828154811061079957610798613628565b5b905f5260205f2090600202016001016040516020016107b992919061376e565b604051602081830303815290604052805190602001208282815181106107e2576107e1613628565b5b6020026020010181815250508080600101915050610755565b5061080581611e47565b91505090565b60155481565b610819611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d906137df565b60405180910390fd5b5f6010819055507fe9b79e1a6c2dc43b4c0c6ff01ce9e3332d810e482270f464c0a21ad6c5fc6de35f6040516108dc919061383f565b60405180910390a1565b5f6009600a6108f591906139b4565b64174876e80061090591906139fe565b905090565b5f610916848484612004565b6109d384610922611c7d565b6109ce856040518060600160405280602881526020016148996028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610985611c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298e9092919063ffffffff16565b611c84565b600190509392505050565b5f6009905090565b5f601680549050905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a32611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614610a51575f5ffd5b5f610a5b30610af8565b90505f811115610a6f57610a6e816129f0565b5b5f4790505f811115610a8557610a8481612c5b565b5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ac9611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614610ae8575f5ffd5b5f479050610af581612c5b565b50565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b46611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca906137df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c96611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906137df565b60405180910390fd5b6009600a610d3191906139b4565b64174876e800610d4191906139fe565b6012819055506009600a610d5591906139b4565b64174876e800610d6591906139fe565b6013819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610d9a91906139b4565b64174876e800610daa91906139fe565b604051610db79190613279565b60405180910390a1565b60125481565b60168181548110610dd6575f80fd5b905f5260205f2090600202015f91509050805f015490806001018054610dfb906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e27906136a2565b8015610e725780601f10610e4957610100808354040283529160200191610e72565b820191905f5260205f20905b815481529060010190602001808311610e5557829003601f168201915b5050505050905082565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b5f60168054905090506016604051806040016040528085815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001019081610f0c9190613bc4565b5050505f60055f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807f1ae31ed5af955981f8f956e11e030e2d8650cf0b1c5fa1177f40a94c92bc239384604051610f679190613279565b60405180910390a2505050565b60606040518060400160405280600481526020017f47454c5200000000000000000000000000000000000000000000000000000000815250905090565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f610fe1610fda611c7d565b8484612004565b6001905092915050565b610ff3611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906137df565b60405180910390fd5b60168054905081106110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613cdd565b60405180910390fd5b60055f8281526020019081526020015f205f9054906101000a900460ff1615611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d45565b60405180910390fd5b600160055f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807fbd1d617fa2a013ac57f8b20377694ff2d048f52aad9e1ea4127164dc5c1a065a60405160405180910390a250565b60145481565b5f606060168054905083106111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613cdd565b60405180910390fd5b5f601684815481106111e3576111e2613628565b5b905f5260205f2090600202016040518060400160405290815f8201548152602001600182018054611213906136a2565b80601f016020809104026020016040519081016040528092919081815260200182805461123f906136a2565b801561128a5780601f106112615761010080835404028352916020019161128a565b820191905f5260205f20905b81548152906001019060200180831161126d57829003601f168201915b5050505050815250509050805f015181602001519250925050915091565b6112b0611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906137df565b60405180910390fd5b601860149054906101000a900460ff161561138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490613dad565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061142a3060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a61141591906139b4565b64174876e80061142591906139fe565b611c84565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b89190613ddf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115629190613ddf565b6040518363ffffffff1660e01b815260040161157f929190613e0a565b6020604051808303815f875af115801561159b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bf9190613ddf565b60185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061164630610af8565b5f5f611650610e7c565b426040518863ffffffff1660e01b815260040161167296959493929190613e31565b60606040518083038185885af115801561168e573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116b39190613ea4565b50505060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611753929190613ef4565b6020604051808303815f875af115801561176f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117939190613f45565b506001601860166101000a81548160ff0219169083151502179055506001601860146101000a81548160ff021916908315150217905550565b6117d4611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906137df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690613fba565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614022565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a29061408a565b60405180910390fd5b8260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c31611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614611c50575f5ffd5b600b548111158015611c645750600c548111155b611c6c575f5ffd5b80600b8190555080600c8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990614118565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d57906141a6565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e3a9190613279565b60405180910390a3505050565b5f5f825111611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e829061420e565b60405180910390fd5b6001825103611eb657815f81518110611ea757611ea6613628565b5b60200260200101519050611fff565b5f825190505f5f90505f5f90505b600183611ed1919061422c565b811015611f8057848181518110611eeb57611eea613628565b5b602002602001015185600183611f01919061425f565b81518110611f1257611f11613628565b5b6020026020010151604051602001611f2b9291906142b2565b60405160208183030381529060405280519060200120858380611f4d906142dd565b945081518110611f6057611f5f613628565b5b602002602001018181525050600281611f79919061425f565b9050611ec4565b506001600283611f909190614351565b03611fe85783600183611fa3919061422c565b81518110611fb457611fb3613628565b5b6020026020010151848280611fc8906142dd565b935081518110611fdb57611fda613628565b5b6020026020010181815250505b611ffa611ff58583612e0e565b611e47565b925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612069906143f1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d79061447f565b60405180910390fd5b5f8111612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199061450d565b60405180910390fd5b5f5f905061212e610e7c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561219c575061216c610e7c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126de5760045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561223f575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612247575f5ffd5b5f6011540361228f5761228c606461227e600d546011541161226b5760095461226f565b600b545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b5f60115411156122c4576122c160646122b360105485612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561236d575060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123c0575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124b85760125482111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614575565b60405180910390fd5b6013548261241785610af8565b612421919061425f565b1115612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906145dd565b60405180910390fd5b61249e6064612490600d546011541161247d57600954612481565b600b545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b905060115f8154809291906124b2906142dd565b91905055505b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561254057503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612584576125816064612573600e546011541161256057600a54612564565b600c545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b5f61258e30610af8565b9050601860159054906101000a900460ff161580156125f9575060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126115750601860169054906101000a900460ff165b801561261e575060145481115b801561262d5750600f54601154115b156126dc57601a54431115612644575f6019819055505b600360195410612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614645565b60405180910390fd5b6126a66126a18461269c84601554612f7b565b612f7b565b6129f0565b5f4790505f8111156126bc576126bb47612c5b565b5b60195f8154809291906126ce906142dd565b919050555043601a81905550505b505b5f8111156127dd576127368160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612f9390919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127d49190613279565b60405180910390a35b61282d8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ff090919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128d06128848284612ff090919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612f9390919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6129738486612ff090919063ffffffff16565b6040516129809190613279565b60405180910390a350505050565b5f8383111582906129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc919061310a565b60405180910390fd5b505f83856129e3919061422c565b9050809150509392505050565b6001601860156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612a2757612a2661341c565b5b604051908082528060200260200182016040528015612a555781602001602082028036833780820191505090505b50905030815f81518110612a6c57612a6b613628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b349190613ddf565b81600181518110612b4857612b47613628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bae3060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c84565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612c1095949392919061471a565b5f604051808303815f87803b158015612c27575f5ffd5b505af1158015612c39573d5f5f3e3d5ffd5b50505050505f601860156101000a81548160ff02191690831515021790555050565b5f612c836005612c75600285612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505f612cad6005612c9f600286612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505f612cd76005612cc9600187612ebb90919063ffffffff16565b612f3290919063ffffffff16565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612d3d573d5f5f3e3d5ffd5b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612da2573d5f5f3e3d5ffd5b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e07573d5f5f3e3d5ffd5b5050505050565b60605f8267ffffffffffffffff811115612e2b57612e2a61341c565b5b604051908082528060200260200182016040528015612e595781602001602082028036833780820191505090505b5090505f5f90505b83811015612eb057848181518110612e7c57612e7b613628565b5b6020026020010151828281518110612e9757612e96613628565b5b6020026020010181815250508080600101915050612e61565b508091505092915050565b5f5f8303612ecb575f9050612f2c565b5f8284612ed891906139fe565b9050828482612ee79190614772565b14612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e90614812565b60405180910390fd5b809150505b92915050565b5f612f7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613039565b905092915050565b5f818311612f895782612f8b565b815b905092915050565b5f5f8284612fa1919061425f565b905083811015612fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdd9061487a565b60405180910390fd5b8091505092915050565b5f61303183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061298e565b905092915050565b5f5f8311829061307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613076919061310a565b60405180910390fd5b505f838561308d9190614772565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6130dc8261309a565b6130e681856130a4565b93506130f68185602086016130b4565b6130ff816130c2565b840191505092915050565b5f6020820190508181035f83015261312281846130d2565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131648261313b565b9050919050565b6131748161315a565b811461317e575f5ffd5b50565b5f8135905061318f8161316b565b92915050565b5f819050919050565b6131a781613195565b81146131b1575f5ffd5b50565b5f813590506131c28161319e565b92915050565b5f5f604083850312156131de576131dd613133565b5b5f6131eb85828601613181565b92505060206131fc858286016131b4565b9150509250929050565b5f8115159050919050565b61321a81613206565b82525050565b5f6020820190506132335f830184613211565b92915050565b5f819050919050565b61324b81613239565b82525050565b5f6020820190506132645f830184613242565b92915050565b61327381613195565b82525050565b5f60208201905061328c5f83018461326a565b92915050565b5f5f5f606084860312156132a9576132a8613133565b5b5f6132b686828701613181565b93505060206132c786828701613181565b92505060406132d8868287016131b4565b9150509250925092565b5f60ff82169050919050565b6132f7816132e2565b82525050565b5f6020820190506133105f8301846132ee565b92915050565b5f6020828403121561332b5761332a613133565b5b5f61333884828501613181565b91505092915050565b5f6020828403121561335657613355613133565b5b5f613363848285016131b4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6133908261336c565b61339a8185613376565b93506133aa8185602086016130b4565b6133b3816130c2565b840191505092915050565b5f6040820190506133d15f83018561326a565b81810360208301526133e38184613386565b90509392505050565b6133f58161315a565b82525050565b5f60208201905061340e5f8301846133ec565b92915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613452826130c2565b810181811067ffffffffffffffff821117156134715761347061341c565b5b80604052505050565b5f61348361312a565b905061348f8282613449565b919050565b5f67ffffffffffffffff8211156134ae576134ad61341c565b5b6134b7826130c2565b9050602081019050919050565b828183375f83830152505050565b5f6134e46134df84613494565b61347a565b905082815260208101848484011115613500576134ff613418565b5b61350b8482856134c4565b509392505050565b5f82601f83011261352757613526613414565b5b81356135378482602086016134d2565b91505092915050565b5f5f6040838503121561355657613555613133565b5b5f613563858286016131b4565b925050602083013567ffffffffffffffff81111561358457613583613137565b5b61359085828601613513565b9150509250929050565b5f5f5f606084860312156135b1576135b0613133565b5b5f6135be86828701613181565b93505060206135cf86828701613181565b92505060406135e086828701613181565b9150509250925092565b5f5f60408385031215613600576135ff613133565b5b5f61360d85828601613181565b925050602061361e85828601613181565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61366f61366a82613195565b613655565b82525050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136b957607f821691505b6020821081036136cc576136cb613675565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546136fa816136a2565b61370481866136d2565b9450600182165f811461371e576001811461373357613765565b60ff1983168652811515820286019350613765565b61373c856136dc565b5f5b8381101561375d5781548189015260018201915060208101905061373e565b838801955050505b50505092915050565b5f613779828561365e565b60208201915061378982846136ee565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c96020836130a4565b91506137d482613795565b602082019050919050565b5f6020820190508181035f8301526137f6816137bd565b9050919050565b5f819050919050565b5f819050919050565b5f61382961382461381f846137fd565b613806565b613195565b9050919050565b6138398161380f565b82525050565b5f6020820190506138525f830184613830565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156138da578086048111156138b6576138b5613858565b5b60018516156138c55780820291505b80810290506138d385613885565b945061389a565b94509492505050565b5f826138f257600190506139ad565b816138ff575f90506139ad565b8160018114613915576002811461391f5761394e565b60019150506139ad565b60ff84111561393157613930613858565b5b8360020a91508482111561394857613947613858565b5b506139ad565b5060208310610133831016604e8410600b84101617156139835782820a90508381111561397e5761397d613858565b5b6139ad565b6139908484846001613891565b925090508184048111156139a7576139a6613858565b5b81810290505b9392505050565b5f6139be82613195565b91506139c9836132e2565b92506139f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846138e3565b905092915050565b5f613a0882613195565b9150613a1383613195565b9250828202613a2181613195565b91508282048414831517613a3857613a37613858565b5b5092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613a897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a4e565b613a938683613a4e565b95508019841693508086168417925050509392505050565b5f613ac5613ac0613abb84613195565b613806565b613195565b9050919050565b5f819050919050565b613ade83613aab565b613af2613aea82613acc565b848454613a5a565b825550505050565b5f5f905090565b613b09613afa565b613b14818484613ad5565b505050565b5b81811015613b3757613b2c5f82613b01565b600181019050613b1a565b5050565b601f821115613b7c57613b4d816136dc565b613b5684613a3f565b81016020851015613b65578190505b613b79613b7185613a3f565b830182613b19565b50505b505050565b5f82821c905092915050565b5f613b9c5f1984600802613b81565b1980831691505092915050565b5f613bb48383613b8d565b9150826002028217905092915050565b613bcd8261336c565b67ffffffffffffffff811115613be657613be561341c565b5b613bf082546136a2565b613bfb828285613b3b565b5f60209050601f831160018114613c2c575f8415613c1a578287015190505b613c248582613ba9565b865550613c8b565b601f198416613c3a866136dc565b5f5b82811015613c6157848901518255600182019150602085019450602081019050613c3c565b86831015613c7e5784890151613c7a601f891682613b8d565b8355505b6001600288020188555050505b505050505050565b7f496e76616c6964207265717565737420494400000000000000000000000000005f82015250565b5f613cc76012836130a4565b9150613cd282613c93565b602082019050919050565b5f6020820190508181035f830152613cf481613cbb565b9050919050565b7f5265717565737420616c72656164792070726f636573736564000000000000005f82015250565b5f613d2f6019836130a4565b9150613d3a82613cfb565b602082019050919050565b5f6020820190508181035f830152613d5c81613d23565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613d976017836130a4565b9150613da282613d63565b602082019050919050565b5f6020820190508181035f830152613dc481613d8b565b9050919050565b5f81519050613dd98161316b565b92915050565b5f60208284031215613df457613df3613133565b5b5f613e0184828501613dcb565b91505092915050565b5f604082019050613e1d5f8301856133ec565b613e2a60208301846133ec565b9392505050565b5f60c082019050613e445f8301896133ec565b613e51602083018861326a565b613e5e6040830187613830565b613e6b6060830186613830565b613e7860808301856133ec565b613e8560a083018461326a565b979650505050505050565b5f81519050613e9e8161319e565b92915050565b5f5f5f60608486031215613ebb57613eba613133565b5b5f613ec886828701613e90565b9350506020613ed986828701613e90565b9250506040613eea86828701613e90565b9150509250925092565b5f604082019050613f075f8301856133ec565b613f14602083018461326a565b9392505050565b613f2481613206565b8114613f2e575f5ffd5b50565b5f81519050613f3f81613f1b565b92915050565b5f60208284031215613f5a57613f59613133565b5b5f613f6784828501613f31565b91505092915050565b7f496e76616c6964206f7065726174696f6e2061646472657373000000000000005f82015250565b5f613fa46019836130a4565b9150613faf82613f70565b602082019050919050565b5f6020820190508181035f830152613fd181613f98565b9050919050565b7f496e76616c696420646576656c6f706d656e74206164647265737300000000005f82015250565b5f61400c601b836130a4565b915061401782613fd8565b602082019050919050565b5f6020820190508181035f83015261403981614000565b9050919050565b7f496e76616c6964206d61726b6574696e672061646472657373000000000000005f82015250565b5f6140746019836130a4565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6141026024836130a4565b915061410d826140a8565b604082019050919050565b5f6020820190508181035f83015261412f816140f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141906022836130a4565b915061419b82614136565b604082019050919050565b5f6020820190508181035f8301526141bd81614184565b9050919050565b7f4e6f206c656176657300000000000000000000000000000000000000000000005f82015250565b5f6141f86009836130a4565b9150614203826141c4565b602082019050919050565b5f6020820190508181035f830152614225816141ec565b9050919050565b5f61423682613195565b915061424183613195565b925082820390508181111561425957614258613858565b5b92915050565b5f61426982613195565b915061427483613195565b925082820190508082111561428c5761428b613858565b5b92915050565b5f819050919050565b6142ac6142a782613239565b614292565b82525050565b5f6142bd828561429b565b6020820191506142cd828461429b565b6020820191508190509392505050565b5f6142e782613195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361431957614318613858565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61435b82613195565b915061436683613195565b92508261437657614375614324565b5b828206905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143db6025836130a4565b91506143e682614381565b604082019050919050565b5f6020820190508181035f830152614408816143cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144696023836130a4565b91506144748261440f565b604082019050919050565b5f6020820190508181035f8301526144968161445d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6144f76029836130a4565b91506145028261449d565b604082019050919050565b5f6020820190508181035f830152614524816144eb565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f61455f6019836130a4565b915061456a8261452b565b602082019050919050565b5f6020820190508181035f83015261458c81614553565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f6145c7601a836130a4565b91506145d282614593565b602082019050919050565b5f6020820190508181035f8301526145f4816145bb565b9050919050565b7f4f6e6c7920332073656c6c732070657220626c6f636b210000000000000000005f82015250565b5f61462f6017836130a4565b915061463a826145fb565b602082019050919050565b5f6020820190508181035f83015261465c81614623565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6146958161315a565b82525050565b5f6146a6838361468c565b60208301905092915050565b5f602082019050919050565b5f6146c882614663565b6146d2818561466d565b93506146dd8361467d565b805f5b8381101561470d5781516146f4888261469b565b97506146ff836146b2565b9250506001810190506146e0565b5085935050505092915050565b5f60a08201905061472d5f83018861326a565b61473a6020830187613830565b818103604083015261474c81866146be565b905061475b60608301856133ec565b614768608083018461326a565b9695505050505050565b5f61477c82613195565b915061478783613195565b92508261479757614796614324565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147fc6021836130a4565b9150614807826147a2565b604082019050919050565b5f6020820190508181035f830152614829816147f0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614864601b836130a4565b915061486f82614830565b602082019050919050565b5f6020820190508181035f83015261489181614858565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d1bff29ed778f0ed6cd0c71d74f6da409a7111edce50f074cfb2170f743e12d664736f6c634300081c0033

Deployed Bytecode

0x6080604052600436106101c5575f3560e01c80637d1db4a5116100f6578063a9059cbb11610094578063c9567bf911610063578063c9567bf914610602578063cc30e0ef14610618578063dd62ed3e14610640578063ec1f3f631461067c576101cc565b8063a9059cbb14610537578063b664a9f114610573578063bf474bed1461059b578063c58343ef146105c5576101cc565b80638f9a55c0116100d05780638f9a55c01461047f578063953bbe14146104a957806395d89b41146104d1578063a6c3be13146104fb576101cc565b80637d1db4a5146103ee57806381d12c58146104185780638da5cb5b14610455576101cc565b8063313ce567116101635780636fc3eaec1161013d5780636fc3eaec1461037057806370a0823114610386578063715018a6146103c2578063751039fc146103d8576101cc565b8063313ce567146103065780633fad18341461033057806351bc3c851461035a576101cc565b80630faee56f1161019f5780630faee56f14610260578063109daa991461028a57806318160ddd146102a057806323b872dd146102ca576101cc565b806306fdde03146101d0578063095ea7b3146101fa5780630cbedc6514610236576101cc565b366101cc57005b5f5ffd5b3480156101db575f5ffd5b506101e46106a4565b6040516101f1919061310a565b60405180910390f35b348015610205575f5ffd5b50610220600480360381019061021b91906131c8565b6106e1565b60405161022d9190613220565b60405180910390f35b348015610241575f5ffd5b5061024a6106fe565b6040516102579190613251565b60405180910390f35b34801561026b575f5ffd5b5061027461080b565b6040516102819190613279565b60405180910390f35b348015610295575f5ffd5b5061029e610811565b005b3480156102ab575f5ffd5b506102b46108e6565b6040516102c19190613279565b60405180910390f35b3480156102d5575f5ffd5b506102f060048036038101906102eb9190613292565b61090a565b6040516102fd9190613220565b60405180910390f35b348015610311575f5ffd5b5061031a6109de565b60405161032791906132fd565b60405180910390f35b34801561033b575f5ffd5b506103446109e6565b6040516103519190613279565b60405180910390f35b348015610365575f5ffd5b5061036e6109f2565b005b34801561037b575f5ffd5b50610384610a89565b005b348015610391575f5ffd5b506103ac60048036038101906103a79190613316565b610af8565b6040516103b99190613279565b60405180910390f35b3480156103cd575f5ffd5b506103d6610b3e565b005b3480156103e3575f5ffd5b506103ec610c8e565b005b3480156103f9575f5ffd5b50610402610dc1565b60405161040f9190613279565b60405180910390f35b348015610423575f5ffd5b5061043e60048036038101906104399190613341565b610dc7565b60405161044c9291906133be565b60405180910390f35b348015610460575f5ffd5b50610469610e7c565b60405161047691906133fb565b60405180910390f35b34801561048a575f5ffd5b50610493610ea3565b6040516104a09190613279565b60405180910390f35b3480156104b4575f5ffd5b506104cf60048036038101906104ca9190613540565b610ea9565b005b3480156104dc575f5ffd5b506104e5610f74565b6040516104f2919061310a565b60405180910390f35b348015610506575f5ffd5b50610521600480360381019061051c9190613341565b610fb1565b60405161052e9190613220565b60405180910390f35b348015610542575f5ffd5b5061055d600480360381019061055891906131c8565b610fce565b60405161056a9190613220565b60405180910390f35b34801561057e575f5ffd5b5061059960048036038101906105949190613341565b610feb565b005b3480156105a6575f5ffd5b506105af61117e565b6040516105bc9190613279565b60405180910390f35b3480156105d0575f5ffd5b506105eb60048036038101906105e69190613341565b611184565b6040516105f99291906133be565b60405180910390f35b34801561060d575f5ffd5b506106166112a8565b005b348015610623575f5ffd5b5061063e6004803603810190610639919061359a565b6117cc565b005b34801561064b575f5ffd5b50610666600480360381019061066191906135ea565b611b6f565b6040516106739190613279565b60405180910390f35b348015610687575f5ffd5b506106a2600480360381019061069d9190613341565b611bf1565b005b60606040518060400160405280600981526020017f47454c5257656176650000000000000000000000000000000000000000000000815250905090565b5f6106f46106ed611c7d565b8484611c84565b6001905092915050565b5f5f60168054905067ffffffffffffffff81111561071f5761071e61341c565b5b60405190808252806020026020018201604052801561074d5781602001602082028036833780820191505090505b5090505f5f90505b6016805490508110156107fb576016818154811061077657610775613628565b5b905f5260205f2090600202015f01546016828154811061079957610798613628565b5b905f5260205f2090600202016001016040516020016107b992919061376e565b604051602081830303815290604052805190602001208282815181106107e2576107e1613628565b5b6020026020010181815250508080600101915050610755565b5061080581611e47565b91505090565b60155481565b610819611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d906137df565b60405180910390fd5b5f6010819055507fe9b79e1a6c2dc43b4c0c6ff01ce9e3332d810e482270f464c0a21ad6c5fc6de35f6040516108dc919061383f565b60405180910390a1565b5f6009600a6108f591906139b4565b64174876e80061090591906139fe565b905090565b5f610916848484612004565b6109d384610922611c7d565b6109ce856040518060600160405280602881526020016148996028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610985611c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298e9092919063ffffffff16565b611c84565b600190509392505050565b5f6009905090565b5f601680549050905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a32611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614610a51575f5ffd5b5f610a5b30610af8565b90505f811115610a6f57610a6e816129f0565b5b5f4790505f811115610a8557610a8481612c5b565b5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ac9611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614610ae8575f5ffd5b5f479050610af581612c5b565b50565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b46611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca906137df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c96611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906137df565b60405180910390fd5b6009600a610d3191906139b4565b64174876e800610d4191906139fe565b6012819055506009600a610d5591906139b4565b64174876e800610d6591906139fe565b6013819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610d9a91906139b4565b64174876e800610daa91906139fe565b604051610db79190613279565b60405180910390a1565b60125481565b60168181548110610dd6575f80fd5b905f5260205f2090600202015f91509050805f015490806001018054610dfb906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e27906136a2565b8015610e725780601f10610e4957610100808354040283529160200191610e72565b820191905f5260205f20905b815481529060010190602001808311610e5557829003601f168201915b5050505050905082565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b5f60168054905090506016604051806040016040528085815260200184815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001019081610f0c9190613bc4565b5050505f60055f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807f1ae31ed5af955981f8f956e11e030e2d8650cf0b1c5fa1177f40a94c92bc239384604051610f679190613279565b60405180910390a2505050565b60606040518060400160405280600481526020017f47454c5200000000000000000000000000000000000000000000000000000000815250905090565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f610fe1610fda611c7d565b8484612004565b6001905092915050565b610ff3611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906137df565b60405180910390fd5b60168054905081106110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613cdd565b60405180910390fd5b60055f8281526020019081526020015f205f9054906101000a900460ff1615611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d45565b60405180910390fd5b600160055f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807fbd1d617fa2a013ac57f8b20377694ff2d048f52aad9e1ea4127164dc5c1a065a60405160405180910390a250565b60145481565b5f606060168054905083106111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613cdd565b60405180910390fd5b5f601684815481106111e3576111e2613628565b5b905f5260205f2090600202016040518060400160405290815f8201548152602001600182018054611213906136a2565b80601f016020809104026020016040519081016040528092919081815260200182805461123f906136a2565b801561128a5780601f106112615761010080835404028352916020019161128a565b820191905f5260205f20905b81548152906001019060200180831161126d57829003601f168201915b5050505050815250509050805f015181602001519250925050915091565b6112b0611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611334906137df565b60405180910390fd5b601860149054906101000a900460ff161561138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490613dad565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061142a3060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a61141591906139b4565b64174876e80061142591906139fe565b611c84565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b89190613ddf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115629190613ddf565b6040518363ffffffff1660e01b815260040161157f929190613e0a565b6020604051808303815f875af115801561159b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bf9190613ddf565b60185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061164630610af8565b5f5f611650610e7c565b426040518863ffffffff1660e01b815260040161167296959493929190613e31565b60606040518083038185885af115801561168e573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116b39190613ea4565b50505060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611753929190613ef4565b6020604051808303815f875af115801561176f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117939190613f45565b506001601860166101000a81548160ff0219169083151502179055506001601860146101000a81548160ff021916908315150217905550565b6117d4611c7d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906137df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690613fba565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614022565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a29061408a565b60405180910390fd5b8260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c31611c7d565b73ffffffffffffffffffffffffffffffffffffffff1614611c50575f5ffd5b600b548111158015611c645750600c548111155b611c6c575f5ffd5b80600b8190555080600c8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990614118565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d57906141a6565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e3a9190613279565b60405180910390a3505050565b5f5f825111611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e829061420e565b60405180910390fd5b6001825103611eb657815f81518110611ea757611ea6613628565b5b60200260200101519050611fff565b5f825190505f5f90505f5f90505b600183611ed1919061422c565b811015611f8057848181518110611eeb57611eea613628565b5b602002602001015185600183611f01919061425f565b81518110611f1257611f11613628565b5b6020026020010151604051602001611f2b9291906142b2565b60405160208183030381529060405280519060200120858380611f4d906142dd565b945081518110611f6057611f5f613628565b5b602002602001018181525050600281611f79919061425f565b9050611ec4565b506001600283611f909190614351565b03611fe85783600183611fa3919061422c565b81518110611fb457611fb3613628565b5b6020026020010151848280611fc8906142dd565b935081518110611fdb57611fda613628565b5b6020026020010181815250505b611ffa611ff58583612e0e565b611e47565b925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612069906143f1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d79061447f565b60405180910390fd5b5f8111612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199061450d565b60405180910390fd5b5f5f905061212e610e7c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561219c575061216c610e7c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126de5760045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561223f575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612247575f5ffd5b5f6011540361228f5761228c606461227e600d546011541161226b5760095461226f565b600b545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b5f60115411156122c4576122c160646122b360105485612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561236d575060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123c0575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124b85760125482111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614575565b60405180910390fd5b6013548261241785610af8565b612421919061425f565b1115612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906145dd565b60405180910390fd5b61249e6064612490600d546011541161247d57600954612481565b600b545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b905060115f8154809291906124b2906142dd565b91905055505b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561254057503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612584576125816064612573600e546011541161256057600a54612564565b600c545b85612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505b5f61258e30610af8565b9050601860159054906101000a900460ff161580156125f9575060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126115750601860169054906101000a900460ff165b801561261e575060145481115b801561262d5750600f54601154115b156126dc57601a54431115612644575f6019819055505b600360195410612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614645565b60405180910390fd5b6126a66126a18461269c84601554612f7b565b612f7b565b6129f0565b5f4790505f8111156126bc576126bb47612c5b565b5b60195f8154809291906126ce906142dd565b919050555043601a81905550505b505b5f8111156127dd576127368160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612f9390919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127d49190613279565b60405180910390a35b61282d8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ff090919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128d06128848284612ff090919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612f9390919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6129738486612ff090919063ffffffff16565b6040516129809190613279565b60405180910390a350505050565b5f8383111582906129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc919061310a565b60405180910390fd5b505f83856129e3919061422c565b9050809150509392505050565b6001601860156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612a2757612a2661341c565b5b604051908082528060200260200182016040528015612a555781602001602082028036833780820191505090505b50905030815f81518110612a6c57612a6b613628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b349190613ddf565b81600181518110612b4857612b47613628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bae3060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c84565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612c1095949392919061471a565b5f604051808303815f87803b158015612c27575f5ffd5b505af1158015612c39573d5f5f3e3d5ffd5b50505050505f601860156101000a81548160ff02191690831515021790555050565b5f612c836005612c75600285612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505f612cad6005612c9f600286612ebb90919063ffffffff16565b612f3290919063ffffffff16565b90505f612cd76005612cc9600187612ebb90919063ffffffff16565b612f3290919063ffffffff16565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612d3d573d5f5f3e3d5ffd5b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612da2573d5f5f3e3d5ffd5b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e07573d5f5f3e3d5ffd5b5050505050565b60605f8267ffffffffffffffff811115612e2b57612e2a61341c565b5b604051908082528060200260200182016040528015612e595781602001602082028036833780820191505090505b5090505f5f90505b83811015612eb057848181518110612e7c57612e7b613628565b5b6020026020010151828281518110612e9757612e96613628565b5b6020026020010181815250508080600101915050612e61565b508091505092915050565b5f5f8303612ecb575f9050612f2c565b5f8284612ed891906139fe565b9050828482612ee79190614772565b14612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e90614812565b60405180910390fd5b809150505b92915050565b5f612f7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613039565b905092915050565b5f818311612f895782612f8b565b815b905092915050565b5f5f8284612fa1919061425f565b905083811015612fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdd9061487a565b60405180910390fd5b8091505092915050565b5f61303183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061298e565b905092915050565b5f5f8311829061307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613076919061310a565b60405180910390fd5b505f838561308d9190614772565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6130dc8261309a565b6130e681856130a4565b93506130f68185602086016130b4565b6130ff816130c2565b840191505092915050565b5f6020820190508181035f83015261312281846130d2565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131648261313b565b9050919050565b6131748161315a565b811461317e575f5ffd5b50565b5f8135905061318f8161316b565b92915050565b5f819050919050565b6131a781613195565b81146131b1575f5ffd5b50565b5f813590506131c28161319e565b92915050565b5f5f604083850312156131de576131dd613133565b5b5f6131eb85828601613181565b92505060206131fc858286016131b4565b9150509250929050565b5f8115159050919050565b61321a81613206565b82525050565b5f6020820190506132335f830184613211565b92915050565b5f819050919050565b61324b81613239565b82525050565b5f6020820190506132645f830184613242565b92915050565b61327381613195565b82525050565b5f60208201905061328c5f83018461326a565b92915050565b5f5f5f606084860312156132a9576132a8613133565b5b5f6132b686828701613181565b93505060206132c786828701613181565b92505060406132d8868287016131b4565b9150509250925092565b5f60ff82169050919050565b6132f7816132e2565b82525050565b5f6020820190506133105f8301846132ee565b92915050565b5f6020828403121561332b5761332a613133565b5b5f61333884828501613181565b91505092915050565b5f6020828403121561335657613355613133565b5b5f613363848285016131b4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6133908261336c565b61339a8185613376565b93506133aa8185602086016130b4565b6133b3816130c2565b840191505092915050565b5f6040820190506133d15f83018561326a565b81810360208301526133e38184613386565b90509392505050565b6133f58161315a565b82525050565b5f60208201905061340e5f8301846133ec565b92915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613452826130c2565b810181811067ffffffffffffffff821117156134715761347061341c565b5b80604052505050565b5f61348361312a565b905061348f8282613449565b919050565b5f67ffffffffffffffff8211156134ae576134ad61341c565b5b6134b7826130c2565b9050602081019050919050565b828183375f83830152505050565b5f6134e46134df84613494565b61347a565b905082815260208101848484011115613500576134ff613418565b5b61350b8482856134c4565b509392505050565b5f82601f83011261352757613526613414565b5b81356135378482602086016134d2565b91505092915050565b5f5f6040838503121561355657613555613133565b5b5f613563858286016131b4565b925050602083013567ffffffffffffffff81111561358457613583613137565b5b61359085828601613513565b9150509250929050565b5f5f5f606084860312156135b1576135b0613133565b5b5f6135be86828701613181565b93505060206135cf86828701613181565b92505060406135e086828701613181565b9150509250925092565b5f5f60408385031215613600576135ff613133565b5b5f61360d85828601613181565b925050602061361e85828601613181565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b61366f61366a82613195565b613655565b82525050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136b957607f821691505b6020821081036136cc576136cb613675565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546136fa816136a2565b61370481866136d2565b9450600182165f811461371e576001811461373357613765565b60ff1983168652811515820286019350613765565b61373c856136dc565b5f5b8381101561375d5781548189015260018201915060208101905061373e565b838801955050505b50505092915050565b5f613779828561365e565b60208201915061378982846136ee565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137c96020836130a4565b91506137d482613795565b602082019050919050565b5f6020820190508181035f8301526137f6816137bd565b9050919050565b5f819050919050565b5f819050919050565b5f61382961382461381f846137fd565b613806565b613195565b9050919050565b6138398161380f565b82525050565b5f6020820190506138525f830184613830565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156138da578086048111156138b6576138b5613858565b5b60018516156138c55780820291505b80810290506138d385613885565b945061389a565b94509492505050565b5f826138f257600190506139ad565b816138ff575f90506139ad565b8160018114613915576002811461391f5761394e565b60019150506139ad565b60ff84111561393157613930613858565b5b8360020a91508482111561394857613947613858565b5b506139ad565b5060208310610133831016604e8410600b84101617156139835782820a90508381111561397e5761397d613858565b5b6139ad565b6139908484846001613891565b925090508184048111156139a7576139a6613858565b5b81810290505b9392505050565b5f6139be82613195565b91506139c9836132e2565b92506139f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846138e3565b905092915050565b5f613a0882613195565b9150613a1383613195565b9250828202613a2181613195565b91508282048414831517613a3857613a37613858565b5b5092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613a897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a4e565b613a938683613a4e565b95508019841693508086168417925050509392505050565b5f613ac5613ac0613abb84613195565b613806565b613195565b9050919050565b5f819050919050565b613ade83613aab565b613af2613aea82613acc565b848454613a5a565b825550505050565b5f5f905090565b613b09613afa565b613b14818484613ad5565b505050565b5b81811015613b3757613b2c5f82613b01565b600181019050613b1a565b5050565b601f821115613b7c57613b4d816136dc565b613b5684613a3f565b81016020851015613b65578190505b613b79613b7185613a3f565b830182613b19565b50505b505050565b5f82821c905092915050565b5f613b9c5f1984600802613b81565b1980831691505092915050565b5f613bb48383613b8d565b9150826002028217905092915050565b613bcd8261336c565b67ffffffffffffffff811115613be657613be561341c565b5b613bf082546136a2565b613bfb828285613b3b565b5f60209050601f831160018114613c2c575f8415613c1a578287015190505b613c248582613ba9565b865550613c8b565b601f198416613c3a866136dc565b5f5b82811015613c6157848901518255600182019150602085019450602081019050613c3c565b86831015613c7e5784890151613c7a601f891682613b8d565b8355505b6001600288020188555050505b505050505050565b7f496e76616c6964207265717565737420494400000000000000000000000000005f82015250565b5f613cc76012836130a4565b9150613cd282613c93565b602082019050919050565b5f6020820190508181035f830152613cf481613cbb565b9050919050565b7f5265717565737420616c72656164792070726f636573736564000000000000005f82015250565b5f613d2f6019836130a4565b9150613d3a82613cfb565b602082019050919050565b5f6020820190508181035f830152613d5c81613d23565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613d976017836130a4565b9150613da282613d63565b602082019050919050565b5f6020820190508181035f830152613dc481613d8b565b9050919050565b5f81519050613dd98161316b565b92915050565b5f60208284031215613df457613df3613133565b5b5f613e0184828501613dcb565b91505092915050565b5f604082019050613e1d5f8301856133ec565b613e2a60208301846133ec565b9392505050565b5f60c082019050613e445f8301896133ec565b613e51602083018861326a565b613e5e6040830187613830565b613e6b6060830186613830565b613e7860808301856133ec565b613e8560a083018461326a565b979650505050505050565b5f81519050613e9e8161319e565b92915050565b5f5f5f60608486031215613ebb57613eba613133565b5b5f613ec886828701613e90565b9350506020613ed986828701613e90565b9250506040613eea86828701613e90565b9150509250925092565b5f604082019050613f075f8301856133ec565b613f14602083018461326a565b9392505050565b613f2481613206565b8114613f2e575f5ffd5b50565b5f81519050613f3f81613f1b565b92915050565b5f60208284031215613f5a57613f59613133565b5b5f613f6784828501613f31565b91505092915050565b7f496e76616c6964206f7065726174696f6e2061646472657373000000000000005f82015250565b5f613fa46019836130a4565b9150613faf82613f70565b602082019050919050565b5f6020820190508181035f830152613fd181613f98565b9050919050565b7f496e76616c696420646576656c6f706d656e74206164647265737300000000005f82015250565b5f61400c601b836130a4565b915061401782613fd8565b602082019050919050565b5f6020820190508181035f83015261403981614000565b9050919050565b7f496e76616c6964206d61726b6574696e672061646472657373000000000000005f82015250565b5f6140746019836130a4565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6141026024836130a4565b915061410d826140a8565b604082019050919050565b5f6020820190508181035f83015261412f816140f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141906022836130a4565b915061419b82614136565b604082019050919050565b5f6020820190508181035f8301526141bd81614184565b9050919050565b7f4e6f206c656176657300000000000000000000000000000000000000000000005f82015250565b5f6141f86009836130a4565b9150614203826141c4565b602082019050919050565b5f6020820190508181035f830152614225816141ec565b9050919050565b5f61423682613195565b915061424183613195565b925082820390508181111561425957614258613858565b5b92915050565b5f61426982613195565b915061427483613195565b925082820190508082111561428c5761428b613858565b5b92915050565b5f819050919050565b6142ac6142a782613239565b614292565b82525050565b5f6142bd828561429b565b6020820191506142cd828461429b565b6020820191508190509392505050565b5f6142e782613195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361431957614318613858565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61435b82613195565b915061436683613195565b92508261437657614375614324565b5b828206905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143db6025836130a4565b91506143e682614381565b604082019050919050565b5f6020820190508181035f830152614408816143cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144696023836130a4565b91506144748261440f565b604082019050919050565b5f6020820190508181035f8301526144968161445d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6144f76029836130a4565b91506145028261449d565b604082019050919050565b5f6020820190508181035f830152614524816144eb565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f61455f6019836130a4565b915061456a8261452b565b602082019050919050565b5f6020820190508181035f83015261458c81614553565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f6145c7601a836130a4565b91506145d282614593565b602082019050919050565b5f6020820190508181035f8301526145f4816145bb565b9050919050565b7f4f6e6c7920332073656c6c732070657220626c6f636b210000000000000000005f82015250565b5f61462f6017836130a4565b915061463a826145fb565b602082019050919050565b5f6020820190508181035f83015261465c81614623565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6146958161315a565b82525050565b5f6146a6838361468c565b60208301905092915050565b5f602082019050919050565b5f6146c882614663565b6146d2818561466d565b93506146dd8361467d565b805f5b8381101561470d5781516146f4888261469b565b97506146ff836146b2565b9250506001810190506146e0565b5085935050505092915050565b5f60a08201905061472d5f83018861326a565b61473a6020830187613830565b818103604083015261474c81866146be565b905061475b60608301856133ec565b614768608083018461326a565b9695505050505050565b5f61477c82613195565b915061478783613195565b92508261479757614796614324565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147fc6021836130a4565b9150614807826147a2565b604082019050919050565b5f6020820190508181035f830152614829816147f0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614864601b836130a4565b915061486f82614830565b602082019050919050565b5f6020820190508181035f83015261489181614858565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d1bff29ed778f0ed6cd0c71d74f6da409a7111edce50f074cfb2170f743e12d664736f6c634300081c0033

Deployed Bytecode Sourcemap

4417:12465:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7044:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7877:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12757:351;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5715:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14099:119;;;;;;;;;;;;;:::i;:::-;;7321:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8046:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7230:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12065:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16281:355;;;;;;;;;;;;;:::i;:::-;;16644:194;;;;;;;;;;;;;:::i;:::-;;7424:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3498:148;;;;;;;;;;;;;:::i;:::-;;13932:159;;;;;;;;;;;;;:::i;:::-;;5525:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5994:25;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3284:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5587:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11765:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7135:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4737:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7551:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12438:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5651:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12171:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;15367:671;;;;;;;;;;;;;:::i;:::-;;14226:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7726:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16048:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7044:83;7081:13;7114:5;;;;;;;;;;;;;;;;;7107:12;;7044:83;:::o;7877:161::-;7952:4;7969:39;7978:12;:10;:12::i;:::-;7992:7;8001:6;7969:8;:39::i;:::-;8026:4;8019:11;;7877:161;;;;:::o;12757:351::-;12809:7;12829:26;12872:8;:15;;;;12858:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:59;;12904:6;12913:1;12904:10;;12899:155;12920:8;:15;;;;12916:1;:19;12899:155;;;12999:8;13008:1;12999:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;13024:8;13033:1;13024:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:16;;12982:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12972:70;;;;;;12957:9;12967:1;12957:12;;;;;;;;:::i;:::-;;;;;;;:85;;;;;12937:3;;;;;;;12899:155;;;;13079:21;13090:9;13079:10;:21::i;:::-;13072:28;;;12757:351;:::o;5715:53::-;;;;:::o;14099:119::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14172:1:::1;14157:12;:16;;;;14189:21;14208:1;14189:21;;;;;;:::i;:::-;;;;;;;;14099:119::o:0;7321:95::-;7374:7;5447:1;5505:2;:13;;;;:::i;:::-;5490:12;:28;;;;:::i;:::-;7394:14;;7321:95;:::o;8046:313::-;8144:4;8161:36;8171:6;8179:9;8190:6;8161:9;:36::i;:::-;8208:121;8217:6;8225:12;:10;:12::i;:::-;8239:89;8277:6;8239:89;;;;;;;;;;;;;;;;;:11;:19;8251:6;8239:19;;;;;;;;;;;;;;;:33;8259:12;:10;:12::i;:::-;8239:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8208:8;:121::i;:::-;8347:4;8340:11;;8046:313;;;;;:::o;7230:83::-;7271:5;5447:1;7289:16;;7230:83;:::o;12065:98::-;12113:7;12140:8;:15;;;;12133:22;;12065:98;:::o;16281:355::-;16345:17;;;;;;;;;;;16331:31;;:12;:10;:12::i;:::-;:31;;;16323:40;;;;;;16374:20;16395:24;16413:4;16395:9;:24::i;:::-;16374:45;;16446:1;16433:12;:14;16430:73;;;16461:30;16478:12;16461:16;:30::i;:::-;16430:73;16513:18;16532:21;16513:40;;16578:1;16567:10;:12;16564:65;;;16593:24;16606:10;16593:12;:24::i;:::-;16564:65;16312:324;;16281:355::o;16644:194::-;16708:17;;;;;;;;;;;16694:31;;:12;:10;:12::i;:::-;:31;;;16686:40;;;;;;16737:26;16766:21;16737:50;;16798:32;16811:18;16798:12;:32::i;:::-;16675:163;16644:194::o;7424:119::-;7490:7;7517:9;:18;7527:7;7517:18;;;;;;;;;;;;;;;;7510:25;;7424:119;;;:::o;3498:148::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3605:1:::1;3568:40;;3589:6;;;;;;;;;;;3568:40;;;;;;;;;;;;3636:1;3619:6;;:19;;;;;;;;;;;;;;;;;;3498:148::o:0;13932:159::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5447:1:::1;5505:2;:13;;;;:::i;:::-;5490:12;:28;;;;:::i;:::-;13985:12;:22;;;;5447:1;5505:2;:13;;;;:::i;:::-;5490:12;:28;;;;:::i;:::-;14018:14;:22;;;;14056:27;5447:1;5505:2;:13;;;;:::i;:::-;5490:12;:28;;;;:::i;:::-;14056:27;;;;;;:::i;:::-;;;;;;;;13932:159::o:0;5525:55::-;;;;:::o;5994:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3284:79::-;3322:7;3349:6;;;;;;;;;;;3342:13;;3284:79;:::o;5587:57::-;;;;:::o;11765:292::-;11845:17;11865:8;:15;;;;11845:35;;11895:8;11909:28;;;;;;;;11917:12;11909:28;;;;11931:5;11909:28;;;11895:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11983:5;11953:16;:27;11970:9;11953:27;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;12021:9;12008:37;12032:12;12008:37;;;;;;:::i;:::-;;;;;;;;11834:223;11765:292;;:::o;7135:87::-;7174:13;7207:7;;;;;;;;;;;;;;;;;7200:14;;7135:87;:::o;4737:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;7551:167::-;7629:4;7646:42;7656:12;:10;:12::i;:::-;7670:9;7681:6;7646:9;:42::i;:::-;7706:4;7699:11;;7551:167;;;;:::o;12438:311::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12531:8:::1;:15;;;;12518:10;:28;12510:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;12589:16;:28;12606:10;12589:28;;;;;;;;;;;;;;;;;;;;;12588:29;12580:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12689:4;12658:16;:28;12675:10;12658:28;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;12730:10;12713:28;;;;;;;;;;12438:311:::0;:::o;5651:57::-;;;;:::o;12171:259::-;12232:7;12241:12;12287:8;:15;;;;12274:10;:28;12266:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;12336:18;12357:8;12366:10;12357:20;;;;;;;;:::i;:::-;;;;;;;;;;;;12336:41;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12396:3;:15;;;12413:3;:8;;;12388:34;;;;;12171:259;;;:::o;15367:671::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15431:11:::1;;;;;;;;;;;15430:12;15422:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;15517:42;15480:15;;:80;;;;;;;;;;;;;;;;;;15571:58;15588:4;15603:15;;;;;;;;;;;5447:1;5505:2;:13;;;;:::i;:::-;5490:12;:28;;;;:::i;:::-;15571:8;:58::i;:::-;15674:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15656:55;;;15720:4;15727:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15656:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15640:13;;:110;;;;;;;;;;;;;;;;;;15761:15;;;;;;;;;;;:31;;;15800:21;15831:4;15837:24;15855:4;15837:9;:24::i;:::-;15862:1;15864;15866:7;:5;:7::i;:::-;15874:15;15761:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15908:13;;;;;;;;;;;15901:29;;;15939:15;;;;;;;;;;;15957:14;15901:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15997:4;15983:11;;:18;;;;;;;;;;;;;;;;;;16026:4;16012:11;;:18;;;;;;;;;;;;;;;;;;15367:671::o:0;14226:713::-;3421:12;:10;:12::i;:::-;3411:22;;:6;;;;;;;;;;;:22;;;3403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14429:1:::1;14401:30;;:16;:30;;::::0;14393:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14506:1;14476:32;;:18;:32;;::::0;14468:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14583:1;14555:30;;:16;:30;;::::0;14547:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14652:16;14624:17;;:45;;;;;;;;;;;;;;;;;;14706:18;14676:19;;:49;;;;;;;;;;;;;;;;;;14760:16;14732:17;;:45;;;;;;;;;;;;;;;;;;14825:4;14786:18;:36;14805:16;14786:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;14877:4;14836:18;:38;14855:18;14836:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;14927:4;14888:18;:36;14907:16;14888:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;14226:713:::0;;;:::o;7726:143::-;7807:7;7834:11;:18;7846:5;7834:18;;;;;;;;;;;;;;;:27;7853:7;7834:27;;;;;;;;;;;;;;;;7827:34;;7726:143;;;;:::o;16048:225::-;16123:17;;;;;;;;;;;16109:31;;:12;:10;:12::i;:::-;:31;;;16101:40;;;;;;16167:12;;16158:7;:21;;:47;;;;;16192:13;;16183:7;:22;;16158:47;16150:56;;;;;;16228:7;16215:12;:20;;;;16258:7;16244:13;:21;;;;16048:225;:::o;1039:98::-;1092:7;1119:10;1112:17;;1039:98;:::o;8367:335::-;8477:1;8460:19;;:5;:19;;;8452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8558:1;8539:21;;:7;:21;;;8531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8640:6;8610:11;:18;8622:5;8610:18;;;;;;;;;;;;;;;:27;8629:7;8610:27;;;;;;;;;;;;;;;:36;;;;8678:7;8662:32;;8671:5;8662:32;;;8687:6;8662:32;;;;;;:::i;:::-;;;;;;;;8367:335;;;:::o;13116:538::-;13184:7;13228:1;13212:6;:13;:17;13204:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;13275:1;13258:6;:13;:18;13254:67;;13300:6;13307:1;13300:9;;;;;;;;:::i;:::-;;;;;;;;13293:16;;;;13254:67;13331:9;13343:6;:13;13331:25;;13367:9;13379:1;13367:13;;13400:9;13412:1;13400:13;;13395:123;13423:1;13419;:5;;;;:::i;:::-;13415:1;:9;13395:123;;;13486:6;13493:1;13486:9;;;;;;;;:::i;:::-;;;;;;;;13497:6;13506:1;13504;:3;;;;:::i;:::-;13497:11;;;;;;;;:::i;:::-;;;;;;;;13469:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13459:51;;;;;;13445:6;13452:3;;;;;:::i;:::-;;;13445:11;;;;;;;;:::i;:::-;;;;;;;:65;;;;;13431:1;13426:6;;;;;:::i;:::-;;;13395:123;;;;13545:1;13540;13536;:5;;;;:::i;:::-;:10;13532:68;;13581:6;13590:1;13588;:3;;;;:::i;:::-;13581:11;;;;;;;;:::i;:::-;;;;;;;;13567:6;13574:3;;;;;:::i;:::-;;;13567:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;13532:68;13613:33;13624:21;13635:6;13643:1;13624:10;:21::i;:::-;13613:10;:33::i;:::-;13606:40;;;;13116:538;;;;:::o;8710:2448::-;8814:1;8798:18;;:4;:18;;;8790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8891:1;8877:16;;:2;:16;;;8869:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8961:1;8952:6;:10;8944:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9019:17;9037:1;9019:19;;9061:7;:5;:7::i;:::-;9053:15;;:4;:15;;;;:32;;;;;9078:7;:5;:7::i;:::-;9072:13;;:2;:13;;;;9053:32;9049:1753;;;9111:4;:10;9116:4;9111:10;;;;;;;;;;;;;;;;;;;;;;;;;9110:11;:24;;;;;9126:4;:8;9131:2;9126:8;;;;;;;;;;;;;;;;;;;;;;;;;9125:9;9110:24;9102:33;;;;;;9166:1;9155:9;;:12;9152:139;;9199:76;9271:3;9199:67;9221:15;;9211:9;;:25;9210:55;;9251:14;;9210:55;;;9238:12;;9210:55;9199:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;9187:88;;9152:139;9318:1;9308:9;;:11;9305:95;;;9351:33;9380:3;9351:24;9362:12;;9351:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;9339:45;;9305:95;9428:13;;;;;;;;;;;9420:21;;:4;:21;;;:55;;;;;9459:15;;;;;;;;;;;9445:30;;:2;:30;;;;9420:55;:83;;;;;9481:18;:22;9500:2;9481:22;;;;;;;;;;;;;;;;;;;;;;;;;9479:24;9420:83;9416:420;;;9543:12;;9533:6;:22;;9525:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9638:14;;9628:6;9612:13;9622:2;9612:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;9604:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9714:76;9786:3;9714:67;9736:15;;9726:9;;:25;9725:55;;9766:14;;9725:55;;;9753:12;;9725:55;9714:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;9702:88;;9809:9;;:11;;;;;;;;;:::i;:::-;;;;;;9416:420;9861:13;;;;;;;;;;;9855:19;;:2;:19;;;:43;;;;;9893:4;9878:20;;:4;:20;;;;9855:43;9852:174;;;9931:79;10006:3;9931:70;9953:16;;9943:9;;:26;9942:58;;9985:15;;9942:58;;;9971:13;;9942:58;9931:6;:10;;:70;;;;:::i;:::-;:74;;:79;;;;:::i;:::-;9919:91;;9852:174;10042:28;10073:24;10091:4;10073:9;:24::i;:::-;10042:55;;10117:6;;;;;;;;;;;10116:7;:30;;;;;10133:13;;;;;;;;;;;10127:19;;:2;:19;;;10116:30;:45;;;;;10150:11;;;;;;;;;;;10116:45;:89;;;;;10188:17;;10165:20;:40;10116:89;:123;;;;;10221:18;;10209:9;;:30;10116:123;10112:679;;;10279:13;;10264:12;:28;10260:90;;;10329:1;10317:9;:13;;;;10260:90;10388:1;10376:9;;:13;10368:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;10436:69;10453:51;10457:6;10465:38;10469:20;10491:11;;10465:3;:38::i;:::-;10453:3;:51::i;:::-;10436:16;:69::i;:::-;10524:26;10553:21;10524:50;;10618:1;10597:18;:22;10593:106;;;10644:35;10657:21;10644:12;:35::i;:::-;10593:106;10717:9;;:11;;;;;;;;;:::i;:::-;;;;;;10763:12;10747:13;:28;;;;10241:550;10112:679;9087:1715;9049:1753;10827:1;10817:9;:11;10814:161;;;10867:39;10896:9;10867;:24;10885:4;10867:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;10842:9;:24;10860:4;10842:24;;;;;;;;;;;;;;;:64;;;;10947:4;10924:39;;10933:4;10924:39;;;10953:9;10924:39;;;;;;:::i;:::-;;;;;;;;10814:161;11001:27;11021:6;11001:9;:15;11011:4;11001:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;10985:9;:15;10995:4;10985:15;;;;;;;;;;;;;;;:43;;;;11053:40;11071:21;11082:9;11071:6;:10;;:21;;;;:::i;:::-;11053:9;:13;11063:2;11053:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;11039:9;:13;11049:2;11039:13;;;;;;;;;;;;;;;:54;;;;11124:2;11109:41;;11118:4;11109:41;;;11128:21;11139:9;11128:6;:10;;:21;;;;:::i;:::-;11109:41;;;;;;:::i;:::-;;;;;;;;8779:2379;8710:2448;;;:::o;2176:190::-;2262:7;2295:1;2290;:6;;2298:12;2282:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2322:9;2338:1;2334;:5;;;;:::i;:::-;2322:17;;2357:1;2350:8;;;2176:190;;;;;:::o;11274:483::-;6426:4;6417:6;;:13;;;;;;;;;;;;;;;;;;11352:21:::1;11390:1;11376:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11352:40;;11421:4;11403;11408:1;11403:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11447:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11437:4;11442:1;11437:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;11480:62;11497:4;11512:15;;;;;;;;;;;11530:11;11480:8;:62::i;:::-;11553:15;;;;;;;;;;;:66;;;11634:11;11660:1;11676:4;11703;11723:15;11553:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11341:416;6462:5:::0;6453:6;;:14;;;;;;;;;;;;;;;;;;11274:483;:::o;14947:412::-;15004:20;15027;15045:1;15027:13;15038:1;15027:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;15004:43;;15058:22;15083:20;15101:1;15083:13;15094:1;15083:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;15058:45;;15114:20;15137;15155:1;15137:13;15148:1;15137:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;15114:43;;15186:17;;;;;;;;;;;15178:35;;:49;15214:12;15178:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15246:19;;;;;;;;;;;15238:37;;:53;15276:14;15238:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15310:17;;;;;;;;;;;15302:35;;:49;15338:12;15302:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14993:366;;;14947:412;:::o;13662:262::-;13738:16;13767:23;13807:1;13793:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13767:42;;13829:9;13841:1;13829:13;;13824:69;13848:1;13844;:5;13824:69;;;13879:3;13883:1;13879:6;;;;;;;;:::i;:::-;;;;;;;;13867;13874:1;13867:9;;;;;;;;:::i;:::-;;;;;;;:18;;;;;13851:3;;;;;;;13824:69;;;;13910:6;13903:13;;;13662:262;;;;:::o;2374:246::-;2432:7;2461:1;2456;:6;2452:47;;2486:1;2479:8;;;;2452:47;2509:9;2525:1;2521;:5;;;;:::i;:::-;2509:17;;2554:1;2549;2545;:5;;;;:::i;:::-;:10;2537:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2611:1;2604:8;;;2374:246;;;;;:::o;2628:132::-;2686:7;2713:39;2717:1;2720;2713:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2706:46;;2628:132;;;;:::o;11168:98::-;11225:7;11252:1;11250;:3;11249:9;;11257:1;11249:9;;;11255:1;11249:9;11242:16;;11168:98;;;;:::o;1845:179::-;1903:7;1923:9;1939:1;1935;:5;;;;:::i;:::-;1923:17;;1964:1;1959;:6;;1951:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2015:1;2008:8;;;1845:179;;;;:::o;2032:136::-;2090:7;2117:43;2121:1;2124;2117:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2110:50;;2032:136;;;;:::o;2768:189::-;2854:7;2886:1;2882;:5;2889:12;2874:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2913:9;2929:1;2925;:5;;;;:::i;:::-;2913:17;;2948:1;2941:8;;;2768:189;;;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:77::-;3376:7;3405:5;3394:16;;3339:77;;;:::o;3422:118::-;3509:24;3527:5;3509:24;:::i;:::-;3504:3;3497:37;3422:118;;:::o;3546:222::-;3639:4;3677:2;3666:9;3662:18;3654:26;;3690:71;3758:1;3747:9;3743:17;3734:6;3690:71;:::i;:::-;3546:222;;;;:::o;3774:118::-;3861:24;3879:5;3861:24;:::i;:::-;3856:3;3849:37;3774:118;;:::o;3898:222::-;3991:4;4029:2;4018:9;4014:18;4006:26;;4042:71;4110:1;4099:9;4095:17;4086:6;4042:71;:::i;:::-;3898:222;;;;:::o;4126:619::-;4203:6;4211;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4649:2;4675:53;4720:7;4711:6;4700:9;4696:22;4675:53;:::i;:::-;4665:63;;4620:118;4126:619;;;;;:::o;4751:86::-;4786:7;4826:4;4819:5;4815:16;4804:27;;4751:86;;;:::o;4843:112::-;4926:22;4942:5;4926:22;:::i;:::-;4921:3;4914:35;4843:112;;:::o;4961:214::-;5050:4;5088:2;5077:9;5073:18;5065:26;;5101:67;5165:1;5154:9;5150:17;5141:6;5101:67;:::i;:::-;4961:214;;;;:::o;5181:329::-;5240:6;5289:2;5277:9;5268:7;5264:23;5260:32;5257:119;;;5295:79;;:::i;:::-;5257:119;5415:1;5440:53;5485:7;5476:6;5465:9;5461:22;5440:53;:::i;:::-;5430:63;;5386:117;5181:329;;;;:::o;5516:::-;5575:6;5624:2;5612:9;5603:7;5599:23;5595:32;5592:119;;;5630:79;;:::i;:::-;5592:119;5750:1;5775:53;5820:7;5811:6;5800:9;5796:22;5775:53;:::i;:::-;5765:63;;5721:117;5516:329;;;;:::o;5851:98::-;5902:6;5936:5;5930:12;5920:22;;5851:98;;;:::o;5955:168::-;6038:11;6072:6;6067:3;6060:19;6112:4;6107:3;6103:14;6088:29;;5955:168;;;;:::o;6129:373::-;6215:3;6243:38;6275:5;6243:38;:::i;:::-;6297:70;6360:6;6355:3;6297:70;:::i;:::-;6290:77;;6376:65;6434:6;6429:3;6422:4;6415:5;6411:16;6376:65;:::i;:::-;6466:29;6488:6;6466:29;:::i;:::-;6461:3;6457:39;6450:46;;6219:283;6129:373;;;;:::o;6508:419::-;6647:4;6685:2;6674:9;6670:18;6662:26;;6698:71;6766:1;6755:9;6751:17;6742:6;6698:71;:::i;:::-;6816:9;6810:4;6806:20;6801:2;6790:9;6786:18;6779:48;6844:76;6915:4;6906:6;6844:76;:::i;:::-;6836:84;;6508:419;;;;;:::o;6933:118::-;7020:24;7038:5;7020:24;:::i;:::-;7015:3;7008:37;6933:118;;:::o;7057:222::-;7150:4;7188:2;7177:9;7173:18;7165:26;;7201:71;7269:1;7258:9;7254:17;7245:6;7201:71;:::i;:::-;7057:222;;;;:::o;7285:117::-;7394:1;7391;7384:12;7408:117;7517:1;7514;7507:12;7531:180;7579:77;7576:1;7569:88;7676:4;7673:1;7666:15;7700:4;7697:1;7690:15;7717:281;7800:27;7822:4;7800:27;:::i;:::-;7792:6;7788:40;7930:6;7918:10;7915:22;7894:18;7882:10;7879:34;7876:62;7873:88;;;7941:18;;:::i;:::-;7873:88;7981:10;7977:2;7970:22;7760:238;7717:281;;:::o;8004:129::-;8038:6;8065:20;;:::i;:::-;8055:30;;8094:33;8122:4;8114:6;8094:33;:::i;:::-;8004:129;;;:::o;8139:307::-;8200:4;8290:18;8282:6;8279:30;8276:56;;;8312:18;;:::i;:::-;8276:56;8350:29;8372:6;8350:29;:::i;:::-;8342:37;;8434:4;8428;8424:15;8416:23;;8139:307;;;:::o;8452:148::-;8550:6;8545:3;8540;8527:30;8591:1;8582:6;8577:3;8573:16;8566:27;8452:148;;;:::o;8606:423::-;8683:5;8708:65;8724:48;8765:6;8724:48;:::i;:::-;8708:65;:::i;:::-;8699:74;;8796:6;8789:5;8782:21;8834:4;8827:5;8823:16;8872:3;8863:6;8858:3;8854:16;8851:25;8848:112;;;8879:79;;:::i;:::-;8848:112;8969:54;9016:6;9011:3;9006;8969:54;:::i;:::-;8689:340;8606:423;;;;;:::o;9048:338::-;9103:5;9152:3;9145:4;9137:6;9133:17;9129:27;9119:122;;9160:79;;:::i;:::-;9119:122;9277:6;9264:20;9302:78;9376:3;9368:6;9361:4;9353:6;9349:17;9302:78;:::i;:::-;9293:87;;9109:277;9048:338;;;;:::o;9392:652::-;9469:6;9477;9526:2;9514:9;9505:7;9501:23;9497:32;9494:119;;;9532:79;;:::i;:::-;9494:119;9652:1;9677:53;9722:7;9713:6;9702:9;9698:22;9677:53;:::i;:::-;9667:63;;9623:117;9807:2;9796:9;9792:18;9779:32;9838:18;9830:6;9827:30;9824:117;;;9860:79;;:::i;:::-;9824:117;9965:62;10019:7;10010:6;9999:9;9995:22;9965:62;:::i;:::-;9955:72;;9750:287;9392:652;;;;;:::o;10050:619::-;10127:6;10135;10143;10192:2;10180:9;10171:7;10167:23;10163:32;10160:119;;;10198:79;;:::i;:::-;10160:119;10318:1;10343:53;10388:7;10379:6;10368:9;10364:22;10343:53;:::i;:::-;10333:63;;10289:117;10445:2;10471:53;10516:7;10507:6;10496:9;10492:22;10471:53;:::i;:::-;10461:63;;10416:118;10573:2;10599:53;10644:7;10635:6;10624:9;10620:22;10599:53;:::i;:::-;10589:63;;10544:118;10050:619;;;;;:::o;10675:474::-;10743:6;10751;10800:2;10788:9;10779:7;10775:23;10771:32;10768:119;;;10806:79;;:::i;:::-;10768:119;10926:1;10951:53;10996:7;10987:6;10976:9;10972:22;10951:53;:::i;:::-;10941:63;;10897:117;11053:2;11079:53;11124:7;11115:6;11104:9;11100:22;11079:53;:::i;:::-;11069:63;;11024:118;10675:474;;;;;:::o;11155:180::-;11203:77;11200:1;11193:88;11300:4;11297:1;11290:15;11324:4;11321:1;11314:15;11341:79;11380:7;11409:5;11398:16;;11341:79;;;:::o;11426:157::-;11531:45;11551:24;11569:5;11551:24;:::i;:::-;11531:45;:::i;:::-;11526:3;11519:58;11426:157;;:::o;11589:180::-;11637:77;11634:1;11627:88;11734:4;11731:1;11724:15;11758:4;11755:1;11748:15;11775:320;11819:6;11856:1;11850:4;11846:12;11836:22;;11903:1;11897:4;11893:12;11924:18;11914:81;;11980:4;11972:6;11968:17;11958:27;;11914:81;12042:2;12034:6;12031:14;12011:18;12008:38;12005:84;;12061:18;;:::i;:::-;12005:84;11826:269;11775:320;;;:::o;12101:147::-;12202:11;12239:3;12224:18;;12101:147;;;;:::o;12254:140::-;12302:4;12325:3;12317:11;;12348:3;12345:1;12338:14;12382:4;12379:1;12369:18;12361:26;;12254:140;;;:::o;12422:870::-;12523:3;12560:5;12554:12;12589:36;12615:9;12589:36;:::i;:::-;12641:88;12722:6;12717:3;12641:88;:::i;:::-;12634:95;;12760:1;12749:9;12745:17;12776:1;12771:166;;;;12951:1;12946:340;;;;12738:548;;12771:166;12855:4;12851:9;12840;12836:25;12831:3;12824:38;12917:6;12910:14;12903:22;12895:6;12891:35;12886:3;12882:45;12875:52;;12771:166;;12946:340;13013:37;13044:5;13013:37;:::i;:::-;13072:1;13086:154;13100:6;13097:1;13094:13;13086:154;;;13174:7;13168:14;13164:1;13159:3;13155:11;13148:35;13224:1;13215:7;13211:15;13200:26;;13122:4;13119:1;13115:12;13110:17;;13086:154;;;13269:6;13264:3;13260:16;13253:23;;12953:333;;12738:548;;12527:765;;12422:870;;;;:::o;13298:406::-;13453:3;13468:75;13539:3;13530:6;13468:75;:::i;:::-;13568:2;13563:3;13559:12;13552:19;;13588:90;13674:3;13665:6;13588:90;:::i;:::-;13581:97;;13695:3;13688:10;;13298:406;;;;;:::o;13710:182::-;13850:34;13846:1;13838:6;13834:14;13827:58;13710:182;:::o;13898:366::-;14040:3;14061:67;14125:2;14120:3;14061:67;:::i;:::-;14054:74;;14137:93;14226:3;14137:93;:::i;:::-;14255:2;14250:3;14246:12;14239:19;;13898:366;;;:::o;14270:419::-;14436:4;14474:2;14463:9;14459:18;14451:26;;14523:9;14517:4;14513:20;14509:1;14498:9;14494:17;14487:47;14551:131;14677:4;14551:131;:::i;:::-;14543:139;;14270:419;;;:::o;14695:85::-;14740:7;14769:5;14758:16;;14695:85;;;:::o;14786:60::-;14814:3;14835:5;14828:12;;14786:60;;;:::o;14852:158::-;14910:9;14943:61;14961:42;14970:32;14996:5;14970:32;:::i;:::-;14961:42;:::i;:::-;14943:61;:::i;:::-;14930:74;;14852:158;;;:::o;15016:147::-;15111:45;15150:5;15111:45;:::i;:::-;15106:3;15099:58;15016:147;;:::o;15169:238::-;15270:4;15308:2;15297:9;15293:18;15285:26;;15321:79;15397:1;15386:9;15382:17;15373:6;15321:79;:::i;:::-;15169:238;;;;:::o;15413:180::-;15461:77;15458:1;15451:88;15558:4;15555:1;15548:15;15582:4;15579:1;15572:15;15599:102;15641:8;15688:5;15685:1;15681:13;15660:34;;15599:102;;;:::o;15707:848::-;15768:5;15775:4;15799:6;15790:15;;15823:5;15814:14;;15837:712;15858:1;15848:8;15845:15;15837:712;;;15953:4;15948:3;15944:14;15938:4;15935:24;15932:50;;;15962:18;;:::i;:::-;15932:50;16012:1;16002:8;15998:16;15995:451;;;16427:4;16420:5;16416:16;16407:25;;15995:451;16477:4;16471;16467:15;16459:23;;16507:32;16530:8;16507:32;:::i;:::-;16495:44;;15837:712;;;15707:848;;;;;;;:::o;16561:1073::-;16615:5;16806:8;16796:40;;16827:1;16818:10;;16829:5;;16796:40;16855:4;16845:36;;16872:1;16863:10;;16874:5;;16845:36;16941:4;16989:1;16984:27;;;;17025:1;17020:191;;;;16934:277;;16984:27;17002:1;16993:10;;17004:5;;;17020:191;17065:3;17055:8;17052:17;17049:43;;;17072:18;;:::i;:::-;17049:43;17121:8;17118:1;17114:16;17105:25;;17156:3;17149:5;17146:14;17143:40;;;17163:18;;:::i;:::-;17143:40;17196:5;;;16934:277;;17320:2;17310:8;17307:16;17301:3;17295:4;17292:13;17288:36;17270:2;17260:8;17257:16;17252:2;17246:4;17243:12;17239:35;17223:111;17220:246;;;17376:8;17370:4;17366:19;17357:28;;17411:3;17404:5;17401:14;17398:40;;;17418:18;;:::i;:::-;17398:40;17451:5;;17220:246;17491:42;17529:3;17519:8;17513:4;17510:1;17491:42;:::i;:::-;17476:57;;;;17565:4;17560:3;17556:14;17549:5;17546:25;17543:51;;;17574:18;;:::i;:::-;17543:51;17623:4;17616:5;17612:16;17603:25;;16561:1073;;;;;;:::o;17640:281::-;17698:5;17722:23;17740:4;17722:23;:::i;:::-;17714:31;;17766:25;17782:8;17766:25;:::i;:::-;17754:37;;17810:104;17847:66;17837:8;17831:4;17810:104;:::i;:::-;17801:113;;17640:281;;;;:::o;17927:410::-;17967:7;17990:20;18008:1;17990:20;:::i;:::-;17985:25;;18024:20;18042:1;18024:20;:::i;:::-;18019:25;;18079:1;18076;18072:9;18101:30;18119:11;18101:30;:::i;:::-;18090:41;;18280:1;18271:7;18267:15;18264:1;18261:22;18241:1;18234:9;18214:83;18191:139;;18310:18;;:::i;:::-;18191:139;17975:362;17927:410;;;;:::o;18343:93::-;18380:6;18427:2;18422;18415:5;18411:14;18407:23;18397:33;;18343:93;;;:::o;18442:107::-;18486:8;18536:5;18530:4;18526:16;18505:37;;18442:107;;;;:::o;18555:393::-;18624:6;18674:1;18662:10;18658:18;18697:97;18727:66;18716:9;18697:97;:::i;:::-;18815:39;18845:8;18834:9;18815:39;:::i;:::-;18803:51;;18887:4;18883:9;18876:5;18872:21;18863:30;;18936:4;18926:8;18922:19;18915:5;18912:30;18902:40;;18631:317;;18555:393;;;;;:::o;18954:142::-;19004:9;19037:53;19055:34;19064:24;19082:5;19064:24;:::i;:::-;19055:34;:::i;:::-;19037:53;:::i;:::-;19024:66;;18954:142;;;:::o;19102:75::-;19145:3;19166:5;19159:12;;19102:75;;;:::o;19183:269::-;19293:39;19324:7;19293:39;:::i;:::-;19354:91;19403:41;19427:16;19403:41;:::i;:::-;19395:6;19388:4;19382:11;19354:91;:::i;:::-;19348:4;19341:105;19259:193;19183:269;;;:::o;19458:73::-;19503:3;19524:1;19517:8;;19458:73;:::o;19537:189::-;19614:32;;:::i;:::-;19655:65;19713:6;19705;19699:4;19655:65;:::i;:::-;19590:136;19537:189;;:::o;19732:186::-;19792:120;19809:3;19802:5;19799:14;19792:120;;;19863:39;19900:1;19893:5;19863:39;:::i;:::-;19836:1;19829:5;19825:13;19816:22;;19792:120;;;19732:186;;:::o;19924:541::-;20024:2;20019:3;20016:11;20013:445;;;20058:37;20089:5;20058:37;:::i;:::-;20141:29;20159:10;20141:29;:::i;:::-;20131:8;20127:44;20324:2;20312:10;20309:18;20306:49;;;20345:8;20330:23;;20306:49;20368:80;20424:22;20442:3;20424:22;:::i;:::-;20414:8;20410:37;20397:11;20368:80;:::i;:::-;20028:430;;20013:445;19924:541;;;:::o;20471:117::-;20525:8;20575:5;20569:4;20565:16;20544:37;;20471:117;;;;:::o;20594:169::-;20638:6;20671:51;20719:1;20715:6;20707:5;20704:1;20700:13;20671:51;:::i;:::-;20667:56;20752:4;20746;20742:15;20732:25;;20645:118;20594:169;;;;:::o;20768:295::-;20844:4;20990:29;21015:3;21009:4;20990:29;:::i;:::-;20982:37;;21052:3;21049:1;21045:11;21039:4;21036:21;21028:29;;20768:295;;;;:::o;21068:1390::-;21183:36;21215:3;21183:36;:::i;:::-;21284:18;21276:6;21273:30;21270:56;;;21306:18;;:::i;:::-;21270:56;21350:38;21382:4;21376:11;21350:38;:::i;:::-;21435:66;21494:6;21486;21480:4;21435:66;:::i;:::-;21528:1;21552:4;21539:17;;21584:2;21576:6;21573:14;21601:1;21596:617;;;;22257:1;22274:6;22271:77;;;22323:9;22318:3;22314:19;22308:26;22299:35;;22271:77;22374:67;22434:6;22427:5;22374:67;:::i;:::-;22368:4;22361:81;22230:222;21566:886;;21596:617;21648:4;21644:9;21636:6;21632:22;21682:36;21713:4;21682:36;:::i;:::-;21740:1;21754:208;21768:7;21765:1;21762:14;21754:208;;;21847:9;21842:3;21838:19;21832:26;21824:6;21817:42;21898:1;21890:6;21886:14;21876:24;;21945:2;21934:9;21930:18;21917:31;;21791:4;21788:1;21784:12;21779:17;;21754:208;;;21990:6;21981:7;21978:19;21975:179;;;22048:9;22043:3;22039:19;22033:26;22091:48;22133:4;22125:6;22121:17;22110:9;22091:48;:::i;:::-;22083:6;22076:64;21998:156;21975:179;22200:1;22196;22188:6;22184:14;22180:22;22174:4;22167:36;21603:610;;;21566:886;;21158:1300;;;21068:1390;;:::o;22464:168::-;22604:20;22600:1;22592:6;22588:14;22581:44;22464:168;:::o;22638:366::-;22780:3;22801:67;22865:2;22860:3;22801:67;:::i;:::-;22794:74;;22877:93;22966:3;22877:93;:::i;:::-;22995:2;22990:3;22986:12;22979:19;;22638:366;;;:::o;23010:419::-;23176:4;23214:2;23203:9;23199:18;23191:26;;23263:9;23257:4;23253:20;23249:1;23238:9;23234:17;23227:47;23291:131;23417:4;23291:131;:::i;:::-;23283:139;;23010:419;;;:::o;23435:175::-;23575:27;23571:1;23563:6;23559:14;23552:51;23435:175;:::o;23616:366::-;23758:3;23779:67;23843:2;23838:3;23779:67;:::i;:::-;23772:74;;23855:93;23944:3;23855:93;:::i;:::-;23973:2;23968:3;23964:12;23957:19;;23616:366;;;:::o;23988:419::-;24154:4;24192:2;24181:9;24177:18;24169:26;;24241:9;24235:4;24231:20;24227:1;24216:9;24212:17;24205:47;24269:131;24395:4;24269:131;:::i;:::-;24261:139;;23988:419;;;:::o;24413:173::-;24553:25;24549:1;24541:6;24537:14;24530:49;24413:173;:::o;24592:366::-;24734:3;24755:67;24819:2;24814:3;24755:67;:::i;:::-;24748:74;;24831:93;24920:3;24831:93;:::i;:::-;24949:2;24944:3;24940:12;24933:19;;24592:366;;;:::o;24964:419::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:143::-;25446:5;25477:6;25471:13;25462:22;;25493:33;25520:5;25493:33;:::i;:::-;25389:143;;;;:::o;25538:351::-;25608:6;25657:2;25645:9;25636:7;25632:23;25628:32;25625:119;;;25663:79;;:::i;:::-;25625:119;25783:1;25808:64;25864:7;25855:6;25844:9;25840:22;25808:64;:::i;:::-;25798:74;;25754:128;25538:351;;;;:::o;25895:332::-;26016:4;26054:2;26043:9;26039:18;26031:26;;26067:71;26135:1;26124:9;26120:17;26111:6;26067:71;:::i;:::-;26148:72;26216:2;26205:9;26201:18;26192:6;26148:72;:::i;:::-;25895:332;;;;;:::o;26233:807::-;26482:4;26520:3;26509:9;26505:19;26497:27;;26534:71;26602:1;26591:9;26587:17;26578:6;26534:71;:::i;:::-;26615:72;26683:2;26672:9;26668:18;26659:6;26615:72;:::i;:::-;26697:80;26773:2;26762:9;26758:18;26749:6;26697:80;:::i;:::-;26787;26863:2;26852:9;26848:18;26839:6;26787:80;:::i;:::-;26877:73;26945:3;26934:9;26930:19;26921:6;26877:73;:::i;:::-;26960;27028:3;27017:9;27013:19;27004:6;26960:73;:::i;:::-;26233:807;;;;;;;;;:::o;27046:143::-;27103:5;27134:6;27128:13;27119:22;;27150:33;27177:5;27150:33;:::i;:::-;27046:143;;;;:::o;27195:663::-;27283:6;27291;27299;27348:2;27336:9;27327:7;27323:23;27319:32;27316:119;;;27354:79;;:::i;:::-;27316:119;27474:1;27499:64;27555:7;27546:6;27535:9;27531:22;27499:64;:::i;:::-;27489:74;;27445:128;27612:2;27638:64;27694:7;27685:6;27674:9;27670:22;27638:64;:::i;:::-;27628:74;;27583:129;27751:2;27777:64;27833:7;27824:6;27813:9;27809:22;27777:64;:::i;:::-;27767:74;;27722:129;27195:663;;;;;:::o;27864:332::-;27985:4;28023:2;28012:9;28008:18;28000:26;;28036:71;28104:1;28093:9;28089:17;28080:6;28036:71;:::i;:::-;28117:72;28185:2;28174:9;28170:18;28161:6;28117:72;:::i;:::-;27864:332;;;;;:::o;28202:116::-;28272:21;28287:5;28272:21;:::i;:::-;28265:5;28262:32;28252:60;;28308:1;28305;28298:12;28252:60;28202:116;:::o;28324:137::-;28378:5;28409:6;28403:13;28394:22;;28425:30;28449:5;28425:30;:::i;:::-;28324:137;;;;:::o;28467:345::-;28534:6;28583:2;28571:9;28562:7;28558:23;28554:32;28551:119;;;28589:79;;:::i;:::-;28551:119;28709:1;28734:61;28787:7;28778:6;28767:9;28763:22;28734:61;:::i;:::-;28724:71;;28680:125;28467:345;;;;:::o;28818:175::-;28958:27;28954:1;28946:6;28942:14;28935:51;28818:175;:::o;28999:366::-;29141:3;29162:67;29226:2;29221:3;29162:67;:::i;:::-;29155:74;;29238:93;29327:3;29238:93;:::i;:::-;29356:2;29351:3;29347:12;29340:19;;28999:366;;;:::o;29371:419::-;29537:4;29575:2;29564:9;29560:18;29552:26;;29624:9;29618:4;29614:20;29610:1;29599:9;29595:17;29588:47;29652:131;29778:4;29652:131;:::i;:::-;29644:139;;29371:419;;;:::o;29796:177::-;29936:29;29932:1;29924:6;29920:14;29913:53;29796:177;:::o;29979:366::-;30121:3;30142:67;30206:2;30201:3;30142:67;:::i;:::-;30135:74;;30218:93;30307:3;30218:93;:::i;:::-;30336:2;30331:3;30327:12;30320:19;;29979:366;;;:::o;30351:419::-;30517:4;30555:2;30544:9;30540:18;30532:26;;30604:9;30598:4;30594:20;30590:1;30579:9;30575:17;30568:47;30632:131;30758:4;30632:131;:::i;:::-;30624:139;;30351:419;;;:::o;30776:175::-;30916:27;30912:1;30904:6;30900:14;30893:51;30776:175;:::o;30957:366::-;31099:3;31120:67;31184:2;31179:3;31120:67;:::i;:::-;31113:74;;31196:93;31285:3;31196:93;:::i;:::-;31314:2;31309:3;31305:12;31298:19;;30957:366;;;:::o;31329:419::-;31495:4;31533:2;31522:9;31518:18;31510:26;;31582:9;31576:4;31572:20;31568:1;31557:9;31553:17;31546:47;31610:131;31736:4;31610:131;:::i;:::-;31602:139;;31329:419;;;:::o;31754:223::-;31894:34;31890:1;31882:6;31878:14;31871:58;31963:6;31958:2;31950:6;31946:15;31939:31;31754:223;:::o;31983:366::-;32125:3;32146:67;32210:2;32205:3;32146:67;:::i;:::-;32139:74;;32222:93;32311:3;32222:93;:::i;:::-;32340:2;32335:3;32331:12;32324:19;;31983:366;;;:::o;32355:419::-;32521:4;32559:2;32548:9;32544:18;32536:26;;32608:9;32602:4;32598:20;32594:1;32583:9;32579:17;32572:47;32636:131;32762:4;32636:131;:::i;:::-;32628:139;;32355:419;;;:::o;32780:221::-;32920:34;32916:1;32908:6;32904:14;32897:58;32989:4;32984:2;32976:6;32972:15;32965:29;32780:221;:::o;33007:366::-;33149:3;33170:67;33234:2;33229:3;33170:67;:::i;:::-;33163:74;;33246:93;33335:3;33246:93;:::i;:::-;33364:2;33359:3;33355:12;33348:19;;33007:366;;;:::o;33379:419::-;33545:4;33583:2;33572:9;33568:18;33560:26;;33632:9;33626:4;33622:20;33618:1;33607:9;33603:17;33596:47;33660:131;33786:4;33660:131;:::i;:::-;33652:139;;33379:419;;;:::o;33804:159::-;33944:11;33940:1;33932:6;33928:14;33921:35;33804:159;:::o;33969:365::-;34111:3;34132:66;34196:1;34191:3;34132:66;:::i;:::-;34125:73;;34207:93;34296:3;34207:93;:::i;:::-;34325:2;34320:3;34316:12;34309:19;;33969:365;;;:::o;34340:419::-;34506:4;34544:2;34533:9;34529:18;34521:26;;34593:9;34587:4;34583:20;34579:1;34568:9;34564:17;34557:47;34621:131;34747:4;34621:131;:::i;:::-;34613:139;;34340:419;;;:::o;34765:194::-;34805:4;34825:20;34843:1;34825:20;:::i;:::-;34820:25;;34859:20;34877:1;34859:20;:::i;:::-;34854:25;;34903:1;34900;34896:9;34888:17;;34927:1;34921:4;34918:11;34915:37;;;34932:18;;:::i;:::-;34915:37;34765:194;;;;:::o;34965:191::-;35005:3;35024:20;35042:1;35024:20;:::i;:::-;35019:25;;35058:20;35076:1;35058:20;:::i;:::-;35053:25;;35101:1;35098;35094:9;35087:16;;35122:3;35119:1;35116:10;35113:36;;;35129:18;;:::i;:::-;35113:36;34965:191;;;;:::o;35162:79::-;35201:7;35230:5;35219:16;;35162:79;;;:::o;35247:157::-;35352:45;35372:24;35390:5;35372:24;:::i;:::-;35352:45;:::i;:::-;35347:3;35340:58;35247:157;;:::o;35410:397::-;35550:3;35565:75;35636:3;35627:6;35565:75;:::i;:::-;35665:2;35660:3;35656:12;35649:19;;35678:75;35749:3;35740:6;35678:75;:::i;:::-;35778:2;35773:3;35769:12;35762:19;;35798:3;35791:10;;35410:397;;;;;:::o;35813:233::-;35852:3;35875:24;35893:5;35875:24;:::i;:::-;35866:33;;35921:66;35914:5;35911:77;35908:103;;35991:18;;:::i;:::-;35908:103;36038:1;36031:5;36027:13;36020:20;;35813:233;;;:::o;36052:180::-;36100:77;36097:1;36090:88;36197:4;36194:1;36187:15;36221:4;36218:1;36211:15;36238:176;36270:1;36287:20;36305:1;36287:20;:::i;:::-;36282:25;;36321:20;36339:1;36321:20;:::i;:::-;36316:25;;36360:1;36350:35;;36365:18;;:::i;:::-;36350:35;36406:1;36403;36399:9;36394:14;;36238:176;;;;:::o;36420:224::-;36560:34;36556:1;36548:6;36544:14;36537:58;36629:7;36624:2;36616:6;36612:15;36605:32;36420:224;:::o;36650:366::-;36792:3;36813:67;36877:2;36872:3;36813:67;:::i;:::-;36806:74;;36889:93;36978:3;36889:93;:::i;:::-;37007:2;37002:3;36998:12;36991:19;;36650:366;;;:::o;37022:419::-;37188:4;37226:2;37215:9;37211:18;37203:26;;37275:9;37269:4;37265:20;37261:1;37250:9;37246:17;37239:47;37303:131;37429:4;37303:131;:::i;:::-;37295:139;;37022:419;;;:::o;37447:222::-;37587:34;37583:1;37575:6;37571:14;37564:58;37656:5;37651:2;37643:6;37639:15;37632:30;37447:222;:::o;37675:366::-;37817:3;37838:67;37902:2;37897:3;37838:67;:::i;:::-;37831:74;;37914:93;38003:3;37914:93;:::i;:::-;38032:2;38027:3;38023:12;38016:19;;37675:366;;;:::o;38047:419::-;38213:4;38251:2;38240:9;38236:18;38228:26;;38300:9;38294:4;38290:20;38286:1;38275:9;38271:17;38264:47;38328:131;38454:4;38328:131;:::i;:::-;38320:139;;38047:419;;;:::o;38472:228::-;38612:34;38608:1;38600:6;38596:14;38589:58;38681:11;38676:2;38668:6;38664:15;38657:36;38472:228;:::o;38706:366::-;38848:3;38869:67;38933:2;38928:3;38869:67;:::i;:::-;38862:74;;38945:93;39034:3;38945:93;:::i;:::-;39063:2;39058:3;39054:12;39047:19;;38706:366;;;:::o;39078:419::-;39244:4;39282:2;39271:9;39267:18;39259:26;;39331:9;39325:4;39321:20;39317:1;39306:9;39302:17;39295:47;39359:131;39485:4;39359:131;:::i;:::-;39351:139;;39078:419;;;:::o;39503:175::-;39643:27;39639:1;39631:6;39627:14;39620:51;39503:175;:::o;39684:366::-;39826:3;39847:67;39911:2;39906:3;39847:67;:::i;:::-;39840:74;;39923:93;40012:3;39923:93;:::i;:::-;40041:2;40036:3;40032:12;40025:19;;39684:366;;;:::o;40056:419::-;40222:4;40260:2;40249:9;40245:18;40237:26;;40309:9;40303:4;40299:20;40295:1;40284:9;40280:17;40273:47;40337:131;40463:4;40337:131;:::i;:::-;40329:139;;40056:419;;;:::o;40481:176::-;40621:28;40617:1;40609:6;40605:14;40598:52;40481:176;:::o;40663:366::-;40805:3;40826:67;40890:2;40885:3;40826:67;:::i;:::-;40819:74;;40902:93;40991:3;40902:93;:::i;:::-;41020:2;41015:3;41011:12;41004:19;;40663:366;;;:::o;41035:419::-;41201:4;41239:2;41228:9;41224:18;41216:26;;41288:9;41282:4;41278:20;41274:1;41263:9;41259:17;41252:47;41316:131;41442:4;41316:131;:::i;:::-;41308:139;;41035:419;;;:::o;41460:173::-;41600:25;41596:1;41588:6;41584:14;41577:49;41460:173;:::o;41639:366::-;41781:3;41802:67;41866:2;41861:3;41802:67;:::i;:::-;41795:74;;41878:93;41967:3;41878:93;:::i;:::-;41996:2;41991:3;41987:12;41980:19;;41639:366;;;:::o;42011:419::-;42177:4;42215:2;42204:9;42200:18;42192:26;;42264:9;42258:4;42254:20;42250:1;42239:9;42235:17;42228:47;42292:131;42418:4;42292:131;:::i;:::-;42284:139;;42011:419;;;:::o;42436:114::-;42503:6;42537:5;42531:12;42521:22;;42436:114;;;:::o;42556:184::-;42655:11;42689:6;42684:3;42677:19;42729:4;42724:3;42720:14;42705:29;;42556:184;;;;:::o;42746:132::-;42813:4;42836:3;42828:11;;42866:4;42861:3;42857:14;42849:22;;42746:132;;;:::o;42884:108::-;42961:24;42979:5;42961:24;:::i;:::-;42956:3;42949:37;42884:108;;:::o;42998:179::-;43067:10;43088:46;43130:3;43122:6;43088:46;:::i;:::-;43166:4;43161:3;43157:14;43143:28;;42998:179;;;;:::o;43183:113::-;43253:4;43285;43280:3;43276:14;43268:22;;43183:113;;;:::o;43332:732::-;43451:3;43480:54;43528:5;43480:54;:::i;:::-;43550:86;43629:6;43624:3;43550:86;:::i;:::-;43543:93;;43660:56;43710:5;43660:56;:::i;:::-;43739:7;43770:1;43755:284;43780:6;43777:1;43774:13;43755:284;;;43856:6;43850:13;43883:63;43942:3;43927:13;43883:63;:::i;:::-;43876:70;;43969:60;44022:6;43969:60;:::i;:::-;43959:70;;43815:224;43802:1;43799;43795:9;43790:14;;43755:284;;;43759:14;44055:3;44048:10;;43456:608;;;43332:732;;;;:::o;44070:831::-;44333:4;44371:3;44360:9;44356:19;44348:27;;44385:71;44453:1;44442:9;44438:17;44429:6;44385:71;:::i;:::-;44466:80;44542:2;44531:9;44527:18;44518:6;44466:80;:::i;:::-;44593:9;44587:4;44583:20;44578:2;44567:9;44563:18;44556:48;44621:108;44724:4;44715:6;44621:108;:::i;:::-;44613:116;;44739:72;44807:2;44796:9;44792:18;44783:6;44739:72;:::i;:::-;44821:73;44889:3;44878:9;44874:19;44865:6;44821:73;:::i;:::-;44070:831;;;;;;;;:::o;44907:185::-;44947:1;44964:20;44982:1;44964:20;:::i;:::-;44959:25;;44998:20;45016:1;44998:20;:::i;:::-;44993:25;;45037:1;45027:35;;45042:18;;:::i;:::-;45027:35;45084:1;45081;45077:9;45072:14;;44907:185;;;;:::o;45098:220::-;45238:34;45234:1;45226:6;45222:14;45215:58;45307:3;45302:2;45294:6;45290:15;45283:28;45098:220;:::o;45324:366::-;45466:3;45487:67;45551:2;45546:3;45487:67;:::i;:::-;45480:74;;45563:93;45652:3;45563:93;:::i;:::-;45681:2;45676:3;45672:12;45665:19;;45324:366;;;:::o;45696:419::-;45862:4;45900:2;45889:9;45885:18;45877:26;;45949:9;45943:4;45939:20;45935:1;45924:9;45920:17;45913:47;45977:131;46103:4;45977:131;:::i;:::-;45969:139;;45696:419;;;:::o;46121:177::-;46261:29;46257:1;46249:6;46245:14;46238:53;46121:177;:::o;46304:366::-;46446:3;46467:67;46531:2;46526:3;46467:67;:::i;:::-;46460:74;;46543:93;46632:3;46543:93;:::i;:::-;46661:2;46656:3;46652:12;46645:19;;46304:366;;;:::o;46676:419::-;46842:4;46880:2;46869:9;46865:18;46857:26;;46929:9;46923:4;46919:20;46915:1;46904:9;46900:17;46893:47;46957:131;47083:4;46957:131;:::i;:::-;46949:139;;46676:419;;;:::o

Swarm Source

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