ETH Price: $2,079.90 (-2.71%)

Contract

0xe16e64Da1338d8E56dFd8355Ba7642D0A79e253c
 

Overview

ETH Balance

0.06 ETH

Eth Value

$124.79 (@ $2,079.90/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake110475492020-10-13 13:24:401969 days ago1602595480IN
0xe16e64Da...0A79e253c
0 ETH0.0057090272.00000145
Sell110455742020-10-13 6:05:431969 days ago1602569143IN
0xe16e64Da...0A79e253c
0.12 ETH0.0017050258.00000145
Unstake110438852020-10-13 0:01:481970 days ago1602547308IN
0xe16e64Da...0A79e253c
0 ETH0.0042024753
Sell109883162020-10-04 8:30:211978 days ago1601800221IN
0xe16e64Da...0A79e253c
0.2 ETH0.0063038135
Stake109874042020-10-04 5:05:061978 days ago1601787906IN
0xe16e64Da...0A79e253c
15 ETH0.02397679126
Stake109873492020-10-04 4:53:521978 days ago1601787232IN
0xe16e64Da...0A79e253c
1 ETH0.0101925265
Unstake109833232020-10-03 13:50:081979 days ago1601733008IN
0xe16e64Da...0A79e253c
0 ETH0.02009962105
Stake109830002020-10-03 12:37:111979 days ago1601728631IN
0xe16e64Da...0A79e253c
5.56854983 ETH0.0134378161
Unstake109828942020-10-03 12:10:471979 days ago1601727047IN
0xe16e64Da...0A79e253c
0 ETH0.0092649748.40000135
Buy109816432020-10-03 7:34:321979 days ago1601710472IN
0xe16e64Da...0A79e253c
0 ETH0.0114993148
Buy109816382020-10-03 7:33:591979 days ago1601710439IN
0xe16e64Da...0A79e253c
0 ETH0.0026693451
Buy109816322020-10-03 7:33:111979 days ago1601710391IN
0xe16e64Da...0A79e253c
0 ETH0.0025123248
Sell109814132020-10-03 6:43:031979 days ago1601707383IN
0xe16e64Da...0A79e253c
0.3 ETH0.008104945
Buy109813752020-10-03 6:34:191979 days ago1601706859IN
0xe16e64Da...0A79e253c
0 ETH0.0098218341
Buy109813052020-10-03 6:21:111979 days ago1601706071IN
0xe16e64Da...0A79e253c
0 ETH0.0119772550
Sell109801632020-10-03 1:56:241980 days ago1601690184IN
0xe16e64Da...0A79e253c
0.3 ETH0.0145888281
Unstake109700162020-10-01 11:53:591981 days ago1601553239IN
0xe16e64Da...0A79e253c
0 ETH0.0109112257
Buy109688782020-10-01 7:40:151981 days ago1601538015IN
0xe16e64Da...0A79e253c
0 ETH0.0150939263.0045
Buy109688702020-10-01 7:38:311981 days ago1601537911IN
0xe16e64Da...0A79e253c
0 ETH0.0179667775
Stake109646152020-09-30 15:41:191982 days ago1601480479IN
0xe16e64Da...0A79e253c
0.37020239 ETH0.02951912134
Buy109592262020-09-29 19:29:141983 days ago1601407754IN
0xe16e64Da...0A79e253c
0 ETH0.014372760.00000134
Sell109553442020-09-29 4:48:551983 days ago1601354935IN
0xe16e64Da...0A79e253c
0.15 ETH0.0152552384.7000016
Buy109500522020-09-28 8:55:341984 days ago1601283334IN
0xe16e64Da...0A79e253c
0 ETH0.02936968122.6
Buy109493432020-09-28 6:16:151984 days ago1601273775IN
0xe16e64Da...0A79e253c
0 ETH0.0124569652
Sell109490402020-09-28 5:08:221984 days ago1601269702IN
0xe16e64Da...0A79e253c
0.2 ETH0.0169302494
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-109883162020-10-04 8:30:211978 days ago1601800221
0xe16e64Da...0A79e253c
0.2 ETH
-109874042020-10-04 5:05:061978 days ago1601787906
0xe16e64Da...0A79e253c
15 ETH
-109873492020-10-04 4:53:521978 days ago1601787232
0xe16e64Da...0A79e253c
1 ETH
-109830002020-10-03 12:37:111979 days ago1601728631
0xe16e64Da...0A79e253c
5.56854983 ETH
-109814132020-10-03 6:43:031979 days ago1601707383
0xe16e64Da...0A79e253c
0.3 ETH
-109801632020-10-03 1:56:241980 days ago1601690184
0xe16e64Da...0A79e253c
0.3 ETH
-109646152020-09-30 15:41:191982 days ago1601480479
0xe16e64Da...0A79e253c
0.37020239 ETH
-109553442020-09-29 4:48:551983 days ago1601354935
0xe16e64Da...0A79e253c
0.15 ETH
-109490402020-09-28 5:08:221984 days ago1601269702
0xe16e64Da...0A79e253c
0.2 ETH
-109429742020-09-27 6:18:051985 days ago1601187485
0xe16e64Da...0A79e253c
0.2 ETH
-109359152020-09-26 3:46:071987 days ago1601091967
0xe16e64Da...0A79e253c
0.2 ETH
-109349442020-09-26 0:14:511987 days ago1601079291
0xe16e64Da...0A79e253c
0.06 ETH
-109346442020-09-25 23:07:571987 days ago1601075277
0xe16e64Da...0A79e253c
0.03 ETH
-109298462020-09-25 5:07:141987 days ago1601010434
0xe16e64Da...0A79e253c
0.2 ETH
-109226662020-09-24 2:49:521989 days ago1600915792
0xe16e64Da...0A79e253c
0.2 ETH
-109169052020-09-23 5:25:131989 days ago1600838713
0xe16e64Da...0A79e253c
0.2 ETH
-109105132020-09-22 5:48:581990 days ago1600753738
0xe16e64Da...0A79e253c
0.2 ETH
-109041112020-09-21 6:28:511991 days ago1600669731
0xe16e64Da...0A79e253c
0.2 ETH
-109017892020-09-20 21:45:011992 days ago1600638301
0xe16e64Da...0A79e253c
2 ETH
-108988882020-09-20 11:19:571992 days ago1600600797
0xe16e64Da...0A79e253c
0.4 ETH
-108975192020-09-20 6:17:351992 days ago1600582655
0xe16e64Da...0A79e253c
0.2 ETH
-108956082020-09-19 23:19:211993 days ago1600557561
0xe16e64Da...0A79e253c
0.4 ETH
-108916362020-09-19 8:44:531993 days ago1600505093
0xe16e64Da...0A79e253c
0.25 ETH
-108894042020-09-19 0:32:021994 days ago1600475522
0xe16e64Da...0A79e253c
1.0307597 ETH
-108892772020-09-19 0:01:441994 days ago1600473704
0xe16e64Da...0A79e253c
1 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Router_Vether

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2020-08-31
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.8;
pragma experimental ABIEncoderV2;

interface iERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint);
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address, uint) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address, uint) external returns (bool);
    function transferFrom(address, address, uint) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}
interface iBASE {
    function secondsPerEra() external view returns (uint);
    // function DAO() external view returns (iDAO);
}
interface iUTILS {
    function calcPart(uint bp, uint total) external pure returns (uint part);
    function calcShare(uint part, uint total, uint amount) external pure returns (uint share);
    function calcSwapOutput(uint x, uint X, uint Y) external pure returns (uint output);
    function calcSwapFee(uint x, uint X, uint Y) external pure returns (uint output);
    function calcStakeUnits(uint a, uint A, uint v, uint S) external pure returns (uint units);
    // function calcAsymmetricShare(uint s, uint T, uint A) external pure returns (uint share);
    // function getPoolAge(address token) external view returns(uint age);
    function getPoolShare(address token, uint units) external view returns(uint baseAmt, uint tokenAmt);
    function getPoolShareAssym(address token, uint units, bool toBase) external view returns(uint baseAmt, uint tokenAmt, uint outputAmt);
    function calcValueInBase(address token, uint amount) external view returns (uint value);
    function calcValueInToken(address token, uint amount) external view returns (uint value);
    function calcValueInBaseWithPool(address payable pool, uint amount) external view returns (uint value);
}
interface iDAO {
    function ROUTER() external view returns(address);
    function UTILS() external view returns(iUTILS);
    function FUNDS_CAP() external view returns(uint);
}

// SafeMath
library SafeMath {

    function add(uint a, uint b) internal pure returns (uint)   {
        uint c = a + b;
        assert(c >= a);
        return c;
    }

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

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

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

contract Pool_Vether is iERC20 {
    using SafeMath for uint;

    address public BASE;
    address public TOKEN;
    iDAO public DAO;

    uint public one = 10**18;

    // ERC-20 Parameters
    string _name; string _symbol;
    uint public override decimals; uint public override totalSupply;
    // ERC-20 Mappings
    mapping(address => uint) private _balances;
    mapping(address => mapping(address => uint)) private _allowances;

    uint public genesis;
    uint public baseAmt;
    uint public tokenAmt;
    uint public baseAmtStaked;
    uint public tokenAmtStaked;
    uint public fees;
    uint public volume;
    uint public txCount;
    
    // Only Router can execute
    modifier onlyRouter() {
        _isRouter();
        _;
    }

    function _isRouter() internal view {
        require(msg.sender == _DAO().ROUTER(), "RouterErr");
    }

    function _DAO() internal view returns(iDAO) {
        return DAO;
    }

    constructor (address _base, address _token, iDAO _dao) public payable {

        BASE = _base;
        TOKEN = _token;
        DAO = _dao;

        string memory poolName = "VetherPoolV1-";
        string memory poolSymbol = "VPT1-";

        if(_token == address(0)){
            _name = string(abi.encodePacked(poolName, "Ethereum"));
            _symbol = string(abi.encodePacked(poolSymbol, "ETH"));
        } else {
            _name = string(abi.encodePacked(poolName, iERC20(_token).name()));
            _symbol = string(abi.encodePacked(poolSymbol, iERC20(_token).symbol()));
        }
        
        decimals = 18;
        genesis = now;
    }

    function _checkApprovals() external onlyRouter{
        if(iERC20(BASE).allowance(address(this), _DAO().ROUTER()) == 0){
            if(TOKEN != address(0)){
                iERC20(TOKEN).approve(_DAO().ROUTER(), (2**256)-1);
            }
        iERC20(BASE).approve(_DAO().ROUTER(), (2**256)-1);
        }
    }

    receive() external payable {}

    //========================================iERC20=========================================//
    function name() public view override returns (string memory) {
        return _name;
    }
    function symbol() public view override returns (string memory) {
        return _symbol;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    // iERC20 Transfer function
    function transfer(address to, uint value) public override returns (bool success) {
        __transfer(msg.sender, to, value);
        return true;
    }
    // iERC20 Approve function
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        __approve(msg.sender, spender, amount);
        return true;
    }
    function __approve(address owner, address spender, uint256 amount) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    // iERC20 TransferFrom function
    function transferFrom(address from, address to, uint value) public override returns (bool success) {
        require(value <= _allowances[from][msg.sender], 'AllowanceErr');
        _allowances[from][msg.sender] = _allowances[from][msg.sender].sub(value);
        __transfer(from, to, value);
        return true;
    }

    // Internal transfer function
    function __transfer(address _from, address _to, uint _value) private {
        require(_balances[_from] >= _value, 'BalanceErr');
        require(_balances[_to] + _value >= _balances[_to], 'BalanceErr');
        _balances[_from] =_balances[_from].sub(_value);
        _balances[_to] += _value;
        emit Transfer(_from, _to, _value);
    }

    // Router can mint
    function _mint(address account, uint256 amount) external onlyRouter {
        totalSupply = totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        _allowances[account][DAO.ROUTER()] += amount;
        emit Transfer(address(0), account, amount);
    }
    // Burn supply
    function burn(uint256 amount) public virtual {
        __burn(msg.sender, amount);
    }
    function burnFrom(address from, uint256 value) public virtual {
        require(value <= _allowances[from][msg.sender], 'AllowanceErr');
        _allowances[from][msg.sender] = _allowances[from][msg.sender].sub(value);
        __burn(from, value);
    }
    function __burn(address account, uint256 amount) internal virtual {
        _balances[account] = _balances[account].sub(amount, "BalanceErr");
        totalSupply = totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }


    //==================================================================================//
    // Extended Asset Functions

    // TransferTo function
    function transferTo(address recipient, uint256 amount) public returns (bool) {
        __transfer(tx.origin, recipient, amount);
        return true;
    }

    // ETH Transfer function
    function transferETH(address payable to, uint value) public payable onlyRouter returns (bool success) {
        to.call{value:value}(""); 
        return true;
    }

    function sync() public {
        if (TOKEN == address(0)) {
            tokenAmt = address(this).balance;
        } else {
            tokenAmt = iERC20(TOKEN).balanceOf(address(this));
        }
    }

    function add(address token, uint amount) public payable returns (bool success) {
        if(token == BASE){
            iERC20(BASE).transferFrom(msg.sender, address(this), amount);
            baseAmt = baseAmt.add(amount);
            return true;
        } else if (token == TOKEN){
            iERC20(TOKEN).transferFrom(msg.sender, address(this), amount);
            tokenAmt = tokenAmt.add(amount); 
            return true;
        } else if (token == address(0)){
            require((amount == msg.value), "InputErr");
            tokenAmt = tokenAmt.add(amount); 
        } else {
            return false;
        }
    } 

    //==================================================================================//
    // Data Model
    function _incrementPoolBalances(uint _baseAmt, uint _tokenAmt)  external onlyRouter  {
        baseAmt += _baseAmt;
        tokenAmt += _tokenAmt;
        baseAmtStaked += _baseAmt;
        tokenAmtStaked += _tokenAmt; 
    }
    function _setPoolBalances(uint _baseAmt, uint _tokenAmt, uint _baseAmtStaked, uint _tokenAmtStaked)  external onlyRouter  {
        baseAmtStaked = _baseAmtStaked;
        tokenAmtStaked = _tokenAmtStaked; 
        __setPool(_baseAmt, _tokenAmt);
    }
    function _setPoolAmounts(uint _baseAmt, uint _tokenAmt)  external onlyRouter  {
        __setPool(_baseAmt, _tokenAmt); 
    }
    function __setPool(uint _baseAmt, uint _tokenAmt) internal  {
        baseAmt = _baseAmt;
        tokenAmt = _tokenAmt; 
    }

    function _decrementPoolBalances(uint _baseAmt, uint _tokenAmt)  external onlyRouter  {
        uint _unstakedBase = _DAO().UTILS().calcShare(_baseAmt, baseAmt, baseAmtStaked);
        uint _unstakedToken = _DAO().UTILS().calcShare(_tokenAmt, tokenAmt, tokenAmtStaked);
        baseAmtStaked = baseAmtStaked.sub(_unstakedBase);
        tokenAmtStaked = tokenAmtStaked.sub(_unstakedToken); 
        __decrementPool(_baseAmt, _tokenAmt); 
    }
 
    function __decrementPool(uint _baseAmt, uint _tokenAmt) internal  {
        baseAmt = baseAmt.sub(_baseAmt);
        tokenAmt = tokenAmt.sub(_tokenAmt); 
    }

    function _addPoolMetrics(uint _volume, uint _fee) external onlyRouter  {
        txCount += 1;
        volume += _volume;
        fees += _fee;
    }

}

contract Router_Vether {

    using SafeMath for uint;

    address public BASE;
    address public DEPLOYER;
    iDAO public DAO;

    // uint256 public currentEra;
    // uint256 public nextEraTime;
    // uint256 public reserve;

    uint public totalStaked; 
    uint public totalVolume;
    uint public totalFees;
    uint public unstakeTx;
    uint public stakeTx;
    uint public swapTx;

    address[] public arrayTokens;
    mapping(address=>address payable) private mapToken_Pool;
    mapping(address=>bool) public isPool;

    event NewPool(address token, address pool, uint genesis);
    event Staked(address member, uint inputBase, uint inputToken, uint unitsIssued);
    event Unstaked(address member, uint outputBase, uint outputToken, uint unitsClaimed);
    event Swapped(address tokenFrom, address tokenTo, uint inputAmount, uint transferAmount, uint outputAmount, uint fee, address recipient);
    // event NewEra(uint256 currentEra, uint256 nextEraTime, uint256 reserve);

// Only Deployer can execute
    modifier onlyDeployer() {
        require(msg.sender == DEPLOYER, "DeployerErr");
        _;
    }

    constructor () public payable {
        BASE = 0x4Ba6dDd7b89ed838FEd25d208D4f644106E34279;
        DEPLOYER = msg.sender;
    }

    receive() external payable {
        buyTo(msg.value, address(0), msg.sender);
    }

    function setGenesisDao(address dao) public onlyDeployer {
        DAO = iDAO(dao);
    }

    function _DAO() internal view returns(iDAO) {
        return DAO;
    }

    function migrateRouterData(address payable oldRouter) public onlyDeployer {
        totalStaked = Router_Vether(oldRouter).totalStaked();
        totalVolume = Router_Vether(oldRouter).totalVolume();
        totalFees = Router_Vether(oldRouter).totalFees();
        unstakeTx = Router_Vether(oldRouter).unstakeTx();
        stakeTx = Router_Vether(oldRouter).stakeTx();
        swapTx = Router_Vether(oldRouter).swapTx();
    }

    function migrateTokenData(address payable oldRouter) public onlyDeployer {
        uint tokenCount = Router_Vether(oldRouter).tokenCount();
        for(uint i = 0; i<tokenCount; i++){
            address token = Router_Vether(oldRouter).getToken(i);
            address payable pool = Router_Vether(oldRouter).getPool(token);
            isPool[pool] = true;
            arrayTokens.push(token);
            mapToken_Pool[token] = pool;
        }
    }

    function purgeDeployer() public onlyDeployer {
        DEPLOYER = address(0);
    }

    function createPool(uint inputBase, uint inputToken, address token) public payable returns(address payable pool){
        require(getPool(token) == address(0), "CreateErr");
        require(token != BASE, "Must not be Base");
        require((inputToken > 0 && inputBase > 0), "Must get tokens for both");
        Pool_Vether newPool = new Pool_Vether(BASE, token, DAO);
        pool = payable(address(newPool));
        uint _actualInputToken = _handleTransferIn(token, inputToken, pool);
        uint _actualInputBase = _handleTransferIn(BASE, inputBase, pool);
        mapToken_Pool[token] = pool;
        arrayTokens.push(token);
        isPool[pool] = true;
        totalStaked += _actualInputBase;
        stakeTx += 1;
        uint units = _handleStake(pool, _actualInputBase, _actualInputToken, msg.sender);
        emit NewPool(token, pool, now);
        emit Staked(msg.sender, _actualInputBase, _actualInputToken, units);
        return pool;
    }

    //==================================================================================//
    // Staking functions

    function stake(uint inputBase, uint inputToken, address token) public payable returns (uint units) {
        units = stakeForMember(inputBase, inputToken, token, msg.sender);
        return units;
    }

    function stakeForMember(uint inputBase, uint inputToken, address token, address member) public payable returns (uint units) {
        address payable pool = getPool(token);
        uint _actualInputToken = _handleTransferIn(token, inputToken, pool);
        uint _actualInputBase = _handleTransferIn(BASE, inputBase, pool);
        totalStaked += _actualInputBase;
        stakeTx += 1;
        require(totalStaked <= DAO.FUNDS_CAP(), "Must be less than Funds Cap");
        units = _handleStake(pool, _actualInputBase, _actualInputToken, member);
        emit Staked(member, _actualInputBase, _actualInputToken, units);
        return units;
    }


    function _handleStake(address payable pool, uint _baseAmt, uint _tokenAmt, address _member) internal returns (uint _units) {
        Pool_Vether(pool)._checkApprovals();
        uint _S = Pool_Vether(pool).baseAmt().add(_baseAmt);
        uint _A = Pool_Vether(pool).tokenAmt().add(_tokenAmt);
        Pool_Vether(pool)._incrementPoolBalances(_baseAmt, _tokenAmt);                                                  
        _units = _DAO().UTILS().calcStakeUnits(_tokenAmt, _A, _baseAmt, _S);  
        Pool_Vether(pool)._mint(_member, _units);
        return _units;
    }

    //==================================================================================//
    // Unstaking functions

    // Unstake % for self
    function unstake(uint basisPoints, address token) public returns (bool success) {
        require((basisPoints > 0 && basisPoints <= 10000), "InputErr");
        uint _units = _DAO().UTILS().calcPart(basisPoints, iERC20(getPool(token)).balanceOf(msg.sender));
        unstakeExact(_units, token);
        return true;
    }

    // Unstake an exact qty of units
    function unstakeExact(uint units, address token) public returns (bool success) {
        address payable pool = getPool(token);
        address payable member = msg.sender;
        (uint _outputBase, uint _outputToken) = _DAO().UTILS().getPoolShare(token, units);
        totalStaked = totalStaked.sub(_outputBase);
        unstakeTx += 1;
        _handleUnstake(pool, units, _outputBase, _outputToken, member);
        emit Unstaked(member, _outputBase, _outputToken, units);
        _handleTransferOut(token, _outputToken, pool, member);
        _handleTransferOut(BASE, _outputBase, pool, member);
        return true;
    }

    // // Unstake % Asymmetrically
    function unstakeAsymmetric(uint basisPoints, bool toBase, address token) public returns (uint outputAmount){
        uint _units = _DAO().UTILS().calcPart(basisPoints, iERC20(getPool(token)).balanceOf(msg.sender));
        outputAmount = unstakeExactAsymmetric(_units, toBase, token);
        return outputAmount;
    }
    // Unstake Exact Asymmetrically
    function unstakeExactAsymmetric(uint units, bool toBase, address token) public returns (uint outputAmount){
        address payable pool = getPool(token);
        require(units < iERC20(pool).totalSupply(), "InputErr");
        (uint _outputBase, uint _outputToken, uint _outputAmount) = _DAO().UTILS().getPoolShareAssym(token, units, toBase);
        totalStaked = totalStaked.sub(_outputBase);
        unstakeTx += 1;
        _handleUnstake(pool, units, _outputBase, _outputToken, msg.sender);
        emit Unstaked(msg.sender, _outputBase, _outputToken, units);
        _handleTransferOut(token, _outputToken, pool, msg.sender);
        _handleTransferOut(BASE, _outputBase, pool, msg.sender);
        return _outputAmount;
    }

    function _handleUnstake(address payable pool, uint _units, uint _outputBase, uint _outputToken, address _member) internal returns (bool success) {
        Pool_Vether(pool)._checkApprovals();
        Pool_Vether(pool)._decrementPoolBalances(_outputBase, _outputToken);
        Pool_Vether(pool).burnFrom(_member, _units);
        return true;
    } 

    //==================================================================================//
    // Universal Swapping Functions

    function buy(uint amount, address token) public payable returns (uint outputAmount, uint fee){
        (outputAmount, fee) = buyTo(amount, token, msg.sender);
        return (outputAmount, fee);
    }
    function buyTo(uint amount, address token, address payable member) public payable returns (uint outputAmount, uint fee) {
        address payable pool = getPool(token);
        Pool_Vether(pool)._checkApprovals();
        uint _actualAmount = _handleTransferIn(BASE, amount, pool);
        // uint _minusFee = _getFee(_actualAmount);
        (outputAmount, fee) = _swapBaseToToken(pool, _actualAmount);
        // addDividend(pool, outputAmount, fee);
        totalStaked += _actualAmount;
        totalVolume += _actualAmount;
        totalFees += _DAO().UTILS().calcValueInBase(token, fee);
        swapTx += 1;
        _handleTransferOut(token, outputAmount, pool, member);
        emit Swapped(BASE, token, _actualAmount, 0, outputAmount, fee, member);
        return (outputAmount, fee);
    }

    // function _getFee(uint amount) private view returns(uint){
    //     return amount
    // }

    function sell(uint amount, address token) public payable returns (uint outputAmount, uint fee){
        (outputAmount, fee) = sellTo(amount, token, msg.sender);
        return (outputAmount, fee);
    }
    function sellTo(uint amount, address token, address payable member) public payable returns (uint outputAmount, uint fee) {
        address payable pool = getPool(token);
        Pool_Vether(pool)._checkApprovals();
        uint _actualAmount = _handleTransferIn(token, amount, pool);
        (outputAmount, fee) = _swapTokenToBase(pool, _actualAmount);
        // addDividend(pool, outputAmount, fee);
        totalStaked = totalStaked.sub(outputAmount);
        totalVolume += outputAmount;
        totalFees += fee;
        swapTx += 1;
        _handleTransferOut(BASE, outputAmount, pool, member);
        emit Swapped(token, BASE, _actualAmount, 0, outputAmount, fee, member);
        return (outputAmount, fee);
    }

    function swap(uint inputAmount, address fromToken, address toToken) public payable returns (uint outputAmount, uint fee) {
        require(fromToken != toToken, "InputErr");
        address payable poolFrom = getPool(fromToken); address payable poolTo = getPool(toToken);
        Pool_Vether(poolFrom)._checkApprovals();
        Pool_Vether(poolTo)._checkApprovals();
        uint _actualAmount = _handleTransferIn(fromToken, inputAmount, poolFrom);
        uint _transferAmount = 0;
        if(fromToken == BASE){
            (outputAmount, fee) = _swapBaseToToken(poolFrom, _actualAmount);      // Buy to token
            totalStaked += _actualAmount;
            totalVolume += _actualAmount;
            // addDividend(poolFrom, outputAmount, fee);
        } else if(toToken == BASE) {
            (outputAmount, fee) = _swapTokenToBase(poolFrom,_actualAmount);   // Sell to token
            totalStaked = totalStaked.sub(outputAmount);
            totalVolume += outputAmount;
            // addDividend(poolFrom, outputAmount, fee);
        } else {
            (uint _yy, uint _feey) = _swapTokenToBase(poolFrom, _actualAmount);             // Sell to BASE
            uint _actualYY = _handleTransferOver(BASE, poolFrom, poolTo, _yy);
            totalStaked = totalStaked.add(_actualYY).sub(_actualAmount);
            totalVolume += _yy; totalFees += _feey;
            // addDividend(poolFrom, _yy, _feey);
            (uint _zz, uint _feez) = _swapBaseToToken(poolTo, _actualYY);              // Buy to token
            totalFees += _DAO().UTILS().calcValueInBase(toToken, _feez);
            // addDividend(poolTo, _zz, _feez);
            _transferAmount = _actualYY; outputAmount = _zz; 
            fee = _feez + _DAO().UTILS().calcValueInToken(toToken, _feey);
        }
        swapTx += 1;
        _handleTransferOut(toToken, outputAmount, poolTo, msg.sender);
        emit Swapped(fromToken, toToken, _actualAmount, _transferAmount, outputAmount, fee, msg.sender);
        return (outputAmount, fee);
    }

    function _swapBaseToToken(address payable pool, uint _x) internal returns (uint _y, uint _fee){
        uint _X = Pool_Vether(pool).baseAmt();
        uint _Y = Pool_Vether(pool).tokenAmt();
        _y =  _DAO().UTILS().calcSwapOutput(_x, _X, _Y);
        _fee = _DAO().UTILS().calcSwapFee(_x, _X, _Y);
        Pool_Vether(pool)._setPoolAmounts(_X.add(_x), _Y.sub(_y));
        _updatePoolMetrics(pool, _y+_fee, _fee, false);
        // _checkEmission();
        return (_y, _fee);
    }

    function _swapTokenToBase(address payable pool, uint _x) internal returns (uint _y, uint _fee){
        uint _X = Pool_Vether(pool).tokenAmt();
        uint _Y = Pool_Vether(pool).baseAmt();
        _y =  _DAO().UTILS().calcSwapOutput(_x, _X, _Y);
        _fee = _DAO().UTILS().calcSwapFee(_x, _X, _Y);
        Pool_Vether(pool)._setPoolAmounts(_Y.sub(_y), _X.add(_x));
        _updatePoolMetrics(pool, _y+_fee, _fee, true);
        // _checkEmission();
        return (_y, _fee);
    }

    function _updatePoolMetrics(address payable pool, uint _txSize, uint _fee, bool _toBase) internal {
        if(_toBase){
            Pool_Vether(pool)._addPoolMetrics(_txSize, _fee);
        } else {
            uint _txBase = _DAO().UTILS().calcValueInBaseWithPool(pool, _txSize);
            uint _feeBase = _DAO().UTILS().calcValueInBaseWithPool(pool, _fee);
            Pool_Vether(pool)._addPoolMetrics(_txBase, _feeBase);
        }
    }


    //==================================================================================//
    // Revenue Functions

    // Every swap, calculate fee, add to reserve
    // Every era, send reserve to DAO

    // function _checkEmission() private {
    //     if (now >= nextEraTime) {                                                           // If new Era and allowed to emit
    //         currentEra += 1;                                                               // Increment Era
    //         nextEraTime = now + iBASE(BASE).secondsPerEra() + 100;                     // Set next Era time
    //         uint reserve = iERC20(BASE).balanceOf(address(this));
    //         iERC20(BASE).transfer(address(_DAO()), reserve);
    //         emit NewEra(currentEra, nextEraTime, reserve);                               // Emit Event
    //     }
    // }

    //==================================================================================//
    // Token Transfer Functions

    function _handleTransferIn(address _token, uint _amount, address _pool) internal returns(uint actual){
        if(_amount > 0) {
            if(_token == address(0)){
                require((_amount == msg.value), "InputErr");
                payable(_pool).call{value:_amount}(""); 
                actual = _amount;
            } else {
                uint startBal = iERC20(_token).balanceOf(_pool); 
                iERC20(_token).transferFrom(msg.sender, _pool, _amount); 
                actual = iERC20(_token).balanceOf(_pool).sub(startBal);
            }
        }
    }

    function _handleTransferOut(address _token, uint _amount, address _pool, address payable _recipient) internal {
        if(_amount > 0) {
            if (_token == address(0)) {
                Pool_Vether(payable(_pool)).transferETH(_recipient, _amount);
            } else {
                iERC20(_token).transferFrom(_pool, _recipient, _amount);
            }
        }
    }

    function _handleTransferOver(address _token, address _from, address _to, uint _amount) internal returns(uint actual){
        if(_amount > 0) {
            uint startBal = iERC20(_token).balanceOf(_to); 
            iERC20(_token).transferFrom(_from, _to, _amount); 
            actual = iERC20(_token).balanceOf(_to).sub(startBal);
        }
    }

    //======================================HELPERS========================================//
    // Helper Functions

    function getPool(address token) public view returns(address payable pool){
        return mapToken_Pool[token];
    }

    function tokenCount() public view returns(uint){
        return arrayTokens.length;
    }

    function getToken(uint i) public view returns(address){
        return arrayTokens[i];
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"genesis","type":"uint256"}],"name":"NewPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"inputToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unitsIssued","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenFrom","type":"address"},{"indexed":false,"internalType":"address","name":"tokenTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"inputAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"outputBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outputToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unitsClaimed","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAO","outputs":[{"internalType":"contract iDAO","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPLOYER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"arrayTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"buy","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"member","type":"address"}],"name":"buyTo","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputBase","type":"uint256"},{"internalType":"uint256","name":"inputToken","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"createPool","outputs":[{"internalType":"address payable","name":"pool","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPool","outputs":[{"internalType":"address payable","name":"pool","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"oldRouter","type":"address"}],"name":"migrateRouterData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"oldRouter","type":"address"}],"name":"migrateTokenData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"purgeDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"sell","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"member","type":"address"}],"name":"sellTo","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"dao","type":"address"}],"name":"setGenesisDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputBase","type":"uint256"},{"internalType":"uint256","name":"inputToken","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"stake","outputs":[{"internalType":"uint256","name":"units","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputBase","type":"uint256"},{"internalType":"uint256","name":"inputToken","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"member","type":"address"}],"name":"stakeForMember","outputs":[{"internalType":"uint256","name":"units","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakeTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"}],"name":"swap","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"basisPoints","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"unstake","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"basisPoints","type":"uint256"},{"internalType":"bool","name":"toBase","type":"bool"},{"internalType":"address","name":"token","type":"address"}],"name":"unstakeAsymmetric","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"units","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"unstakeExact","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"units","type":"uint256"},{"internalType":"bool","name":"toBase","type":"bool"},{"internalType":"address","name":"token","type":"address"}],"name":"unstakeExactAsymmetric","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600080546001600160a01b0319908116734ba6ddd7b89ed838fed25d208d4f644106e34279179091556001805490911633179055615786806100476000396000f3fe608060405260043610620001ff5760003560e01c8063817b1cd2116200010f578063c1b8411a11620000a3578063ec342ad0116200006d578063ec342ad0146200054f578063ecf3ef921462000567578063f1900dc5146200057e578063fbfc702514620005965762000217565b8063c1b8411a14620004d5578063c9650a3314620004ed578063d04975501462000512578063e4b50cb8146200052a5762000217565b80639e3d67c911620000e55780639e3d67c9146200045b5780639f181b5e1462000473578063b3858487146200048b578063bbe4f6db14620004b05762000217565b8063817b1cd214620004065780638381e182146200041e57806398fabd3a14620004435762000217565b80635b16ebb711620001935780637628a37d116200015d5780637628a37d146200039c5780637d5ae5a814620003b35780637deb602514620003d85780637fd8b9a214620003ef5762000217565b80635b16ebb714620003235780635e24f76d14620003485780635f81a57c146200036d57806369ab0a8e14620003855762000217565b80631798546111620001d557806317985461146200027d5780632b7f092314620002b157806334e0190114620002d85780634189a68e146200030c5762000217565b806303a82138146200021c5780630dd3ba7a146200023657806313114a9d14620002655762000217565b3662000217576200021334600033620005bb565b5050005b600080fd5b3480156200022957600080fd5b5062000234620007dc565b005b6200024d620002473660046200350a565b62000824565b6040516200025c9190620037e6565b60405180910390f35b3480156200027257600080fd5b506200024d62000975565b3480156200028a57600080fd5b50620002a26200029c366004620033ce565b6200097b565b6040516200025c919062003589565b620002c8620002c236600462003432565b620009a3565b6040516200025c929190620037ef565b348015620002e557600080fd5b50620002fd620002f736600462003400565b62000e4a565b6040516200025c919062003683565b620002c86200031d36600462003400565b62001008565b3480156200033057600080fd5b50620002fd6200034236600462003371565b62001023565b3480156200035557600080fd5b506200024d620003673660046200348d565b62001038565b3480156200037a57600080fd5b506200024d620011e1565b620002c86200039636600462003478565b620011e7565b6200024d620003ad366004620034da565b62001305565b348015620003c057600080fd5b5062000234620003d236600462003371565b62001315565b620002c8620003e936600462003400565b6200155f565b620002a262000400366004620034da565b6200156f565b3480156200041357600080fd5b506200024d620017b4565b3480156200042b57600080fd5b50620002fd6200043d36600462003400565b620017ba565b3480156200045057600080fd5b50620002a262001994565b3480156200046857600080fd5b506200024d620019a3565b3480156200048057600080fd5b506200024d620019a9565b3480156200049857600080fd5b5062000234620004aa36600462003371565b620019af565b348015620004bd57600080fd5b50620002a2620004cf36600462003371565b62001cbe565b348015620004e257600080fd5b50620002a262001cdc565b348015620004fa57600080fd5b50620002346200050c36600462003371565b62001ceb565b3480156200051f57600080fd5b506200024d62001d3a565b3480156200053757600080fd5b50620002a262000549366004620033ce565b62001d40565b3480156200055c57600080fd5b50620002a262001d6b565b620002c86200057836600462003478565b620005bb565b3480156200058b57600080fd5b506200024d62001d7a565b348015620005a357600080fd5b506200024d620005b53660046200348d565b62001d80565b6000806000620005cb8562001cbe565b9050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200060957600080fd5b505af11580156200061e573d6000803e3d6000fd5b5050600080549092506200063e91506001600160a01b0316888462001fd9565b90506200064c828262002214565b6003805484019055600480548401905590945092506200066b620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015620006a457600080fd5b505afa158015620006b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006df919062003390565b6001600160a01b031663db39dc7987856040518363ffffffff1660e01b81526004016200070e929190620035c1565b60206040518083038186803b1580156200072757600080fd5b505afa1580156200073c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007629190620033e7565b6005805490910190556008805460010190556200078286858488620025c2565b600080546040517f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b92620007ca926001600160a01b0316918a9186918a908a908d9062003623565b60405180910390a15050935093915050565b6001546001600160a01b03163314620008125760405162461bcd60e51b81526004016200080990620037c1565b60405180910390fd5b600180546001600160a01b0319169055565b600080620008328462001cbe565b905060006200084385878462001fd9565b600080549192509062000861906001600160a01b0316898562001fd9565b60038054820190556007805460010190556002546040805163db2a444360e01b815290519293506001600160a01b039091169163db2a444391600480820192602092909190829003018186803b158015620008bb57600080fd5b505afa158015620008d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f69190620033e7565b60035411156200091a5760405162461bcd60e51b815260040162000809906200378a565b6200092883828488620026f5565b93507fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed85828487604051620009619493929190620035da565b60405180910390a15050505b949350505050565b60055481565b600981815481106200098957fe5b6000918252602090912001546001600160a01b0316905081565b600080826001600160a01b0316846001600160a01b03161415620009db5760405162461bcd60e51b8152600401620008099062003768565b6000620009e88562001cbe565b90506000620009f78562001cbe565b9050816001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000a3557600080fd5b505af115801562000a4a573d6000803e3d6000fd5b50505050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000a8a57600080fd5b505af115801562000a9f573d6000803e3d6000fd5b50505050600062000ab287898562001fd9565b60008054919250906001600160a01b038981169116141562000af55762000ada848362002214565b60038054850190556004805485019055909650945062000de2565b6000546001600160a01b038881169116141562000b435762000b188483620029f5565b600354919750955062000b32908763ffffffff62002d8b16565b600355600480548701905562000de2565b60008062000b528685620029f5565b600080549294509092509062000b74906001600160a01b031688888662002dba565b905062000b9f8562000b928360035462002f1190919063ffffffff16565b9063ffffffff62002d8b16565b6003556004805484019055600580548301905560008062000bc1888462002214565b9150915062000bcf620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0857600080fd5b505afa15801562000c1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c43919062003390565b6001600160a01b031663db39dc798d836040518363ffffffff1660e01b815260040162000c72929190620035c1565b60206040518083038186803b15801562000c8b57600080fd5b505afa15801562000ca0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc69190620033e7565b6005805490910190559099509093508390899062000ce3620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d1c57600080fd5b505afa15801562000d31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d57919062003390565b6001600160a01b031663c0c4a7248d866040518363ffffffff1660e01b815260040162000d86929190620035c1565b60206040518083038186803b15801562000d9f57600080fd5b505afa15801562000db4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dda9190620033e7565b019850505050505b60088054600101905562000df987878533620025c2565b7f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b888884848a8a3360405162000e36979695949392919062003623565b60405180910390a150505050935093915050565b60008062000e588362001cbe565b90503360008062000e68620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ea157600080fd5b505afa15801562000eb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000edc919062003390565b6001600160a01b031663bd9caa5887896040518363ffffffff1660e01b815260040162000f0b929190620035c1565b604080518083038186803b15801562000f2357600080fd5b505afa15801562000f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f5e9190620034b6565b600354919350915062000f78908363ffffffff62002d8b16565b60035560068054600101905562000f93848884848762002f21565b507f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008383838a60405162000fcb9493929190620035da565b60405180910390a162000fe186828686620025c2565b60005462000ffb906001600160a01b0316838686620025c2565b5060019695505050505050565b60008062001018848433620011e7565b909590945092505050565b600b6020526000908152604090205460ff1681565b60008062001045620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200107e57600080fd5b505afa15801562001093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b9919062003390565b6001600160a01b031663714270ab86620010d38662001cbe565b6001600160a01b03166370a08231336040518263ffffffff1660e01b815260040162001100919062003589565b60206040518083038186803b1580156200111957600080fd5b505afa1580156200112e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011549190620033e7565b6040518363ffffffff1660e01b815260040162001173929190620037ef565b60206040518083038186803b1580156200118c57600080fd5b505afa158015620011a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c79190620033e7565b9050620011d681858562001d80565b9150505b9392505050565b60045481565b6000806000620011f78562001cbe565b9050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200123557600080fd5b505af11580156200124a573d6000803e3d6000fd5b5050505060006200125d86888462001fd9565b90506200126b8282620029f5565b600354919550935062001285908563ffffffff62002d8b16565b60035560048054850190556005805484019055600880546001019055600054620012bb906001600160a01b0316858488620025c2565b600080546040517f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b92620007ca928a926001600160a01b039091169186918a908a908d9062003623565b60006200096d8484843362000824565b6001546001600160a01b03163314620013425760405162461bcd60e51b81526004016200080990620037c1565b6000816001600160a01b0316639f181b5e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200137e57600080fd5b505afa15801562001393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b99190620033e7565b905060005b818110156200155a57604051631c96a19760e31b81526000906001600160a01b0385169063e4b50cb890620013f8908590600401620037e6565b60206040518083038186803b1580156200141157600080fd5b505afa15801562001426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200144c919062003390565b90506000846001600160a01b031663bbe4f6db836040518263ffffffff1660e01b81526004016200147e919062003589565b60206040518083038186803b1580156200149757600080fd5b505afa158015620014ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d2919062003390565b6001600160a01b039081166000818152600b60209081526040808320805460ff19166001908117909155600980548083019091557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054989096166001600160a01b03199889168117909655948352600a90915290208054909416179092555001620013be565b505050565b60008062001018848433620005bb565b6000806200157d8362001cbe565b6001600160a01b031614620015a65760405162461bcd60e51b815260040162000809906200370e565b6000546001600160a01b0383811691161415620015d75760405162461bcd60e51b81526004016200080990620036e4565b600083118015620015e85750600084115b620016075760405162461bcd60e51b8152600401620008099062003731565b600080546002546040516001600160a01b0392831692869216906200162c9062003363565b6200163a9392919062003600565b604051809103906000f08015801562001657573d6000803e3d6000fd5b50905080915060006200166c84868562001fd9565b60008054919250906200168a906001600160a01b0316888662001fd9565b6001600160a01b038087166000818152600a602090815260408083208054958b166001600160a01b031996871681179091556009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054909716909517909555938252600b9052918220805460ff19168217905560038054840190556007805490910190559091506200172b85838533620026f5565b90507f3e576c516aed7bfaa059edc1ec8f0628a6b75a37c777be146867372226f0bfdd86864260405162001762939291906200359d565b60405180910390a17fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed33838584604051620017a19493929190620035da565b60405180910390a1505050509392505050565b60035481565b60008083118015620017ce57506127108311155b620017ed5760405162461bcd60e51b8152600401620008099062003768565b6000620017f9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200183257600080fd5b505afa15801562001847573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200186d919062003390565b6001600160a01b031663714270ab85620018878662001cbe565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401620018b4919062003589565b60206040518083038186803b158015620018cd57600080fd5b505afa158015620018e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019089190620033e7565b6040518363ffffffff1660e01b815260040162001927929190620037ef565b60206040518083038186803b1580156200194057600080fd5b505afa15801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b9190620033e7565b905062001989818462000e4a565b506001949350505050565b6002546001600160a01b031681565b60075481565b60095490565b6001546001600160a01b03163314620019dc5760405162461bcd60e51b81526004016200080990620037c1565b806001600160a01b031663817b1cd26040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a1657600080fd5b505afa15801562001a2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a519190620033e7565b600381905550806001600160a01b0316635f81a57c6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a9157600080fd5b505afa15801562001aa6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001acc9190620033e7565b600481905550806001600160a01b03166313114a9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b0c57600080fd5b505afa15801562001b21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b479190620033e7565b600581905550806001600160a01b031663f1900dc56040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b8757600080fd5b505afa15801562001b9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bc29190620033e7565b600681905550806001600160a01b0316639e3d67c96040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c0257600080fd5b505afa15801562001c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c3d9190620033e7565b600781905550806001600160a01b031663d04975506040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c7d57600080fd5b505afa15801562001c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cb89190620033e7565b60085550565b6001600160a01b039081166000908152600a60205260409020541690565b6001546001600160a01b031681565b6001546001600160a01b0316331462001d185760405162461bcd60e51b81526004016200080990620037c1565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60085481565b60006009828154811062001d5057fe5b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b031681565b60065481565b60008062001d8e8362001cbe565b9050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001dca57600080fd5b505afa15801562001ddf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e059190620033e7565b851062001e265760405162461bcd60e51b8152600401620008099062003768565b600080600062001e35620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562001e6e57600080fd5b505afa15801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062003390565b6001600160a01b0316630e174391878a8a6040518463ffffffff1660e01b815260040162001eda9392919062003660565b60606040518083038186803b15801562001ef357600080fd5b505afa15801562001f08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2e919062003558565b92509250925062001f4b8360035462002d8b90919063ffffffff16565b60035560068054600101905562001f66848985853362002f21565b507f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de003384848b60405162001f9e9493929190620035da565b60405180910390a162001fb486838633620025c2565b60005462001fce906001600160a01b0316848633620025c2565b979650505050505050565b60008215620011da576001600160a01b0384166200207c57348314620020135760405162461bcd60e51b8152600401620008099062003768565b816001600160a01b0316836040516200202c9062003586565b60006040518083038185875af1925050503d80600081146200206b576040519150601f19603f3d011682016040523d82523d6000602084013e62002070565b606091505b505050829050620011da565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190620020ad90869060040162003589565b60206040518083038186803b158015620020c657600080fd5b505afa158015620020db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021019190620033e7565b6040516323b872dd60e01b81529091506001600160a01b038616906323b872dd9062002136903390879089906004016200359d565b602060405180830381600087803b1580156200215157600080fd5b505af115801562002166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200218c9190620033af565b50620011d681866001600160a01b03166370a08231866040518263ffffffff1660e01b8152600401620021c0919062003589565b60206040518083038186803b158015620021d957600080fd5b505afa158015620021ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b929190620033e7565b6000806000846001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b1580156200225357600080fd5b505afa15801562002268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200228e9190620033e7565b90506000856001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b158015620022cc57600080fd5b505afa158015620022e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023079190620033e7565b905062002313620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200234c57600080fd5b505afa15801562002361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002387919062003390565b6001600160a01b031663701baaf38684846040518463ffffffff1660e01b8152600401620023b893929190620037fd565b60206040518083038186803b158015620023d157600080fd5b505afa158015620023e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200240c9190620033e7565b935062002418620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200245157600080fd5b505afa15801562002466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200248c919062003390565b6001600160a01b031663896a708c8684846040518463ffffffff1660e01b8152600401620024bd93929190620037fd565b60206040518083038186803b158015620024d657600080fd5b505afa158015620024eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025119190620033e7565b92506001600160a01b03861663b5ae659262002534848863ffffffff62002f1116565b62002546848863ffffffff62002d8b16565b6040518363ffffffff1660e01b815260040162002565929190620037ef565b600060405180830381600087803b1580156200258057600080fd5b505af115801562002595573d6000803e3d6000fd5b50505050620025aa868486018560006200304c565b50509250929050565b6002546001600160a01b031690565b8215620026ef576001600160a01b0384166200266557604051637b1a490960e01b81526001600160a01b03831690637b1a490990620026089084908790600401620035c1565b602060405180830381600087803b1580156200262357600080fd5b505af115801562002638573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200265e9190620033af565b50620026ef565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9062002697908590859088906004016200359d565b602060405180830381600087803b158015620026b257600080fd5b505af1158015620026c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026ed9190620033af565b505b50505050565b6000846001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200273357600080fd5b505af115801562002748573d6000803e3d6000fd5b505050506000620027d585876001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b1580156200278d57600080fd5b505afa158015620027a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027c89190620033e7565b9063ffffffff62002f1116565b905060006200281885886001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b1580156200278d57600080fd5b604051635b7d117560e01b81529091506001600160a01b03881690635b7d1175906200284b9089908990600401620037ef565b600060405180830381600087803b1580156200286657600080fd5b505af11580156200287b573d6000803e3d6000fd5b5050505062002889620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015620028c257600080fd5b505afa158015620028d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028fd919062003390565b6001600160a01b031663d087874a868389866040518563ffffffff1660e01b815260040162002930949392919062003813565b60206040518083038186803b1580156200294957600080fd5b505afa1580156200295e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029849190620033e7565b604051634e6ec24760e01b81529093506001600160a01b03881690634e6ec24790620029b79087908790600401620035c1565b600060405180830381600087803b158015620029d257600080fd5b505af1158015620029e7573d6000803e3d6000fd5b505050505050949350505050565b6000806000846001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b15801562002a3457600080fd5b505afa15801562002a49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a6f9190620033e7565b90506000856001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b15801562002aad57600080fd5b505afa15801562002ac2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae89190620033e7565b905062002af4620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562002b2d57600080fd5b505afa15801562002b42573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b68919062003390565b6001600160a01b031663701baaf38684846040518463ffffffff1660e01b815260040162002b9993929190620037fd565b60206040518083038186803b15801562002bb257600080fd5b505afa15801562002bc7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bed9190620033e7565b935062002bf9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c3257600080fd5b505afa15801562002c47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c6d919062003390565b6001600160a01b031663896a708c8684846040518463ffffffff1660e01b815260040162002c9e93929190620037fd565b60206040518083038186803b15801562002cb757600080fd5b505afa15801562002ccc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cf29190620033e7565b92506001600160a01b03861663b5ae659262002d15838763ffffffff62002d8b16565b62002d27858963ffffffff62002f1116565b6040518363ffffffff1660e01b815260040162002d46929190620037ef565b600060405180830381600087803b15801562002d6157600080fd5b505af115801562002d76573d6000803e3d6000fd5b50505050620025aa868486018560016200304c565b6000620011da8383604051806040016040528060088152602001670a6c2ccca9ac2e8d60c31b81525062003334565b600081156200096d576040516370a0823160e01b81526000906001600160a01b038716906370a082319062002df490879060040162003589565b60206040518083038186803b15801562002e0d57600080fd5b505afa15801562002e22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e489190620033e7565b6040516323b872dd60e01b81529091506001600160a01b038716906323b872dd9062002e7d908890889088906004016200359d565b602060405180830381600087803b15801562002e9857600080fd5b505af115801562002ead573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ed39190620033af565b5062002f0781876001600160a01b03166370a08231876040518263ffffffff1660e01b8152600401620021c0919062003589565b9695505050505050565b600082820183811015620011da57fe5b6000856001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002f5f57600080fd5b505af115801562002f74573d6000803e3d6000fd5b5050604051638d3ef44f60e01b81526001600160a01b0389169250638d3ef44f915062002fa89087908790600401620037ef565b600060405180830381600087803b15801562002fc357600080fd5b505af115801562002fd8573d6000803e3d6000fd5b505060405163079cc67960e41b81526001600160a01b03891692506379cc679091506200300c9085908990600401620035c1565b600060405180830381600087803b1580156200302757600080fd5b505af11580156200303c573d6000803e3d6000fd5b5060019998505050505050505050565b8015620030bd576040516347c369d360e11b81526001600160a01b03851690638f86d3a690620030839086908690600401620037ef565b600060405180830381600087803b1580156200309e57600080fd5b505af1158015620030b3573d6000803e3d6000fd5b50505050620026ef565b6000620030c9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200310257600080fd5b505afa15801562003117573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200313d919062003390565b6001600160a01b03166372af922886866040518363ffffffff1660e01b81526004016200316c929190620035c1565b60206040518083038186803b1580156200318557600080fd5b505afa1580156200319a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031c09190620033e7565b90506000620031ce620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200320757600080fd5b505afa1580156200321c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003242919062003390565b6001600160a01b03166372af922887866040518363ffffffff1660e01b815260040162003271929190620035c1565b60206040518083038186803b1580156200328a57600080fd5b505afa1580156200329f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032c59190620033e7565b6040516347c369d360e11b81529091506001600160a01b03871690638f86d3a690620032f89085908590600401620037ef565b600060405180830381600087803b1580156200331357600080fd5b505af115801562003328573d6000803e3d6000fd5b50505050505050505050565b600081848411156200335b5760405162461bcd60e51b81526004016200080991906200368e565b505050900390565b611efa806200385783390190565b60006020828403121562003383578081fd5b8135620011da816200382e565b600060208284031215620033a2578081fd5b8151620011da816200382e565b600060208284031215620033c1578081fd5b8151620011da8162003847565b600060208284031215620033e0578081fd5b5035919050565b600060208284031215620033f9578081fd5b5051919050565b6000806040838503121562003413578081fd5b82359150602083013562003427816200382e565b809150509250929050565b60008060006060848603121562003447578081fd5b8335925060208401356200345b816200382e565b915060408401356200346d816200382e565b809150509250925092565b60008060006060848603121562003447578283fd5b600080600060608486031215620034a2578283fd5b8335925060208401356200345b8162003847565b60008060408385031215620034c9578182fd5b505080516020909101519092909150565b600080600060608486031215620034ef578283fd5b833592506020840135915060408401356200346d816200382e565b6000806000806080858703121562003520578182fd5b843593506020850135925060408501356200353b816200382e565b915060608501356200354d816200382e565b939692955090935050565b6000806000606084860312156200356d578081fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039788168152958716602087015260408601949094526060850192909252608084015260a083015290911660c082015260e00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b901515815260200190565b6000602080835283518082850152825b81811015620036bc578581018301518582016040015282016200369e565b81811115620036ce5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f4d757374206e6f74206265204261736560801b604082015260600190565b60208082526009908201526821b932b0ba32a2b93960b91b604082015260600190565b60208082526018908201527f4d7573742067657420746f6b656e7320666f7220626f74680000000000000000604082015260600190565b60208082526008908201526724b7383aba22b93960c11b604082015260600190565b6020808252601b908201527f4d757374206265206c657373207468616e2046756e6473204361700000000000604082015260600190565b6020808252600b908201526a2232b83637bcb2b922b93960a91b604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03811681146200384457600080fd5b50565b80151581146200384457600080fdfe6080604052670de0b6b3a764000060035560405162001efa38038062001efa833981016040819052620000329162000353565b600080546001600160a01b038086166001600160a01b0319928316179092556001805485841690831681179091556002805493851693909216929092179055604080518082018252600d81526c566574686572506f6f6c56312d60981b60208083019190915282518084019093526005835264565054312d60d81b9083015291620001315781604051602001620000ca91906200047a565b60405160208183030381529060405260049080519060200190620000f0929190620002ae565b5080604051602001620001049190620004a8565b604051602081830303815290604052600590805190602001906200012a929190620002ae565b506200029a565b81846001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200016c57600080fd5b505afa15801562000181573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001ab9190810190620003a6565b604051602001620001be92919062000448565b60405160208183030381529060405260049080519060200190620001e4929190620002ae565b5080846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200025f9190810190620003a6565b6040516020016200027292919062000448565b6040516020818303038152906040526005908051906020019062000298929190620002ae565b505b50506012600655505042600a55506200051d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002f157805160ff191683800117855562000321565b8280016001018555821562000321579182015b828111156200032157825182559160200191906001019062000304565b506200032f92915062000333565b5090565b6200035091905b808211156200032f57600081556001016200033a565b90565b60008060006060848603121562000368578283fd5b8351620003758162000504565b6020850151909350620003888162000504565b60408501519092506200039b8162000504565b809150509250925092565b600060208284031215620003b8578081fd5b81516001600160401b0380821115620003cf578283fd5b81840185601f820112620003e1578384fd5b8051925081831115620003f2578384fd5b604051601f8401601f19168101602001838111828210171562000413578586fd5b6040528381528184016020018710156200042b578485fd5b6200043e846020830160208501620004d1565b9695505050505050565b600083516200045c818460208801620004d1565b835190830162000471828260208801620004d1565b01949350505050565b600082516200048e818460208701620004d1565b67457468657265756d60c01b920191825250600801919050565b60008251620004bc818460208701620004d1565b6208aa8960eb1b920191825250600301919050565b60005b83811015620004ee578181015183820152602001620004d4565b83811115620004fe576000848401525b50505050565b6001600160a01b03811681146200051a57600080fd5b50565b6119cd806200052d6000396000f3fe6080604052600436106101fd5760003560e01c80638f86d3a61161010d578063c2c08068116100a0578063dc883ca41161006f578063dc883ca414610536578063dd62ed3e1461054b578063ec342ad01461056b578063f5d82b6b14610580578063fff6cae91461059357610204565b8063c2c08068146104e2578063c35d6e28146104f7578063c618a1e41461050c578063d77daa661461052157610204565b80639af1d35a116100dc5780639af1d35a14610478578063a7f0b3de1461048d578063a9059cbb146104a2578063b5ae6592146104c257610204565b80638f86d3a614610419578063901717d11461043957806395d89b411461044e57806398fabd3a1461046357610204565b80633c5406871161019057806370a082311161015f57806370a082311461038457806379cc6790146103a45780637b1a4909146103c457806382bfefc8146103d75780638d3ef44f146103f957610204565b80633c5406871461030f57806342966c68146103245780634e6ec247146103445780635b7d11751461036457610204565b806323b872dd116101cc57806323b872dd146102a55780632ccb1b30146102c55780632f477586146102e5578063313ce567146102fa57610204565b806306fdde0314610209578063095ea7b3146102345780630a27fdb51461026157806318160ddd1461028357610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6105a8565b60405161022b9190611881565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611754565b61063e565b60405161022b9190611876565b34801561026d57600080fd5b5061028161027c3660046117d7565b610655565b005b34801561028f57600080fd5b50610298610677565b60405161022b9190611963565b3480156102b157600080fd5b506102546102c0366004611714565b61067d565b3480156102d157600080fd5b506102546102e0366004611754565b610736565b3480156102f157600080fd5b50610298610743565b34801561030657600080fd5b50610298610749565b34801561031b57600080fd5b5061029861074f565b34801561033057600080fd5b5061028161033f366004611786565b610755565b34801561035057600080fd5b5061028161035f366004611754565b610762565b34801561037057600080fd5b5061028161037f3660046117b6565b6108c0565b34801561039057600080fd5b5061029861039f366004611679565b6108ed565b3480156103b057600080fd5b506102816103bf366004611754565b610908565b6102546103d23660046116b1565b6109b1565b3480156103e357600080fd5b506103ec610a20565b60405161022b919061180b565b34801561040557600080fd5b506102816104143660046117b6565b610a2f565b34801561042557600080fd5b506102816104343660046117b6565b610c6e565b34801561044557600080fd5b50610298610c94565b34801561045a57600080fd5b5061021e610c9a565b34801561046f57600080fd5b506103ec610cfb565b34801561048457600080fd5b50610298610d0a565b34801561049957600080fd5b50610298610d10565b3480156104ae57600080fd5b506102546104bd366004611754565b610d16565b3480156104ce57600080fd5b506102816104dd3660046117b6565b610d23565b3480156104ee57600080fd5b50610298610d35565b34801561050357600080fd5b50610298610d3b565b34801561051857600080fd5b50610298610d41565b34801561052d57600080fd5b50610281610d47565b34801561054257600080fd5b50610298611055565b34801561055757600080fd5b506102986105663660046116dc565b61105b565b34801561057757600080fd5b506103ec611086565b61025461058e366004611754565b611095565b34801561059f57600080fd5b5061028161125c565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b600061064b3384846112fa565b5060015b92915050565b61065d611362565b600d829055600e819055610671848461140a565b50505050565b60075481565b6001600160a01b03831660009081526009602090815260408083203384529091528120548211156106c95760405162461bcd60e51b81526004016106c09061193d565b60405180910390fd5b6001600160a01b03841660009081526009602090815260408083203384529091529020546106fd908363ffffffff61141516565b6001600160a01b038516600090815260096020908152604080832033845290915290205561072c848484611449565b5060019392505050565b600061064b328484611449565b600b5481565b60065481565b60115481565b61075f3382611544565b50565b61076a611362565b60075461077d908263ffffffff6115ff16565b6007556001600160a01b0382166000908152600860205260409020546107a9908263ffffffff6115ff16565b6001600160a01b0380841660009081526008602090815260408083209490945560098152838220600254855163197f3d9360e11b815295518796929591909116926332fe7b269260048082019391829003018186803b15801561080b57600080fd5b505afa15801561081f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190611695565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282540192505081905550816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b49190611963565b60405180910390a35050565b6108c8611362565b600b805483019055600c805482019055600d8054909201909155600e80549091019055565b6001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260096020908152604080832033845290915290205481111561094b5760405162461bcd60e51b81526004016106c09061193d565b6001600160a01b038216600090815260096020908152604080832033845290915290205461097f908263ffffffff61141516565b6001600160a01b03831660009081526009602090815260408083203384529091529020556109ad8282611544565b5050565b60006109bb611362565b826001600160a01b0316826040516109d290611808565b60006040518083038185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b50600195945050505050565b6001546001600160a01b031681565b610a37611362565b6000610a4161160e565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7957600080fd5b505afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab19190611695565b600b54600d546040516306e8c9b160e21b81526001600160a01b039390931692631ba326c492610ae592889260040161196c565b60206040518083038186803b158015610afd57600080fd5b505afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b35919061179e565b90506000610b4161160e565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb19190611695565b600c54600e546040516306e8c9b160e21b81526001600160a01b039390931692631ba326c492610be592889260040161196c565b60206040518083038186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c35919061179e565b600d54909150610c4b908363ffffffff61141516565b600d55600e54610c61908263ffffffff61141516565b600e55610671848461161d565b610c76611362565b60118054600101905560108054909201909155600f80549091019055565b60035481565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106345780601f1061060957610100808354040283529160200191610634565b6002546001600160a01b031681565b600f5481565b600a5481565b600061064b338484611449565b610d2b611362565b6109ad828261140a565b600e5481565b600d5481565b60105481565b610d4f611362565b6000546001600160a01b031663dd62ed3e30610d6961160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610da157600080fd5b505afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190611695565b6040518363ffffffff1660e01b8152600401610df692919061181f565b60206040518083038186803b158015610e0e57600080fd5b505afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061179e565b611053576001546001600160a01b031615610f58576001546001600160a01b031663095ea7b3610e7461160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610eac57600080fd5b505afa158015610ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190611695565b6000196040518363ffffffff1660e01b8152600401610f0492919061185d565b602060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f569190611766565b505b6000546001600160a01b031663095ea7b3610f7161160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611695565b6000196040518363ffffffff1660e01b815260040161100192919061185d565b602060405180830381600087803b15801561101b57600080fd5b505af115801561102f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611766565b565b600c5481565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6000546001600160a01b031681565b600080546001600160a01b0384811691161415611151576000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906110e090339030908790600401611839565b602060405180830381600087803b1580156110fa57600080fd5b505af115801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190611766565b50600b54611146908363ffffffff6115ff16565b600b5550600161064f565b6001546001600160a01b038481169116141561120c576001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061119b90339030908790600401611839565b602060405180830381600087803b1580156111b557600080fd5b505af11580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed9190611766565b50600c54611201908363ffffffff6115ff16565b600c5550600161064f565b6001600160a01b038316611254573482146112395760405162461bcd60e51b81526004016106c0906118d4565b600c5461124c908363ffffffff6115ff16565b600c5561064f565b50600061064f565b6001546001600160a01b03166112755747600c55611053565b6001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112a590309060040161180b565b60206040518083038186803b1580156112bd57600080fd5b505afa1580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f5919061179e565b600c55565b6001600160a01b0380841660008181526009602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611355908590611963565b60405180910390a3505050565b61136a61160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190611695565b6001600160a01b0316336001600160a01b0316146110535760405162461bcd60e51b81526004016106c0906118f6565b600b91909155600c55565b60006114428383604051806040016040528060088152602001670a6c2ccca9ac2e8d60c31b81525061164d565b9392505050565b6001600160a01b0383166000908152600860205260409020548111156114815760405162461bcd60e51b81526004016106c090611919565b6001600160a01b03821660009081526008602052604090205481810110156114bb5760405162461bcd60e51b81526004016106c090611919565b6001600160a01b0383166000908152600860205260409020546114e4908263ffffffff61141516565b6001600160a01b03808516600081815260086020526040808220949094559185168083529183902080548501905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611355908590611963565b604080518082018252600a8152692130b630b731b2a2b93960b11b6020808301919091526001600160a01b03851660009081526008909152919091205461159291839063ffffffff61164d16565b6001600160a01b0383166000908152600860205260409020556007546115be908263ffffffff61141516565b6007556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108b4908590611963565b60008282018381101561144257fe5b6002546001600160a01b031690565b600b54611630908363ffffffff61141516565b600b55600c54611646908263ffffffff61141516565b600c555050565b600081848411156116715760405162461bcd60e51b81526004016106c09190611881565b505050900390565b60006020828403121561168a578081fd5b813561144281611982565b6000602082840312156116a6578081fd5b815161144281611982565b600080604083850312156116c3578081fd5b82356116ce81611982565b946020939093013593505050565b600080604083850312156116ee578182fd5b82356116f981611982565b9150602083013561170981611982565b809150509250929050565b600080600060608486031215611728578081fd5b833561173381611982565b9250602084013561174381611982565b929592945050506040919091013590565b600080604083850312156116c3578182fd5b600060208284031215611777578081fd5b81518015158114611442578182fd5b600060208284031215611797578081fd5b5035919050565b6000602082840312156117af578081fd5b5051919050565b600080604083850312156117c8578182fd5b50508035926020909101359150565b600080600080608085870312156117ec578081fd5b5050823594602084013594506040840135936060013592509050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156118ad57858101830151858201604001528201611891565b818111156118be5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526008908201526724b7383aba22b93960c11b604082015260600190565b6020808252600990820152682937baba32b922b93960b91b604082015260600190565b6020808252600a90820152692130b630b731b2a2b93960b11b604082015260600190565b6020808252600c908201526b20b63637bbb0b731b2a2b93960a11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b6001600160a01b038116811461075f57600080fdfea2646970667358221220a760152a75b21036de501cc9152d2b29820fa2f2581e7ea985ae68b6c7a2628964736f6c63430006080033a26469706673582212206c2a17678aaa877809175f89c7719f73d3d269cc79fb84d86de8207b993300aa64736f6c63430006080033

Deployed Bytecode

0x608060405260043610620001ff5760003560e01c8063817b1cd2116200010f578063c1b8411a11620000a3578063ec342ad0116200006d578063ec342ad0146200054f578063ecf3ef921462000567578063f1900dc5146200057e578063fbfc702514620005965762000217565b8063c1b8411a14620004d5578063c9650a3314620004ed578063d04975501462000512578063e4b50cb8146200052a5762000217565b80639e3d67c911620000e55780639e3d67c9146200045b5780639f181b5e1462000473578063b3858487146200048b578063bbe4f6db14620004b05762000217565b8063817b1cd214620004065780638381e182146200041e57806398fabd3a14620004435762000217565b80635b16ebb711620001935780637628a37d116200015d5780637628a37d146200039c5780637d5ae5a814620003b35780637deb602514620003d85780637fd8b9a214620003ef5762000217565b80635b16ebb714620003235780635e24f76d14620003485780635f81a57c146200036d57806369ab0a8e14620003855762000217565b80631798546111620001d557806317985461146200027d5780632b7f092314620002b157806334e0190114620002d85780634189a68e146200030c5762000217565b806303a82138146200021c5780630dd3ba7a146200023657806313114a9d14620002655762000217565b3662000217576200021334600033620005bb565b5050005b600080fd5b3480156200022957600080fd5b5062000234620007dc565b005b6200024d620002473660046200350a565b62000824565b6040516200025c9190620037e6565b60405180910390f35b3480156200027257600080fd5b506200024d62000975565b3480156200028a57600080fd5b50620002a26200029c366004620033ce565b6200097b565b6040516200025c919062003589565b620002c8620002c236600462003432565b620009a3565b6040516200025c929190620037ef565b348015620002e557600080fd5b50620002fd620002f736600462003400565b62000e4a565b6040516200025c919062003683565b620002c86200031d36600462003400565b62001008565b3480156200033057600080fd5b50620002fd6200034236600462003371565b62001023565b3480156200035557600080fd5b506200024d620003673660046200348d565b62001038565b3480156200037a57600080fd5b506200024d620011e1565b620002c86200039636600462003478565b620011e7565b6200024d620003ad366004620034da565b62001305565b348015620003c057600080fd5b5062000234620003d236600462003371565b62001315565b620002c8620003e936600462003400565b6200155f565b620002a262000400366004620034da565b6200156f565b3480156200041357600080fd5b506200024d620017b4565b3480156200042b57600080fd5b50620002fd6200043d36600462003400565b620017ba565b3480156200045057600080fd5b50620002a262001994565b3480156200046857600080fd5b506200024d620019a3565b3480156200048057600080fd5b506200024d620019a9565b3480156200049857600080fd5b5062000234620004aa36600462003371565b620019af565b348015620004bd57600080fd5b50620002a2620004cf36600462003371565b62001cbe565b348015620004e257600080fd5b50620002a262001cdc565b348015620004fa57600080fd5b50620002346200050c36600462003371565b62001ceb565b3480156200051f57600080fd5b506200024d62001d3a565b3480156200053757600080fd5b50620002a262000549366004620033ce565b62001d40565b3480156200055c57600080fd5b50620002a262001d6b565b620002c86200057836600462003478565b620005bb565b3480156200058b57600080fd5b506200024d62001d7a565b348015620005a357600080fd5b506200024d620005b53660046200348d565b62001d80565b6000806000620005cb8562001cbe565b9050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200060957600080fd5b505af11580156200061e573d6000803e3d6000fd5b5050600080549092506200063e91506001600160a01b0316888462001fd9565b90506200064c828262002214565b6003805484019055600480548401905590945092506200066b620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015620006a457600080fd5b505afa158015620006b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006df919062003390565b6001600160a01b031663db39dc7987856040518363ffffffff1660e01b81526004016200070e929190620035c1565b60206040518083038186803b1580156200072757600080fd5b505afa1580156200073c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007629190620033e7565b6005805490910190556008805460010190556200078286858488620025c2565b600080546040517f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b92620007ca926001600160a01b0316918a9186918a908a908d9062003623565b60405180910390a15050935093915050565b6001546001600160a01b03163314620008125760405162461bcd60e51b81526004016200080990620037c1565b60405180910390fd5b600180546001600160a01b0319169055565b600080620008328462001cbe565b905060006200084385878462001fd9565b600080549192509062000861906001600160a01b0316898562001fd9565b60038054820190556007805460010190556002546040805163db2a444360e01b815290519293506001600160a01b039091169163db2a444391600480820192602092909190829003018186803b158015620008bb57600080fd5b505afa158015620008d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f69190620033e7565b60035411156200091a5760405162461bcd60e51b815260040162000809906200378a565b6200092883828488620026f5565b93507fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed85828487604051620009619493929190620035da565b60405180910390a15050505b949350505050565b60055481565b600981815481106200098957fe5b6000918252602090912001546001600160a01b0316905081565b600080826001600160a01b0316846001600160a01b03161415620009db5760405162461bcd60e51b8152600401620008099062003768565b6000620009e88562001cbe565b90506000620009f78562001cbe565b9050816001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000a3557600080fd5b505af115801562000a4a573d6000803e3d6000fd5b50505050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000a8a57600080fd5b505af115801562000a9f573d6000803e3d6000fd5b50505050600062000ab287898562001fd9565b60008054919250906001600160a01b038981169116141562000af55762000ada848362002214565b60038054850190556004805485019055909650945062000de2565b6000546001600160a01b038881169116141562000b435762000b188483620029f5565b600354919750955062000b32908763ffffffff62002d8b16565b600355600480548701905562000de2565b60008062000b528685620029f5565b600080549294509092509062000b74906001600160a01b031688888662002dba565b905062000b9f8562000b928360035462002f1190919063ffffffff16565b9063ffffffff62002d8b16565b6003556004805484019055600580548301905560008062000bc1888462002214565b9150915062000bcf620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0857600080fd5b505afa15801562000c1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c43919062003390565b6001600160a01b031663db39dc798d836040518363ffffffff1660e01b815260040162000c72929190620035c1565b60206040518083038186803b15801562000c8b57600080fd5b505afa15801562000ca0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc69190620033e7565b6005805490910190559099509093508390899062000ce3620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d1c57600080fd5b505afa15801562000d31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d57919062003390565b6001600160a01b031663c0c4a7248d866040518363ffffffff1660e01b815260040162000d86929190620035c1565b60206040518083038186803b15801562000d9f57600080fd5b505afa15801562000db4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dda9190620033e7565b019850505050505b60088054600101905562000df987878533620025c2565b7f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b888884848a8a3360405162000e36979695949392919062003623565b60405180910390a150505050935093915050565b60008062000e588362001cbe565b90503360008062000e68620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ea157600080fd5b505afa15801562000eb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000edc919062003390565b6001600160a01b031663bd9caa5887896040518363ffffffff1660e01b815260040162000f0b929190620035c1565b604080518083038186803b15801562000f2357600080fd5b505afa15801562000f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f5e9190620034b6565b600354919350915062000f78908363ffffffff62002d8b16565b60035560068054600101905562000f93848884848762002f21565b507f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008383838a60405162000fcb9493929190620035da565b60405180910390a162000fe186828686620025c2565b60005462000ffb906001600160a01b0316838686620025c2565b5060019695505050505050565b60008062001018848433620011e7565b909590945092505050565b600b6020526000908152604090205460ff1681565b60008062001045620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200107e57600080fd5b505afa15801562001093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b9919062003390565b6001600160a01b031663714270ab86620010d38662001cbe565b6001600160a01b03166370a08231336040518263ffffffff1660e01b815260040162001100919062003589565b60206040518083038186803b1580156200111957600080fd5b505afa1580156200112e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011549190620033e7565b6040518363ffffffff1660e01b815260040162001173929190620037ef565b60206040518083038186803b1580156200118c57600080fd5b505afa158015620011a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c79190620033e7565b9050620011d681858562001d80565b9150505b9392505050565b60045481565b6000806000620011f78562001cbe565b9050806001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200123557600080fd5b505af11580156200124a573d6000803e3d6000fd5b5050505060006200125d86888462001fd9565b90506200126b8282620029f5565b600354919550935062001285908563ffffffff62002d8b16565b60035560048054850190556005805484019055600880546001019055600054620012bb906001600160a01b0316858488620025c2565b600080546040517f9231d8325e00e36dcd9b77484890cc00a0b5b0928605d0a4e6b7fbfeeac4c51b92620007ca928a926001600160a01b039091169186918a908a908d9062003623565b60006200096d8484843362000824565b6001546001600160a01b03163314620013425760405162461bcd60e51b81526004016200080990620037c1565b6000816001600160a01b0316639f181b5e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200137e57600080fd5b505afa15801562001393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b99190620033e7565b905060005b818110156200155a57604051631c96a19760e31b81526000906001600160a01b0385169063e4b50cb890620013f8908590600401620037e6565b60206040518083038186803b1580156200141157600080fd5b505afa15801562001426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200144c919062003390565b90506000846001600160a01b031663bbe4f6db836040518263ffffffff1660e01b81526004016200147e919062003589565b60206040518083038186803b1580156200149757600080fd5b505afa158015620014ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d2919062003390565b6001600160a01b039081166000818152600b60209081526040808320805460ff19166001908117909155600980548083019091557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054989096166001600160a01b03199889168117909655948352600a90915290208054909416179092555001620013be565b505050565b60008062001018848433620005bb565b6000806200157d8362001cbe565b6001600160a01b031614620015a65760405162461bcd60e51b815260040162000809906200370e565b6000546001600160a01b0383811691161415620015d75760405162461bcd60e51b81526004016200080990620036e4565b600083118015620015e85750600084115b620016075760405162461bcd60e51b8152600401620008099062003731565b600080546002546040516001600160a01b0392831692869216906200162c9062003363565b6200163a9392919062003600565b604051809103906000f08015801562001657573d6000803e3d6000fd5b50905080915060006200166c84868562001fd9565b60008054919250906200168a906001600160a01b0316888662001fd9565b6001600160a01b038087166000818152600a602090815260408083208054958b166001600160a01b031996871681179091556009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054909716909517909555938252600b9052918220805460ff19168217905560038054840190556007805490910190559091506200172b85838533620026f5565b90507f3e576c516aed7bfaa059edc1ec8f0628a6b75a37c777be146867372226f0bfdd86864260405162001762939291906200359d565b60405180910390a17fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed33838584604051620017a19493929190620035da565b60405180910390a1505050509392505050565b60035481565b60008083118015620017ce57506127108311155b620017ed5760405162461bcd60e51b8152600401620008099062003768565b6000620017f9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200183257600080fd5b505afa15801562001847573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200186d919062003390565b6001600160a01b031663714270ab85620018878662001cbe565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401620018b4919062003589565b60206040518083038186803b158015620018cd57600080fd5b505afa158015620018e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019089190620033e7565b6040518363ffffffff1660e01b815260040162001927929190620037ef565b60206040518083038186803b1580156200194057600080fd5b505afa15801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b9190620033e7565b905062001989818462000e4a565b506001949350505050565b6002546001600160a01b031681565b60075481565b60095490565b6001546001600160a01b03163314620019dc5760405162461bcd60e51b81526004016200080990620037c1565b806001600160a01b031663817b1cd26040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a1657600080fd5b505afa15801562001a2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a519190620033e7565b600381905550806001600160a01b0316635f81a57c6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001a9157600080fd5b505afa15801562001aa6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001acc9190620033e7565b600481905550806001600160a01b03166313114a9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b0c57600080fd5b505afa15801562001b21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b479190620033e7565b600581905550806001600160a01b031663f1900dc56040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b8757600080fd5b505afa15801562001b9c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bc29190620033e7565b600681905550806001600160a01b0316639e3d67c96040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c0257600080fd5b505afa15801562001c17573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c3d9190620033e7565b600781905550806001600160a01b031663d04975506040518163ffffffff1660e01b815260040160206040518083038186803b15801562001c7d57600080fd5b505afa15801562001c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cb89190620033e7565b60085550565b6001600160a01b039081166000908152600a60205260409020541690565b6001546001600160a01b031681565b6001546001600160a01b0316331462001d185760405162461bcd60e51b81526004016200080990620037c1565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60085481565b60006009828154811062001d5057fe5b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b031681565b60065481565b60008062001d8e8362001cbe565b9050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801562001dca57600080fd5b505afa15801562001ddf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e059190620033e7565b851062001e265760405162461bcd60e51b8152600401620008099062003768565b600080600062001e35620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562001e6e57600080fd5b505afa15801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062003390565b6001600160a01b0316630e174391878a8a6040518463ffffffff1660e01b815260040162001eda9392919062003660565b60606040518083038186803b15801562001ef357600080fd5b505afa15801562001f08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2e919062003558565b92509250925062001f4b8360035462002d8b90919063ffffffff16565b60035560068054600101905562001f66848985853362002f21565b507f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de003384848b60405162001f9e9493929190620035da565b60405180910390a162001fb486838633620025c2565b60005462001fce906001600160a01b0316848633620025c2565b979650505050505050565b60008215620011da576001600160a01b0384166200207c57348314620020135760405162461bcd60e51b8152600401620008099062003768565b816001600160a01b0316836040516200202c9062003586565b60006040518083038185875af1925050503d80600081146200206b576040519150601f19603f3d011682016040523d82523d6000602084013e62002070565b606091505b505050829050620011da565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190620020ad90869060040162003589565b60206040518083038186803b158015620020c657600080fd5b505afa158015620020db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021019190620033e7565b6040516323b872dd60e01b81529091506001600160a01b038616906323b872dd9062002136903390879089906004016200359d565b602060405180830381600087803b1580156200215157600080fd5b505af115801562002166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200218c9190620033af565b50620011d681866001600160a01b03166370a08231866040518263ffffffff1660e01b8152600401620021c0919062003589565b60206040518083038186803b158015620021d957600080fd5b505afa158015620021ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b929190620033e7565b6000806000846001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b1580156200225357600080fd5b505afa15801562002268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200228e9190620033e7565b90506000856001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b158015620022cc57600080fd5b505afa158015620022e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023079190620033e7565b905062002313620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200234c57600080fd5b505afa15801562002361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002387919062003390565b6001600160a01b031663701baaf38684846040518463ffffffff1660e01b8152600401620023b893929190620037fd565b60206040518083038186803b158015620023d157600080fd5b505afa158015620023e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200240c9190620033e7565b935062002418620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200245157600080fd5b505afa15801562002466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200248c919062003390565b6001600160a01b031663896a708c8684846040518463ffffffff1660e01b8152600401620024bd93929190620037fd565b60206040518083038186803b158015620024d657600080fd5b505afa158015620024eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025119190620033e7565b92506001600160a01b03861663b5ae659262002534848863ffffffff62002f1116565b62002546848863ffffffff62002d8b16565b6040518363ffffffff1660e01b815260040162002565929190620037ef565b600060405180830381600087803b1580156200258057600080fd5b505af115801562002595573d6000803e3d6000fd5b50505050620025aa868486018560006200304c565b50509250929050565b6002546001600160a01b031690565b8215620026ef576001600160a01b0384166200266557604051637b1a490960e01b81526001600160a01b03831690637b1a490990620026089084908790600401620035c1565b602060405180830381600087803b1580156200262357600080fd5b505af115801562002638573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200265e9190620033af565b50620026ef565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9062002697908590859088906004016200359d565b602060405180830381600087803b158015620026b257600080fd5b505af1158015620026c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026ed9190620033af565b505b50505050565b6000846001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200273357600080fd5b505af115801562002748573d6000803e3d6000fd5b505050506000620027d585876001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b1580156200278d57600080fd5b505afa158015620027a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027c89190620033e7565b9063ffffffff62002f1116565b905060006200281885886001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b1580156200278d57600080fd5b604051635b7d117560e01b81529091506001600160a01b03881690635b7d1175906200284b9089908990600401620037ef565b600060405180830381600087803b1580156200286657600080fd5b505af11580156200287b573d6000803e3d6000fd5b5050505062002889620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015620028c257600080fd5b505afa158015620028d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028fd919062003390565b6001600160a01b031663d087874a868389866040518563ffffffff1660e01b815260040162002930949392919062003813565b60206040518083038186803b1580156200294957600080fd5b505afa1580156200295e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029849190620033e7565b604051634e6ec24760e01b81529093506001600160a01b03881690634e6ec24790620029b79087908790600401620035c1565b600060405180830381600087803b158015620029d257600080fd5b505af1158015620029e7573d6000803e3d6000fd5b505050505050949350505050565b6000806000846001600160a01b031663dc883ca46040518163ffffffff1660e01b815260040160206040518083038186803b15801562002a3457600080fd5b505afa15801562002a49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a6f9190620033e7565b90506000856001600160a01b0316632f4775866040518163ffffffff1660e01b815260040160206040518083038186803b15801562002aad57600080fd5b505afa15801562002ac2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ae89190620033e7565b905062002af4620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562002b2d57600080fd5b505afa15801562002b42573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b68919062003390565b6001600160a01b031663701baaf38684846040518463ffffffff1660e01b815260040162002b9993929190620037fd565b60206040518083038186803b15801562002bb257600080fd5b505afa15801562002bc7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bed9190620033e7565b935062002bf9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c3257600080fd5b505afa15801562002c47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c6d919062003390565b6001600160a01b031663896a708c8684846040518463ffffffff1660e01b815260040162002c9e93929190620037fd565b60206040518083038186803b15801562002cb757600080fd5b505afa15801562002ccc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cf29190620033e7565b92506001600160a01b03861663b5ae659262002d15838763ffffffff62002d8b16565b62002d27858963ffffffff62002f1116565b6040518363ffffffff1660e01b815260040162002d46929190620037ef565b600060405180830381600087803b15801562002d6157600080fd5b505af115801562002d76573d6000803e3d6000fd5b50505050620025aa868486018560016200304c565b6000620011da8383604051806040016040528060088152602001670a6c2ccca9ac2e8d60c31b81525062003334565b600081156200096d576040516370a0823160e01b81526000906001600160a01b038716906370a082319062002df490879060040162003589565b60206040518083038186803b15801562002e0d57600080fd5b505afa15801562002e22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e489190620033e7565b6040516323b872dd60e01b81529091506001600160a01b038716906323b872dd9062002e7d908890889088906004016200359d565b602060405180830381600087803b15801562002e9857600080fd5b505af115801562002ead573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ed39190620033af565b5062002f0781876001600160a01b03166370a08231876040518263ffffffff1660e01b8152600401620021c0919062003589565b9695505050505050565b600082820183811015620011da57fe5b6000856001600160a01b031663d77daa666040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002f5f57600080fd5b505af115801562002f74573d6000803e3d6000fd5b5050604051638d3ef44f60e01b81526001600160a01b0389169250638d3ef44f915062002fa89087908790600401620037ef565b600060405180830381600087803b15801562002fc357600080fd5b505af115801562002fd8573d6000803e3d6000fd5b505060405163079cc67960e41b81526001600160a01b03891692506379cc679091506200300c9085908990600401620035c1565b600060405180830381600087803b1580156200302757600080fd5b505af11580156200303c573d6000803e3d6000fd5b5060019998505050505050505050565b8015620030bd576040516347c369d360e11b81526001600160a01b03851690638f86d3a690620030839086908690600401620037ef565b600060405180830381600087803b1580156200309e57600080fd5b505af1158015620030b3573d6000803e3d6000fd5b50505050620026ef565b6000620030c9620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200310257600080fd5b505afa15801562003117573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200313d919062003390565b6001600160a01b03166372af922886866040518363ffffffff1660e01b81526004016200316c929190620035c1565b60206040518083038186803b1580156200318557600080fd5b505afa1580156200319a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031c09190620033e7565b90506000620031ce620025b3565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b1580156200320757600080fd5b505afa1580156200321c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003242919062003390565b6001600160a01b03166372af922887866040518363ffffffff1660e01b815260040162003271929190620035c1565b60206040518083038186803b1580156200328a57600080fd5b505afa1580156200329f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032c59190620033e7565b6040516347c369d360e11b81529091506001600160a01b03871690638f86d3a690620032f89085908590600401620037ef565b600060405180830381600087803b1580156200331357600080fd5b505af115801562003328573d6000803e3d6000fd5b50505050505050505050565b600081848411156200335b5760405162461bcd60e51b81526004016200080991906200368e565b505050900390565b611efa806200385783390190565b60006020828403121562003383578081fd5b8135620011da816200382e565b600060208284031215620033a2578081fd5b8151620011da816200382e565b600060208284031215620033c1578081fd5b8151620011da8162003847565b600060208284031215620033e0578081fd5b5035919050565b600060208284031215620033f9578081fd5b5051919050565b6000806040838503121562003413578081fd5b82359150602083013562003427816200382e565b809150509250929050565b60008060006060848603121562003447578081fd5b8335925060208401356200345b816200382e565b915060408401356200346d816200382e565b809150509250925092565b60008060006060848603121562003447578283fd5b600080600060608486031215620034a2578283fd5b8335925060208401356200345b8162003847565b60008060408385031215620034c9578182fd5b505080516020909101519092909150565b600080600060608486031215620034ef578283fd5b833592506020840135915060408401356200346d816200382e565b6000806000806080858703121562003520578182fd5b843593506020850135925060408501356200353b816200382e565b915060608501356200354d816200382e565b939692955090935050565b6000806000606084860312156200356d578081fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039788168152958716602087015260408601949094526060850192909252608084015260a083015290911660c082015260e00190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b901515815260200190565b6000602080835283518082850152825b81811015620036bc578581018301518582016040015282016200369e565b81811115620036ce5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f4d757374206e6f74206265204261736560801b604082015260600190565b60208082526009908201526821b932b0ba32a2b93960b91b604082015260600190565b60208082526018908201527f4d7573742067657420746f6b656e7320666f7220626f74680000000000000000604082015260600190565b60208082526008908201526724b7383aba22b93960c11b604082015260600190565b6020808252601b908201527f4d757374206265206c657373207468616e2046756e6473204361700000000000604082015260600190565b6020808252600b908201526a2232b83637bcb2b922b93960a91b604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03811681146200384457600080fd5b50565b80151581146200384457600080fdfe6080604052670de0b6b3a764000060035560405162001efa38038062001efa833981016040819052620000329162000353565b600080546001600160a01b038086166001600160a01b0319928316179092556001805485841690831681179091556002805493851693909216929092179055604080518082018252600d81526c566574686572506f6f6c56312d60981b60208083019190915282518084019093526005835264565054312d60d81b9083015291620001315781604051602001620000ca91906200047a565b60405160208183030381529060405260049080519060200190620000f0929190620002ae565b5080604051602001620001049190620004a8565b604051602081830303815290604052600590805190602001906200012a929190620002ae565b506200029a565b81846001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200016c57600080fd5b505afa15801562000181573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001ab9190810190620003a6565b604051602001620001be92919062000448565b60405160208183030381529060405260049080519060200190620001e4929190620002ae565b5080846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200025f9190810190620003a6565b6040516020016200027292919062000448565b6040516020818303038152906040526005908051906020019062000298929190620002ae565b505b50506012600655505042600a55506200051d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002f157805160ff191683800117855562000321565b8280016001018555821562000321579182015b828111156200032157825182559160200191906001019062000304565b506200032f92915062000333565b5090565b6200035091905b808211156200032f57600081556001016200033a565b90565b60008060006060848603121562000368578283fd5b8351620003758162000504565b6020850151909350620003888162000504565b60408501519092506200039b8162000504565b809150509250925092565b600060208284031215620003b8578081fd5b81516001600160401b0380821115620003cf578283fd5b81840185601f820112620003e1578384fd5b8051925081831115620003f2578384fd5b604051601f8401601f19168101602001838111828210171562000413578586fd5b6040528381528184016020018710156200042b578485fd5b6200043e846020830160208501620004d1565b9695505050505050565b600083516200045c818460208801620004d1565b835190830162000471828260208801620004d1565b01949350505050565b600082516200048e818460208701620004d1565b67457468657265756d60c01b920191825250600801919050565b60008251620004bc818460208701620004d1565b6208aa8960eb1b920191825250600301919050565b60005b83811015620004ee578181015183820152602001620004d4565b83811115620004fe576000848401525b50505050565b6001600160a01b03811681146200051a57600080fd5b50565b6119cd806200052d6000396000f3fe6080604052600436106101fd5760003560e01c80638f86d3a61161010d578063c2c08068116100a0578063dc883ca41161006f578063dc883ca414610536578063dd62ed3e1461054b578063ec342ad01461056b578063f5d82b6b14610580578063fff6cae91461059357610204565b8063c2c08068146104e2578063c35d6e28146104f7578063c618a1e41461050c578063d77daa661461052157610204565b80639af1d35a116100dc5780639af1d35a14610478578063a7f0b3de1461048d578063a9059cbb146104a2578063b5ae6592146104c257610204565b80638f86d3a614610419578063901717d11461043957806395d89b411461044e57806398fabd3a1461046357610204565b80633c5406871161019057806370a082311161015f57806370a082311461038457806379cc6790146103a45780637b1a4909146103c457806382bfefc8146103d75780638d3ef44f146103f957610204565b80633c5406871461030f57806342966c68146103245780634e6ec247146103445780635b7d11751461036457610204565b806323b872dd116101cc57806323b872dd146102a55780632ccb1b30146102c55780632f477586146102e5578063313ce567146102fa57610204565b806306fdde0314610209578063095ea7b3146102345780630a27fdb51461026157806318160ddd1461028357610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6105a8565b60405161022b9190611881565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611754565b61063e565b60405161022b9190611876565b34801561026d57600080fd5b5061028161027c3660046117d7565b610655565b005b34801561028f57600080fd5b50610298610677565b60405161022b9190611963565b3480156102b157600080fd5b506102546102c0366004611714565b61067d565b3480156102d157600080fd5b506102546102e0366004611754565b610736565b3480156102f157600080fd5b50610298610743565b34801561030657600080fd5b50610298610749565b34801561031b57600080fd5b5061029861074f565b34801561033057600080fd5b5061028161033f366004611786565b610755565b34801561035057600080fd5b5061028161035f366004611754565b610762565b34801561037057600080fd5b5061028161037f3660046117b6565b6108c0565b34801561039057600080fd5b5061029861039f366004611679565b6108ed565b3480156103b057600080fd5b506102816103bf366004611754565b610908565b6102546103d23660046116b1565b6109b1565b3480156103e357600080fd5b506103ec610a20565b60405161022b919061180b565b34801561040557600080fd5b506102816104143660046117b6565b610a2f565b34801561042557600080fd5b506102816104343660046117b6565b610c6e565b34801561044557600080fd5b50610298610c94565b34801561045a57600080fd5b5061021e610c9a565b34801561046f57600080fd5b506103ec610cfb565b34801561048457600080fd5b50610298610d0a565b34801561049957600080fd5b50610298610d10565b3480156104ae57600080fd5b506102546104bd366004611754565b610d16565b3480156104ce57600080fd5b506102816104dd3660046117b6565b610d23565b3480156104ee57600080fd5b50610298610d35565b34801561050357600080fd5b50610298610d3b565b34801561051857600080fd5b50610298610d41565b34801561052d57600080fd5b50610281610d47565b34801561054257600080fd5b50610298611055565b34801561055757600080fd5b506102986105663660046116dc565b61105b565b34801561057757600080fd5b506103ec611086565b61025461058e366004611754565b611095565b34801561059f57600080fd5b5061028161125c565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b600061064b3384846112fa565b5060015b92915050565b61065d611362565b600d829055600e819055610671848461140a565b50505050565b60075481565b6001600160a01b03831660009081526009602090815260408083203384529091528120548211156106c95760405162461bcd60e51b81526004016106c09061193d565b60405180910390fd5b6001600160a01b03841660009081526009602090815260408083203384529091529020546106fd908363ffffffff61141516565b6001600160a01b038516600090815260096020908152604080832033845290915290205561072c848484611449565b5060019392505050565b600061064b328484611449565b600b5481565b60065481565b60115481565b61075f3382611544565b50565b61076a611362565b60075461077d908263ffffffff6115ff16565b6007556001600160a01b0382166000908152600860205260409020546107a9908263ffffffff6115ff16565b6001600160a01b0380841660009081526008602090815260408083209490945560098152838220600254855163197f3d9360e11b815295518796929591909116926332fe7b269260048082019391829003018186803b15801561080b57600080fd5b505afa15801561081f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190611695565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282540192505081905550816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108b49190611963565b60405180910390a35050565b6108c8611362565b600b805483019055600c805482019055600d8054909201909155600e80549091019055565b6001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260096020908152604080832033845290915290205481111561094b5760405162461bcd60e51b81526004016106c09061193d565b6001600160a01b038216600090815260096020908152604080832033845290915290205461097f908263ffffffff61141516565b6001600160a01b03831660009081526009602090815260408083203384529091529020556109ad8282611544565b5050565b60006109bb611362565b826001600160a01b0316826040516109d290611808565b60006040518083038185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b50600195945050505050565b6001546001600160a01b031681565b610a37611362565b6000610a4161160e565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7957600080fd5b505afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab19190611695565b600b54600d546040516306e8c9b160e21b81526001600160a01b039390931692631ba326c492610ae592889260040161196c565b60206040518083038186803b158015610afd57600080fd5b505afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b35919061179e565b90506000610b4161160e565b6001600160a01b0316637b0e5c456040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7957600080fd5b505afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb19190611695565b600c54600e546040516306e8c9b160e21b81526001600160a01b039390931692631ba326c492610be592889260040161196c565b60206040518083038186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c35919061179e565b600d54909150610c4b908363ffffffff61141516565b600d55600e54610c61908263ffffffff61141516565b600e55610671848461161d565b610c76611362565b60118054600101905560108054909201909155600f80549091019055565b60035481565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106345780601f1061060957610100808354040283529160200191610634565b6002546001600160a01b031681565b600f5481565b600a5481565b600061064b338484611449565b610d2b611362565b6109ad828261140a565b600e5481565b600d5481565b60105481565b610d4f611362565b6000546001600160a01b031663dd62ed3e30610d6961160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610da157600080fd5b505afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190611695565b6040518363ffffffff1660e01b8152600401610df692919061181f565b60206040518083038186803b158015610e0e57600080fd5b505afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061179e565b611053576001546001600160a01b031615610f58576001546001600160a01b031663095ea7b3610e7461160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610eac57600080fd5b505afa158015610ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190611695565b6000196040518363ffffffff1660e01b8152600401610f0492919061185d565b602060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f569190611766565b505b6000546001600160a01b031663095ea7b3610f7161160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611695565b6000196040518363ffffffff1660e01b815260040161100192919061185d565b602060405180830381600087803b15801561101b57600080fd5b505af115801561102f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190611766565b565b600c5481565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6000546001600160a01b031681565b600080546001600160a01b0384811691161415611151576000546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906110e090339030908790600401611839565b602060405180830381600087803b1580156110fa57600080fd5b505af115801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190611766565b50600b54611146908363ffffffff6115ff16565b600b5550600161064f565b6001546001600160a01b038481169116141561120c576001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061119b90339030908790600401611839565b602060405180830381600087803b1580156111b557600080fd5b505af11580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed9190611766565b50600c54611201908363ffffffff6115ff16565b600c5550600161064f565b6001600160a01b038316611254573482146112395760405162461bcd60e51b81526004016106c0906118d4565b600c5461124c908363ffffffff6115ff16565b600c5561064f565b50600061064f565b6001546001600160a01b03166112755747600c55611053565b6001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112a590309060040161180b565b60206040518083038186803b1580156112bd57600080fd5b505afa1580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f5919061179e565b600c55565b6001600160a01b0380841660008181526009602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611355908590611963565b60405180910390a3505050565b61136a61160e565b6001600160a01b03166332fe7b266040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190611695565b6001600160a01b0316336001600160a01b0316146110535760405162461bcd60e51b81526004016106c0906118f6565b600b91909155600c55565b60006114428383604051806040016040528060088152602001670a6c2ccca9ac2e8d60c31b81525061164d565b9392505050565b6001600160a01b0383166000908152600860205260409020548111156114815760405162461bcd60e51b81526004016106c090611919565b6001600160a01b03821660009081526008602052604090205481810110156114bb5760405162461bcd60e51b81526004016106c090611919565b6001600160a01b0383166000908152600860205260409020546114e4908263ffffffff61141516565b6001600160a01b03808516600081815260086020526040808220949094559185168083529183902080548501905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611355908590611963565b604080518082018252600a8152692130b630b731b2a2b93960b11b6020808301919091526001600160a01b03851660009081526008909152919091205461159291839063ffffffff61164d16565b6001600160a01b0383166000908152600860205260409020556007546115be908263ffffffff61141516565b6007556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108b4908590611963565b60008282018381101561144257fe5b6002546001600160a01b031690565b600b54611630908363ffffffff61141516565b600b55600c54611646908263ffffffff61141516565b600c555050565b600081848411156116715760405162461bcd60e51b81526004016106c09190611881565b505050900390565b60006020828403121561168a578081fd5b813561144281611982565b6000602082840312156116a6578081fd5b815161144281611982565b600080604083850312156116c3578081fd5b82356116ce81611982565b946020939093013593505050565b600080604083850312156116ee578182fd5b82356116f981611982565b9150602083013561170981611982565b809150509250929050565b600080600060608486031215611728578081fd5b833561173381611982565b9250602084013561174381611982565b929592945050506040919091013590565b600080604083850312156116c3578182fd5b600060208284031215611777578081fd5b81518015158114611442578182fd5b600060208284031215611797578081fd5b5035919050565b6000602082840312156117af578081fd5b5051919050565b600080604083850312156117c8578182fd5b50508035926020909101359150565b600080600080608085870312156117ec578081fd5b5050823594602084013594506040840135936060013592509050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156118ad57858101830151858201604001528201611891565b818111156118be5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526008908201526724b7383aba22b93960c11b604082015260600190565b6020808252600990820152682937baba32b922b93960b91b604082015260600190565b6020808252600a90820152692130b630b731b2a2b93960b11b604082015260600190565b6020808252600c908201526b20b63637bbb0b731b2a2b93960a11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b6001600160a01b038116811461075f57600080fdfea2646970667358221220a760152a75b21036de501cc9152d2b29820fa2f2581e7ea985ae68b6c7a2628964736f6c63430006080033a26469706673582212206c2a17678aaa877809175f89c7719f73d3d269cc79fb84d86de8207b993300aa64736f6c63430006080033

Deployed Bytecode Sourcemap

11410:16402:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12751:40;12757:9;12776:1;12780:10;12751:5;:40::i;:::-;;;11410:16402;;12:1:-1;9;2:12;13897:85:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13897:85:0;;;:::i;:::-;;15307:658;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11720:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11720:21:0;;;:::i;11829:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;11829:28:0;;;;;;;;:::i;:::-;;;;;;;;21465:2062;;;;;;;;;:::i;:::-;;;;;;;;;17086:638;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;17086:638:0;;;;;;;;:::i;:::-;;;;;;;;20511:205;;;;;;;;;:::i;11926:36::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;11926:36:0;;;;;;;;:::i;17768:323::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;17768:323:0;;;;;;;;:::i;11690:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11690:23:0;;;:::i;20722:735::-;;;;;;;;;:::i;15094:205::-;;;;;;;;;:::i;13428:461::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;13428:461:0;;;;;;;;:::i;19378:203::-;;;;;;;;;:::i;13990:976::-;;;;;;;;;:::i;11659:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11659:23:0;;;:::i;16712:328::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;16712:328:0;;;;;;;;:::i;11530:15::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11530:15:0;;;:::i;11776:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11776:19:0;;;:::i;27614:91::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27614:91:0;;;:::i;12986:434::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;12986:434:0;;;;;;;;:::i;27487:119::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27487:119:0;;;;;;;;:::i;11500:23::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11500:23:0;;;:::i;12807:90::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;12807:90:0;;;;;;;;:::i;11802:18::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11802:18:0;;;:::i;27713:94::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27713:94:0;;;;;;;;:::i;11474:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11474:19:0;;;:::i;19587:812::-;;;;;;;;;:::i;11748:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11748:21:0;;;:::i;18134:743::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;18134:743:0;;;;;;;;:::i;19587:812::-;19678:17;19697:8;19718:20;19741:14;19749:5;19741:7;:14::i;:::-;19718:37;;19778:4;-1:-1:-1;;;;;19766:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19766:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19812:18:0;19851:4;;19812:18;;-1:-1:-1;19833:37:0;;-1:-1:-1;;;;;;19851:4:0;19857:6;19865:4;19833:17;:37::i;:::-;19812:58;;19956:37;19973:4;19979:13;19956:16;:37::i;:::-;20054:11;:28;;;;;;20093:11;:28;;;;;;19934:59;;-1:-1:-1;19934:59:0;-1:-1:-1;20145:6:0;:4;:6::i;:::-;-1:-1:-1;;;;;20145:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20145:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20145:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20145:14:0;;;;;;;;;-1:-1:-1;;;;;20145:30:0;;20176:5;20183:3;20145:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20145:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20145:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20145:42:0;;;;;;;;;20132:9;:55;;;;;;;20198:6;:11;;-1:-1:-1;20198:11:0;;;20220:53;20239:5;20246:12;20260:4;20266:6;20220:18;:53::i;:::-;20297:4;;;20289:65;;;;;;-1:-1:-1;;;;;20297:4:0;;20303:5;;20310:13;;20328:12;;20342:3;;20347:6;;20289:65;;;;;;;;;;-1:-1:-1;;19587:812:0;;;;;;:::o;13897:85::-;12523:8;;-1:-1:-1;;;;;12523:8:0;12509:10;:22;12501:46;;;;-1:-1:-1;;;12501:46:0;;;;;;;;;;;;;;;;;13953:8:::1;:21:::0;;-1:-1:-1;;;;;;13953:21:0::1;::::0;;13897:85::o;15307:658::-;15419:10;15442:20;15465:14;15473:5;15465:7;:14::i;:::-;15442:37;;15490:22;15515:42;15533:5;15540:10;15552:4;15515:17;:42::i;:::-;15568:21;15610:4;;15490:67;;-1:-1:-1;15568:21:0;15592:40;;-1:-1:-1;;;;;15610:4:0;15616:9;15627:4;15592:17;:40::i;:::-;15643:11;:31;;;;;;15685:7;:12;;-1:-1:-1;15685:12:0;;;15731:3;;:15;;;-1:-1:-1;;;15731:15:0;;;;15568:64;;-1:-1:-1;;;;;;15731:3:0;;;;:13;;:15;;;;;;;;;;;;;;;:3;:15;;;2:2:-1;;;;27:1;24;17:12;2:2;15731:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15731:15:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15731:15:0;;;;;;;;;15716:11;;:30;;15708:70;;;;-1:-1:-1;;;15708:70:0;;;;;;;;;15797:63;15810:4;15816:16;15834:17;15853:6;15797:12;:63::i;:::-;15789:71;;15876:58;15883:6;15891:16;15909:17;15928:5;15876:58;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15307:658:0;;;;;;;:::o;11720:21::-;;;;:::o;11829:28::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11829:28:0;;-1:-1:-1;11829:28:0;:::o;21465:2062::-;21557:17;21576:8;21618:7;-1:-1:-1;;;;;21605:20:0;:9;-1:-1:-1;;;;;21605:20:0;;;21597:41;;;;-1:-1:-1;;;21597:41:0;;;;;;;;;21649:24;21676:18;21684:9;21676:7;:18::i;:::-;21649:45;;21696:22;21721:16;21729:7;21721;:16::i;:::-;21696:41;;21760:8;-1:-1:-1;;;;;21748:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21748:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21748:39:0;;;;21810:6;-1:-1:-1;;;;;21798:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21798:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21798:37:0;;;;21846:18;21867:51;21885:9;21896:11;21909:8;21867:17;:51::i;:::-;21929:20;21980:4;;21846:72;;-1:-1:-1;21929:20:0;-1:-1:-1;;;;;21967:17:0;;;21980:4;;21967:17;21964:1319;;;22022:41;22039:8;22049:13;22022:16;:41::i;:::-;22099:11;:28;;;;;;22142:11;:28;;;;;;22000:63;;-1:-1:-1;22000:63:0;-1:-1:-1;21964:1319:0;;;22260:4;;-1:-1:-1;;;;;22249:15:0;;;22260:4;;22249:15;22246:1037;;;22303:40;22320:8;22329:13;22303:16;:40::i;:::-;22391:11;;22281:62;;-1:-1:-1;22281:62:0;-1:-1:-1;22391:29:0;;22281:62;22391:29;:15;:29;:::i;:::-;22377:11;:43;22435:11;:27;;;;;;22246:1037;;;22554:8;22564:10;22578:41;22595:8;22605:13;22578:16;:41::i;:::-;22662:14;22699:4;;22553:66;;-1:-1:-1;22553:66:0;;-1:-1:-1;22662:14:0;22679:48;;-1:-1:-1;;;;;22699:4:0;22705:8;22715:6;22553:66;22679:19;:48::i;:::-;22662:65;;22756:45;22787:13;22756:26;22772:9;22756:11;;:15;;:26;;;;:::i;:::-;:30;:45;:30;:45;:::i;:::-;22742:11;:59;22816:11;:18;;;;;;22836:9;:18;;;;;;22816:11;;22945:35;22962:6;22970:9;22945:16;:35::i;:::-;22920:60;;;;23037:6;:4;:6::i;:::-;-1:-1:-1;;;;;23037:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23037:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23037:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23037:14:0;;;;;;;;;-1:-1:-1;;;;;23037:30:0;;23068:7;23077:5;23037:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23037:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23037:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23037:46:0;;;;;;;;;23024:9;:59;;;;;;;23191:3;;-1:-1:-1;23165:9:0;;-1:-1:-1;23165:9:0;;23191:3;;23224:6;:4;:6::i;:::-;-1:-1:-1;;;;;23224:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23224:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23224:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23224:14:0;;;;;;;;;-1:-1:-1;;;;;23224:31:0;;23256:7;23265:5;23224:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23224:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23224:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23224:47:0;;;;;;;;;23216:55;;-1:-1:-1;;;;;22246:1037:0;23293:6;:11;;23303:1;23293:11;;;23315:61;23334:7;23343:12;23357:6;23365:10;23315:18;:61::i;:::-;23392:90;23400:9;23411:7;23420:13;23435:15;23452:12;23466:3;23471:10;23392:90;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;21465:2062:0;;;;;;:::o;17086:638::-;17151:12;17176:20;17199:14;17207:5;17199:7;:14::i;:::-;17176:37;-1:-1:-1;17249:10:0;17224:22;;17310:6;:4;:6::i;:::-;-1:-1:-1;;;;;17310:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17310:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17310:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17310:14:0;;;;;;;;;-1:-1:-1;;;;;17310:27:0;;17338:5;17345;17310:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17310:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17310:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17310:41:0;;;;;;;;;17376:11;;17270:81;;-1:-1:-1;17270:81:0;-1:-1:-1;17376:28:0;;17270:81;17376:28;:15;:28;:::i;:::-;17362:11;:42;17415:9;:14;;17428:1;17415:14;;;17440:62;17455:4;17461:5;17468:11;17481:12;17495:6;17440:14;:62::i;:::-;;17518:50;17527:6;17535:11;17548:12;17562:5;17518:50;;;;;;;;;;;;;;;;;;17579:53;17598:5;17605:12;17619:4;17625:6;17579:18;:53::i;:::-;17662:4;;17643:51;;-1:-1:-1;;;;;17662:4:0;17668:11;17681:4;17687:6;17643:18;:51::i;:::-;-1:-1:-1;17712:4:0;;17086:638;-1:-1:-1;;;;;;17086:638:0:o;20511:205::-;20577:17;20596:8;20638:33;20645:6;20653:5;20660:10;20638:6;:33::i;:::-;20616:55;;;;-1:-1:-1;20511:205:0;-1:-1:-1;;;20511:205:0:o;11926:36::-;;;;;;;;;;;;;;;:::o;17768:323::-;17857:17;17886:11;17900:6;:4;:6::i;:::-;-1:-1:-1;;;;;17900:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17900:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17900:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17900:14:0;;;;;;;;;-1:-1:-1;;;;;17900:23:0;;17924:11;17944:14;17952:5;17944:7;:14::i;:::-;-1:-1:-1;;;;;17937:32:0;;17970:10;17937:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17937:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17937:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17937:44:0;;;;;;;;;17900:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17900:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17900:82:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17900:82:0;;;;;;;;;17886:96;;18008:45;18031:6;18039;18047:5;18008:22;:45::i;:::-;17993:60;-1:-1:-1;;17768:323:0;;;;;;:::o;11690:23::-;;;;:::o;20722:735::-;20814:17;20833:8;20854:20;20877:14;20885:5;20877:7;:14::i;:::-;20854:37;;20914:4;-1:-1:-1;;;;;20902:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20902:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20902:35:0;;;;20948:18;20969:38;20987:5;20994:6;21002:4;20969:17;:38::i;:::-;20948:59;;21040:37;21057:4;21063:13;21040:16;:37::i;:::-;21152:11;;21018:59;;-1:-1:-1;21018:59:0;-1:-1:-1;21152:29:0;;21018:59;21152:29;:15;:29;:::i;:::-;21138:11;:43;21192:11;:27;;;;;;21230:9;:16;;;;;;21257:6;:11;;-1:-1:-1;21257:11:0;;;21192;21298:4;21279:52;;-1:-1:-1;;;;;21298:4:0;21207:12;21318:4;21324:6;21279:18;:52::i;:::-;21362:4;;;21347:65;;;;;;21355:5;;-1:-1:-1;;;;;21362:4:0;;;;21368:13;;21386:12;;21400:3;;21405:6;;21347:65;;15094:205;15181:10;15212:56;15227:9;15238:10;15250:5;15257:10;15212:14;:56::i;13428:461::-;12523:8;;-1:-1:-1;;;;;12523:8:0;12509:10;:22;12501:46;;;;-1:-1:-1;;;12501:46:0;;;;;;;;;13512:15:::1;13544:9;-1:-1:-1::0;;;;;13530:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13530:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13530:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13530:37:0;;;;;;;;;13512:55:::0;-1:-1:-1;13582:6:0::1;13578:304;13596:10;13594:1;:12;13578:304;;;13643:36;::::0;-1:-1:-1;;;13643:36:0;;13627:13:::1;::::0;-1:-1:-1;;;;;13643:33:0;::::1;::::0;::::1;::::0;:36:::1;::::0;13677:1;;13643:36:::1;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13643:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13643:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13643:36:0;;;;;;;;;13627:52;;13694:20;13731:9;-1:-1:-1::0;;;;;13717:32:0::1;;13750:5;13717:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13717:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13717:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13717:39:0;;;;;;;;;-1:-1:-1::0;;;;;13771:12:0;;::::1;;::::0;;;:6:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;13771:19:0::1;13786:4;13771:19:::0;;::::1;::::0;;;13805:11:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;;13805::0;::::1;::::0;;;;;::::1;-1:-1:-1::0;;;;;;13805:23:0;;::::1;::::0;::::1;::::0;;;13843:20;;;:13:::1;:20:::0;;;;;:27;;;;::::1;;::::0;;;-1:-1:-1;13608:3:0::1;13578:304;;;;12558:1;13428:461:::0;:::o;19378:203::-;19443:17;19462:8;19504:32;19510:6;19518:5;19525:10;19504:5;:32::i;13990:976::-;14081:20;;14121:14;14129:5;14121:7;:14::i;:::-;-1:-1:-1;;;;;14121:28:0;;14113:50;;;;-1:-1:-1;;;14113:50:0;;;;;;;;;14191:4;;-1:-1:-1;;;;;14182:13:0;;;14191:4;;14182:13;;14174:42;;;;-1:-1:-1;;;14174:42:0;;;;;;;;;14249:1;14236:10;:14;:31;;;;;14266:1;14254:9;:13;14236:31;14227:70;;;;-1:-1:-1;;;14227:70:0;;;;;;;;;14308:19;14346:4;;14359:3;;14330:33;;-1:-1:-1;;;;;14346:4:0;;;;14352:5;;14359:3;;14330:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14330:33:0;14308:55;;14397:7;14374:32;;14417:22;14442:42;14460:5;14467:10;14479:4;14442:17;:42::i;:::-;14495:21;14537:4;;14417:67;;-1:-1:-1;14495:21:0;14519:40;;-1:-1:-1;;;;;14537:4:0;14543:9;14554:4;14519:17;:40::i;:::-;-1:-1:-1;;;;;14570:20:0;;;;;;;:13;:20;;;;;;;;:27;;;;;-1:-1:-1;;;;;;14570:27:0;;;;;;;;14608:11;27:10:-1;;14570:27:0;23:18:-1;;;45:23;;;14608::0;;;;;;;;;;;;;14642:12;;;:6;:12;;;;;:19;;-1:-1:-1;;14642:19:0;;;;;14672:11;:31;;;;;;14714:7;:12;;;;;;;14495:64;;-1:-1:-1;14750:67:0;14593:4;14495:64;14787:17;14806:10;14750:12;:67::i;:::-;14737:80;;14833:25;14841:5;14848:4;14854:3;14833:25;;;;;;;;;;;;;;;;;14874:62;14881:10;14893:16;14911:17;14930:5;14874:62;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;13990:976:0;;;;;:::o;11659:23::-;;;;:::o;16712:328::-;16778:12;16826:1;16812:11;:15;:39;;;;;16846:5;16831:11;:20;;16812:39;16803:62;;;;-1:-1:-1;;;16803:62:0;;;;;;;;;16876:11;16890:6;:4;:6::i;:::-;-1:-1:-1;;;;;16890:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16890:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16890:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16890:14:0;;;;;;;;;-1:-1:-1;;;;;16890:23:0;;16914:11;16934:14;16942:5;16934:7;:14::i;:::-;-1:-1:-1;;;;;16927:32:0;;16960:10;16927:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16927:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16927:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16927:44:0;;;;;;;;;16890:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16890:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16890:82:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16890:82:0;;;;;;;;;16876:96;;16983:27;16996:6;17004:5;16983:12;:27::i;:::-;-1:-1:-1;17028:4:0;;16712:328;-1:-1:-1;;;;16712:328:0:o;11530:15::-;;;-1:-1:-1;;;;;11530:15:0;;:::o;11776:19::-;;;;:::o;27614:91::-;27679:11;:18;27614:91;:::o;12986:434::-;12523:8;;-1:-1:-1;;;;;12523:8:0;12509:10;:22;12501:46;;;;-1:-1:-1;;;12501:46:0;;;;;;;;;13099:9:::1;-1:-1:-1::0;;;;;13085:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13085:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13085:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13085:38:0;;;;;;;;;13071:11;:52;;;;13162:9;-1:-1:-1::0;;;;;13148:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13148:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13148:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13148:38:0;;;;;;;;;13134:11;:52;;;;13223:9;-1:-1:-1::0;;;;;13209:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13209:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13209:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13209:36:0;;;;;;;;;13197:9;:48;;;;13282:9;-1:-1:-1::0;;;;;13268:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13268:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13268:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13268:36:0;;;;;;;;;13256:9;:48;;;;13339:9;-1:-1:-1::0;;;;;13325:32:0::1;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13325:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13325:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13325:34:0;;;;;;;;;13315:7;:44;;;;13393:9;-1:-1:-1::0;;;;;13379:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13379:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13379:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13379:33:0;;;;;;;;;13370:6;:42:::0;-1:-1:-1;12986:434:0:o;27487:119::-;-1:-1:-1;;;;;27578:20:0;;;27539;27578;;;:13;:20;;;;;;;;27487:119::o;11500:23::-;;;-1:-1:-1;;;;;11500:23:0;;:::o;12807:90::-;12523:8;;-1:-1:-1;;;;;12523:8:0;12509:10;:22;12501:46;;;;-1:-1:-1;;;12501:46:0;;;;;;;;;12874:3:::1;:15:::0;;-1:-1:-1;;;;;;12874:15:0::1;-1:-1:-1::0;;;;;12874:15:0;;;::::1;::::0;;;::::1;::::0;;12807:90::o;11802:18::-;;;;:::o;27713:94::-;27759:7;27785:11;27797:1;27785:14;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27785:14:0;;27713:94;-1:-1:-1;;27713:94:0:o;11474:19::-;;;-1:-1:-1;;;;;11474:19:0;;:::o;11748:21::-;;;;:::o;18134:743::-;18222:17;18251:20;18274:14;18282:5;18274:7;:14::i;:::-;18251:37;;18322:4;-1:-1:-1;;;;;18315:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18315:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18315:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18315:26:0;;;;;;;;;18307:5;:34;18299:55;;;;-1:-1:-1;;;18299:55:0;;;;;;;;;18366:16;18384:17;18403:18;18425:6;:4;:6::i;:::-;-1:-1:-1;;;;;18425:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18425:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18425:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18425:14:0;;;;;;;;;-1:-1:-1;;;;;18425:32:0;;18458:5;18465;18472:6;18425:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18425:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18425:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18425:54:0;;;;;;;;;18365:114;;;;;;18504:28;18520:11;18504;;:15;;:28;;;;:::i;:::-;18490:11;:42;18543:9;:14;;18556:1;18543:14;;;18568:66;18583:4;18589:5;18596:11;18609:12;18623:10;18568:14;:66::i;:::-;;18650:54;18659:10;18671:11;18684:12;18698:5;18650:54;;;;;;;;;;;;;;;;;;18715:57;18734:5;18741:12;18755:4;18761:10;18715:18;:57::i;:::-;18802:4;;18783:55;;-1:-1:-1;;;;;18802:4:0;18808:11;18821:4;18827:10;18783:18;:55::i;:::-;18856:13;18134:743;-1:-1:-1;;;;;;;18134:743:0:o;26007:593::-;26096:11;26122;;26119:474;;-1:-1:-1;;;;;26153:20:0;;26150:432;;26213:9;26202:7;:20;26193:43;;;;-1:-1:-1;;;26193:43:0;;;;;;;;;26263:5;-1:-1:-1;;;;;26255:19:0;26281:7;26255:38;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;26255:38:0;;26322:7;26313:16;;26150:432;;;26386:31;;-1:-1:-1;;;26386:31:0;;26370:13;;-1:-1:-1;;;;;26386:24:0;;;;;:31;;26411:5;;26386:31;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26386:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26386:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26386:31:0;;;;;;;;;26437:55;;-1:-1:-1;;;26437:55:0;;26370:47;;-1:-1:-1;;;;;;26437:27:0;;;;;:55;;26465:10;;26477:5;;26484:7;;26437:55;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26437:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26437:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26437:55:0;;;;;;;;;;26521:45;26557:8;26528:6;-1:-1:-1;;;;;26521:24:0;;26546:5;26521:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26521:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26521:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26521:31:0;;;;;;;;23535:496;23610:7;23619:9;23640:7;23662:4;-1:-1:-1;;;;;23650:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23650:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23650:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23650:27:0;;;;;;;;;23640:37;;23688:7;23710:4;-1:-1:-1;;;;;23698:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23698:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23698:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23698:28:0;;;;;;;;;23688:38;;23743:6;:4;:6::i;:::-;-1:-1:-1;;;;;23743:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23743:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23743:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23743:14:0;;;;;;;;;-1:-1:-1;;;;;23743:29:0;;23773:2;23777;23781;23743:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23743:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23743:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23743:41:0;;;;;;;;;23737:47;;23802:6;:4;:6::i;:::-;-1:-1:-1;;;;;23802:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23802:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23802:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23802:14:0;;;;;;;;;-1:-1:-1;;;;;23802:26:0;;23829:2;23833;23837;23802:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23802:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23802:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23802:38:0;;;;;;;;;23795:45;-1:-1:-1;;;;;;23851:33:0;;;23885:10;:2;23892;23885:10;:6;:10;:::i;:::-;23897;:2;23904;23897:10;:6;:10;:::i;:::-;23851:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23851:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23851:57:0;;;;23919:46;23938:4;23947;23944:2;:7;23953:4;23959:5;23919:18;:46::i;:::-;-1:-1:-1;;23535:496:0;;;;;:::o;12905:73::-;12967:3;;-1:-1:-1;;;;;12967:3:0;12905:73;:::o;26608:387::-;26732:11;;26729:259;;-1:-1:-1;;;;;26764:20:0;;26760:217;;26805:60;;-1:-1:-1;;;26805:60:0;;-1:-1:-1;;;;;26805:39:0;;;;;:60;;26845:10;;26857:7;;26805:60;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26805:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26805:60:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26805:60:0;;;;;;;;;;26760:217;;;26906:55;;-1:-1:-1;;;26906:55:0;;-1:-1:-1;;;;;26906:27:0;;;;;:55;;26934:5;;26941:10;;26953:7;;26906:55;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26906:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26906:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26906:55:0;;;;;;;;;;26760:217;26608:387;;;;:::o;15975:580::-;16085:11;16121:4;-1:-1:-1;;;;;16109:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16109:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16109:35:0;;;;16155:7;16165:41;16197:8;16177:4;-1:-1:-1;;;;;16165:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16165:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16165:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16165:27:0;;;;;;;;;:31;:41;:31;:41;:::i;:::-;16155:51;;16217:7;16227:43;16260:9;16239:4;-1:-1:-1;;;;;16227:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;16227:43:0;16281:61;;-1:-1:-1;;;16281:61:0;;16217:53;;-1:-1:-1;;;;;;16281:40:0;;;;;:61;;16322:8;;16332:9;;16281:61;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16281:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16281:61:0;;;;16412:6;:4;:6::i;:::-;-1:-1:-1;;;;;16412:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16412:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16412:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16412:14:0;;;;;;;;;-1:-1:-1;;;;;16412:29:0;;16442:9;16453:2;16457:8;16467:2;16412:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16412:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16412:58:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16412:58:0;;;;;;;;;16483:40;;-1:-1:-1;;;16483:40:0;;16403:67;;-1:-1:-1;;;;;;16483:23:0;;;;;:40;;16507:7;;16403:67;;16483:40;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16483:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;15975:580:0;;;;;;:::o;24039:495::-;24114:7;24123:9;24144:7;24166:4;-1:-1:-1;;;;;24154:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24154:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24154:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24154:28:0;;;;;;;;;24144:38;;24193:7;24215:4;-1:-1:-1;;;;;24203:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24203:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24203:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24203:27:0;;;;;;;;;24193:37;;24247:6;:4;:6::i;:::-;-1:-1:-1;;;;;24247:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24247:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24247:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24247:14:0;;;;;;;;;-1:-1:-1;;;;;24247:29:0;;24277:2;24281;24285;24247:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24247:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24247:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24247:41:0;;;;;;;;;24241:47;;24306:6;:4;:6::i;:::-;-1:-1:-1;;;;;24306:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24306:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24306:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24306:14:0;;;;;;;;;-1:-1:-1;;;;;24306:26:0;;24333:2;24337;24341;24306:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24306:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24306:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24306:38:0;;;;;;;;;24299:45;-1:-1:-1;;;;;;24355:33:0;;;24389:10;:2;24396;24389:10;:6;:10;:::i;:::-;24401;:2;24408;24401:10;:6;:10;:::i;:::-;24355:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24355:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24355:57:0;;;;24423:45;24442:4;24451;24448:2;:7;24457:4;24463;24423:18;:45::i;2784:114::-;2842:7;2869:21;2873:1;2876;2869:21;;;;;;;;;;;;;-1:-1:-1;;;2869:21:0;;;:3;:21::i;27003:354::-;27107:11;27133;;27130:220;;27177:29;;-1:-1:-1;;;27177:29:0;;27161:13;;-1:-1:-1;;;;;27177:24:0;;;;;:29;;27202:3;;27177:29;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27177:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27177:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27177:29:0;;;;;;;;;27222:48;;-1:-1:-1;;;27222:48:0;;27161:45;;-1:-1:-1;;;;;;27222:27:0;;;;;:48;;27250:5;;27257:3;;27262:7;;27222:48;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27222:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27222:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27222:48:0;;;;;;;;;;27295:43;27329:8;27302:6;-1:-1:-1;;;;;27295:24:0;;27320:3;27295:29;;;;;;;;;;;;;;;;:43;27286:52;27003:354;-1:-1:-1;;;;;;27003:354:0:o;2422:137::-;2474:4;2502:5;;;2525:6;;;;2518:14;;;18885:353;19016:12;19053:4;-1:-1:-1;;;;;19041:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19041:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19087:67:0;;-1:-1:-1;;;19087:67:0;;-1:-1:-1;;;;;19087:40:0;;;-1:-1:-1;19087:40:0;;-1:-1:-1;19087:67:0;;19128:11;;19141:12;;19087:67;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19087:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19165:43:0;;-1:-1:-1;;;19165:43:0;;-1:-1:-1;;;;;19165:26:0;;;-1:-1:-1;19165:26:0;;-1:-1:-1;19165:43:0;;19192:7;;19201:6;;19165:43;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19165:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19226:4:0;;18885:353;-1:-1:-1;;;;;;;;;18885:353:0:o;24542:451::-;24654:7;24651:335;;;24677:48;;-1:-1:-1;;;24677:48:0;;-1:-1:-1;;;;;24677:33:0;;;;;:48;;24711:7;;24720:4;;24677:48;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24677:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24677:48:0;;;;24651:335;;;24758:12;24773:6;:4;:6::i;:::-;-1:-1:-1;;;;;24773:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24773:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24773:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24773:14:0;;;;;;;;;-1:-1:-1;;;;;24773:38:0;;24812:4;24818:7;24773:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24773:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24773:53:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24773:53:0;;;;;;;;;24758:68;;24841:13;24857:6;:4;:6::i;:::-;-1:-1:-1;;;;;24857:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24857:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24857:14:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24857:14:0;;;;;;;;;-1:-1:-1;;;;;24857:38:0;;24896:4;24902;24857:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24857:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24857:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24857:50:0;;;;;;;;;24922:52;;-1:-1:-1;;;24922:52:0;;24841:66;;-1:-1:-1;;;;;;24922:33:0;;;;;:52;;24956:7;;24841:66;;24922:52;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24922:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24922:52:0;;;;24651:335;;24542:451;;;;:::o;2904:190::-;2990:7;3026:12;3018:6;;;;3010:29;;;;-1:-1:-1;;;3010:29:0;;;;;;;;;;-1:-1:-1;;;3062:5:0;;;2904:190::o;-1:-1:-1:-;;;;;;;;:::o;1306:241::-;;1410:2;1398:9;1389:7;1385:23;1381:32;1378:2;;;-1:-1;;1416:12;1378:2;85:6;72:20;97:33;124:5;97:33;;1554:263;;1669:2;1657:9;1648:7;1644:23;1640:32;1637:2;;;-1:-1;;1675:12;1637:2;226:6;220:13;238:33;265:5;238:33;;2374:257;;2486:2;2474:9;2465:7;2461:23;2457:32;2454:2;;;-1:-1;;2492:12;2454:2;805:6;799:13;817:30;841:5;817:30;;2936:241;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;-1:-1;;3046:12;3008:2;-1:-1;1095:20;;3002:175;-1:-1;3002:175;3184:263;;3299:2;3287:9;3278:7;3274:23;3270:32;3267:2;;;-1:-1;;3305:12;3267:2;-1:-1;1243:13;;3261:186;-1:-1;3261:186;3454:366;;;3575:2;3563:9;3554:7;3550:23;3546:32;3543:2;;;-1:-1;;3581:12;3543:2;1108:6;1095:20;3633:63;;3733:2;3776:9;3772:22;72:20;97:33;124:5;97:33;;;3741:63;;;;3537:283;;;;;;3827:491;;;;3965:2;3953:9;3944:7;3940:23;3936:32;3933:2;;;-1:-1;;3971:12;3933:2;1108:6;1095:20;4023:63;;4123:2;4166:9;4162:22;72:20;97:33;124:5;97:33;;;4131:63;-1:-1;4231:2;4270:22;;72:20;97:33;72:20;97:33;;;4239:63;;;;3927:391;;;;;;4325:507;;;;4471:2;4459:9;4450:7;4446:23;4442:32;4439:2;;;-1:-1;;4477:12;4839:485;;;;4974:2;4962:9;4953:7;4949:23;4945:32;4942:2;;;-1:-1;;4980:12;4942:2;1108:6;1095:20;5032:63;;5132:2;5172:9;5168:22;657:20;682:30;706:5;682:30;;5331:399;;;5463:2;5451:9;5442:7;5438:23;5434:32;5431:2;;;-1:-1;;5469:12;5431:2;-1:-1;;1243:13;;5632:2;5682:22;;;1243:13;;;;;-1:-1;5425:305;5737:491;;;;5875:2;5863:9;5854:7;5850:23;5846:32;5843:2;;;-1:-1;;5881:12;5843:2;1108:6;1095:20;5933:63;;6033:2;6076:9;6072:22;1095:20;6041:63;;6141:2;6184:9;6180:22;72:20;97:33;124:5;97:33;;6235:617;;;;;6390:3;6378:9;6369:7;6365:23;6361:33;6358:2;;;-1:-1;;6397:12;6358:2;1108:6;1095:20;6449:63;;6549:2;6592:9;6588:22;1095:20;6557:63;;6657:2;6700:9;6696:22;72:20;97:33;124:5;97:33;;;6665:63;-1:-1;6765:2;6804:22;;72:20;97:33;72:20;97:33;;;6352:500;;;;-1:-1;6352:500;;-1:-1;;6352:500;6859:535;;;;7008:2;6996:9;6987:7;6983:23;6979:32;6976:2;;;-1:-1;;7014:12;6976:2;1249:6;1243:13;7066:74;;7177:2;7231:9;7227:22;1243:13;7185:74;;7296:2;7350:9;7346:22;1243:13;7304:74;;6970:424;;;;;;10957:379;11321:10;11145:191;11343:222;-1:-1;;;;;23909:54;;;;7637:45;;11470:2;11455:18;;11441:124;12078:460;-1:-1;;;;;23909:54;;;7480:58;;23909:54;;;;12441:2;12426:18;;7637:45;12524:2;12509:18;;10908:37;;;;12269:2;12254:18;;12240:298;12545:365;-1:-1;;;;;23909:54;;;;7637:45;;12896:2;12881:18;;10908:37;12716:2;12701:18;;12687:223;12917:572;-1:-1;;;;;23909:54;;;;7480:58;;13309:2;13294:18;;10908:37;;;;13392:2;13377:18;;10908:37;13475:2;13460:18;;10908:37;13136:3;13121:19;;13107:382;13963:468;-1:-1;;;;;23909:54;;;7637:45;;23909:54;;;14322:2;14307:18;;7637:45;23909:54;;;14417:2;14402:18;;8008:62;14158:2;14143:18;;14129:302;14889:924;-1:-1;;;;;23909:54;;;7637:45;;23909:54;;;15365:2;15350:18;;7637:45;15448:2;15433:18;;10908:37;;;;15539:2;15524:18;;8161:58;;;;15622:3;15607:19;;10908:37;23920:42;15691:19;;10908:37;23909:54;;;15798:3;15783:19;;7480:58;15200:3;15185:19;;15171:642;17075:432;-1:-1;;;;;23909:54;;;;7637:45;;17416:2;17401:18;;10908:37;;;;23709:13;23702:21;17493:2;17478:18;;7879:34;17252:2;17237:18;;17223:284;18077:210;23709:13;;23702:21;7879:34;;18198:2;18183:18;;18169:118;18547:310;;18694:2;;18715:17;18708:47;8376:5;23073:12;23383:6;18694:2;18683:9;18679:18;23371:19;-1:-1;24908:101;24922:6;24919:1;24916:13;24908:101;;;24989:11;;;;;24983:18;24970:11;;;23411:14;24970:11;24963:39;24937:10;;24908:101;;;25024:6;25021:1;25018:13;25015:2;;;-1:-1;23411:14;25080:6;18683:9;25071:16;;25064:27;25015:2;-1:-1;25196:7;25180:14;-1:-1;;25176:28;8534:39;;;;23411:14;8534:39;;18665:192;-1:-1;;;18665:192;18864:416;19064:2;19078:47;;;8810:2;19049:18;;;23371:19;-1:-1;;;23411:14;;;8826:39;8884:12;;;19035:245;19287:416;19487:2;19501:47;;;9135:1;19472:18;;;23371:19;-1:-1;;;23411:14;;;9150:32;9201:12;;;19458:245;19710:416;19910:2;19924:47;;;9452:2;19895:18;;;23371:19;9488:26;23411:14;;;9468:47;9534:12;;;19881:245;20133:416;20333:2;20347:47;;;9785:1;20318:18;;;23371:19;-1:-1;;;23411:14;;;9800:31;9850:12;;;20304:245;20556:416;20756:2;20770:47;;;10101:2;20741:18;;;23371:19;10137:29;23411:14;;;10117:50;10186:12;;;20727:245;20979:416;21179:2;21193:47;;;10437:2;21164:18;;;23371:19;-1:-1;;;23411:14;;;10453:34;10506:12;;;21150:245;21402:222;10908:37;;;21529:2;21514:18;;21500:124;21631:333;10908:37;;;21950:2;21935:18;;10908:37;21786:2;21771:18;;21757:207;21971:444;10908:37;;;22318:2;22303:18;;10908:37;;;;22401:2;22386:18;;10908:37;22154:2;22139:18;;22125:290;22422:556;10908:37;;;22798:2;22783:18;;10908:37;;;;22881:2;22866:18;;10908:37;22964:2;22949:18;;10908:37;22633:3;22618:19;;22604:374;25217:117;-1:-1;;;;;23909:54;;25276:35;;25266:2;;25325:1;;25315:12;25266:2;25260:74;;25481:111;25562:5;23709:13;23702:21;25540:5;25537:32;25527:2;;25583:1;;25573:12

Swarm Source

ipfs://6c2a17678aaa877809175f89c7719f73d3d269cc79fb84d86de8207b993300aa

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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