Contract 0x8689D850CdF3b74A1F6A5eB60302c785B71c2fc7 3

 
Txn Hash Method
Block
From
To
Value
0x2b9591c24581442da7f09a011da7d9cabdb40deda7d28fe6419a41b080722563Approve134900572021-10-26 1:22:3217 hrs 22 mins ago0xca1b4cecc7fd201dc4fdb2bb91f4561592a20ace IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.004364883692.4
0x927131d831536922ad2186a6fe81af37f25dd2c28ae6bd362bcb4e9f43121d95Approve134847352021-10-25 5:35:151 day 13 hrs ago0x42efc04110ce421676248e73c00d01b00966849b IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.0033905049 71.773426619
0x2c2336b0a0d6de8aa6457861f0e761e5ccb1cdf4bd0b4f569f00b62810e3565aApprove134727132021-10-23 8:30:323 days 10 hrs ago0x259ef8583cefc8f017c3dc69f21645bce4e7f430 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.002318279256 49.075536239
0x6cee427786516f0e88692afa55c01080b3c61c960ccb68d5ea8b9fdd73384a48Approve134540722021-10-20 10:23:066 days 8 hrs ago0xcbc7c9f590d3522f91ad8af92b1469abab796332 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.001936815016 41.000339049
0xaf5892b6165db470f3dbbca763c6894512ea94a74f7476a2fcc0517a983494eaApprove134398062021-10-18 4:54:568 days 13 hrs ago0x441b30f781705583c198be681f177dea64484bfd IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.002786197761 58.980879384
0xc7cad376d260031cce36da1fd749bfdaeb30825db3aa465d5c8ceb91af7abf2eApprove134397762021-10-18 4:48:208 days 13 hrs ago0x1c0a31fe38a25abae792012701204160316029ee IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003361697371 71.163601512
0x7a013be36cb2d0e298676abde01e04295807c38cc6194ec3931bc4b1375a52a0Transfer134397722021-10-18 4:46:528 days 13 hrs ago0xb4900efcbfa8aa7d76e2cc09897a0ad304a2caaa IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.01944858753168.63585604
0xd5c945a1c96e9dcfa3e54f1e93435293c97aec19bc5c247186a1c4393df69527Approve134317892021-10-16 22:38:179 days 20 hrs ago0x2d07cef5769580e6f72c00ec86cacc42ec4e775d IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.002723952601 57.663214753
0xc0d699c723a9a9170aa420dbc58eee0da34407f695f4dfec62edcf58df606026Approve134201522021-10-15 3:03:4211 days 15 hrs ago0x21d2475f804b6627342863ef2866f8bb3b61a03e IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.0059237706125.4
0xfc1a20b0a7b0f4568596e46ab83629727fbb7f37ee57f4dad77c16cc1fc052b5Approve134172902021-10-14 16:01:2512 days 2 hrs ago0xe4cad3fc8477cde60b6c47d48717c633f61e8bb5 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.008533150163 180.637823903
0x1ce9b4a87358e2b02372d9d8274f4ed306a9692cf30dcfc2b502471ee660c99cApprove134150032021-10-14 7:27:1412 days 11 hrs ago0xe2b0ecc33f29c97e55a4debdd8e203c4a00a9041 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003727192171 78.90074243
0xb95f78828507de627096a21fbd09e45af52dab094a2ddd59d3b01f0b33dc97deApprove134149362021-10-14 7:12:5812 days 11 hrs ago0xe2b0ecc33f29c97e55a4debdd8e203c4a00a9041 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.005606290921 118.679288753
0x2ac040c64beaf022563cc73c666058147c51ff7179e35d32d8bd1c3d7dd968daApprove134149132021-10-14 7:06:0812 days 11 hrs ago0xcbc7c9f590d3522f91ad8af92b1469abab796332 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.004086173586.5
0x3210620532479f17a8941a700bb39e1d121889b5644947f471a9b96c811a5aa8Approve133968782021-10-11 10:56:3515 days 7 hrs ago0xcba7b24061ed3ff636aae8a28bcabb01a22d8213 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003959078664 83.809535869
0xd424b4542385f8dfdb62f74aeabd7fd97719af5c20019de920c77e336ae02e14Approve133968662021-10-11 10:53:1315 days 7 hrs ago0xcba7b24061ed3ff636aae8a28bcabb01a22d8213 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003786818784 80.162975176
0x4a27a4e4fc226ab46d6e9621374448b3a106d3953084d9a4b67e59eb819dd251Approve133884582021-10-10 3:15:2116 days 15 hrs ago0x6b2a6b3f54b6190faaac03879946e1764030d8f1 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003948497229 83.585537994
0x0953b76bf296a160a7223f27684fbb005884104ac7d35f325780c2303d037df3Approve133875572021-10-09 23:44:0216 days 19 hrs ago0x3d77e231e4739d9d05153332fe4a78c3350e33f4 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.003377588571.5
0x928762da0b16f5e2a9068f030372b74c59ddf4befab8b3a01120e53324bbb3bdApprove133744052021-10-07 22:14:4418 days 20 hrs ago0xe663d43f70d1b015c9ee373654ac29c734143f2e IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.004179908201 152.891773697
0x3844e170babe39970b95867906b56391d92b269ce89022ec924b2766da19acc3Approve133743862021-10-07 22:10:2218 days 20 hrs ago0xe663d43f70d1b015c9ee373654ac29c734143f2e IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.009065935975 191.916339783
0xc5ff4fda9112cf0895d892e8ebb8f31a062cdd3412ae34161b787c219eb9dcaaApprove133704532021-10-07 7:25:3919 days 11 hrs ago0xdeacbac69dea48271f74d0c60e2cedb78c221ff4 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.005463831508 115.66357265
0x696fa6c322b317f4397a578dba8eaccea067310e56731dfcef25eead4be3ee93Approve133382132021-10-02 6:18:1324 days 12 hrs ago0x82763315ddcbbabbb1ea26d56a14b9f83390512a IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.00268000283956.732844459
0x498e40d1897a3781c6626a2ba2dacdedb635e25bba2980ee8b20a7fbfbdd23f9Approve132887522021-09-24 13:27:0332 days 5 hrs ago0x356b72f151fd3aa34bf652ec661436869620fe17 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.00427118658990.41653272
0x91a4847b6d2fa2e392f368ba34024a79e7f38efd2718ce13bd4c60395c7f1ba7Approve132865492021-09-24 5:10:3332 days 13 hrs ago0x075b64082a45f69c5797abab26e6e30143a2a215 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.00211934311344.864267103
0x3ca21cb30d396049385adc85ae6942e316beadd21a17cf5bfd1e3c6d3ef07836Approve132751642021-09-22 10:56:0734 days 7 hrs ago0xfedad2de6df1ebed5d6d19084c75e91209221d5c IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.00190108377940.243946299
0x9f219c4a271e18800d49d080655bec6d74105decdccdfd1e2106f7f9e0a96776Approve132524082021-09-18 22:24:0037 days 20 hrs ago0x71393d471dcdc2d48d51da28d288220a4f22d630 IN  CRYPTO PHOENIX: $CPHX Token0 Ether0.002494219252.8
[ Download CSV Export 

OVERVIEW

Crypto Phoenix is a deflationary token hoping to provide an innovative holding mechanic through its high burn fee coupled with redistribution.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CRYPTOPHOENIX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-06
*/

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {return msg.sender;}
    function _msgData() internal view virtual returns (bytes calldata) {this; return msg.data;}
}
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked { require(b <= a, errorMessage); return a - b; }
    }
}
library Address {
    function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0;}
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");(bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {return functionCallWithValue(target, data, 0, errorMessage);}
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) { return returndata; } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {revert(errorMessage);}
        }
    }
}
abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "Only the previous owner can unlock onwership");
        require(block.timestamp > _lockTime , "The contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}
abstract contract Manageable is Context {
    address private _manager;
    event ManagementTransferred(address indexed previousManager, address indexed newManager);
    constructor(){
        address msgSender = _msgSender();
        _manager = msgSender;
        emit ManagementTransferred(address(0), msgSender);
    }
    function manager() public view returns(address){ return _manager; }
    modifier onlyManager(){
        require(_manager == _msgSender(), "Manageable: caller is not the manager");
        _;
    }
    function transferManagement(address newManager) external virtual onlyManager {
        emit ManagementTransferred(_manager, newManager);
        _manager = newManager;
    }
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
/**
 * Tokenomics:
 * 
 * Redistribution    2%
 * Burn             14%
 * Dev/Marketing     4%
 */

abstract contract Tokenomics {
    
    using SafeMath for uint256;
    
    string internal constant NAME = "CRYPTO PHOENIX";
    string internal constant SYMBOL = "$CPHX";
    
    uint16 internal constant FEES_DIVISOR = 10**3;
    uint8 internal constant DECIMALS = 18;
    uint256 internal constant ZEROES = 10**DECIMALS;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant TOTAL_SUPPLY = 1000000000000000 * ZEROES;
    uint256 internal _reflectedSupply = (MAX - (MAX % TOTAL_SUPPLY));

    uint256 internal constant maxTransactionAmount = TOTAL_SUPPLY / 40; // 2.5% of the total supply
    
    uint256 internal constant maxWalletBalance = TOTAL_SUPPLY / 20; // 5% of the total supply

    address internal dev1Address = 0x75d9ea6fAfdBEdB2Ce00B76622Aa0DF1B68CaaF6; 
    address internal dev2Address = 0x35EF633803aE3918f37571AF741bC39Ad11e3Eaa; 
    address internal dev3Address = 0xfdAF289C815701d2b1b7b34340af584A9fABD2D8;
    address internal dev4Address = 0x641E8274ce7513e2df215FcAD97515165019C497; 

    address internal burnAddress = 0x0000000000000000000000000000000000000000;

    enum FeeType { Antiwhale, Burn, Rfi, External, ExternalToETH }
    struct Fee {
        FeeType name;
        uint256 value;
        address recipient;
        uint256 total;
    }

    Fee[] internal fees;
    uint256 internal sumOfFees;

    constructor() {
        _addFees();
    }

    function _addFee(FeeType name, uint256 value, address recipient) private {
        fees.push( Fee(name, value, recipient, 0 ) );
        sumOfFees += value;
    }

    function _addFees() private {

        _addFee(FeeType.Rfi, 20, address(this) ); 

        _addFee(FeeType.Burn, 160, burnAddress );
        _addFee(FeeType.External, 10, dev1Address );
        _addFee(FeeType.External, 10, dev2Address );
        _addFee(FeeType.External, 10, dev3Address );
        _addFee(FeeType.External, 10, dev4Address );

    }

    function _getFeesCount() internal view returns (uint256){ return fees.length; }

    function _getFeeStruct(uint256 index) private view returns(Fee storage){
        require( index >= 0 && index < fees.length, "FeesSettings._getFeeStruct: Fee index out of bounds");
        return fees[index];
    }
    function _getFee(uint256 index) internal view returns (FeeType, uint256, address, uint256){
        Fee memory fee = _getFeeStruct(index);
        return ( fee.name, fee.value, fee.recipient, fee.total );
    }
    function _addFeeCollectedAmount(uint256 index, uint256 amount) internal {
        Fee storage fee = _getFeeStruct(index);
        fee.total = fee.total.add(amount);
    }

    function getCollectedFeeTotal(uint256 index) internal view returns (uint256){
        Fee memory fee = _getFeeStruct(index);
        return fee.total;
    }
}

abstract contract Presaleable is Manageable {
    bool internal isInPresale;
    function setPreseableEnabled(bool value) external onlyManager {
        isInPresale = value;
    }
}

abstract contract BaseRfiToken is IERC20, IERC20Metadata, Ownable, Presaleable, Tokenomics {

    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) internal _reflectedBalances;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _isExcludedFromRewards;
    address[] private _excluded;
    constructor(){
        
        _reflectedBalances[owner()] = _reflectedSupply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        _exclude(owner());
        _exclude(address(this));

        emit Transfer(address(0), owner(), TOTAL_SUPPLY);
        
    }
    
        function name() external pure override returns (string memory) { return NAME; }
        function symbol() external pure override returns (string memory) { return SYMBOL; }
        function decimals() external pure override returns (uint8) { return DECIMALS; }
        
        function totalSupply() external pure override returns (uint256) {
            return TOTAL_SUPPLY;
        }
        
        function balanceOf(address account) public view override returns (uint256){
            if (_isExcludedFromRewards[account]) return _balances[account];
            return tokenFromReflection(_reflectedBalances[account]);
        }
        
        function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(), recipient, amount);
            return true;
        }
        
        function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
        }
    
        function approve(address spender, uint256 amount) external override returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }
        
        function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

    function burn(uint256 amount) external {

        address sender = _msgSender();
        require(sender != address(0), "BaseRfiToken: burn from the zero address");
        require(sender != address(burnAddress), "BaseRfiToken: burn from the burn address");

        uint256 balance = balanceOf(sender);
        require(balance >= amount, "BaseRfiToken: burn amount exceeds balance");

        uint256 reflectedAmount = amount.mul(_getCurrentRate());

        _reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
        if (_isExcludedFromRewards[sender])
            _balances[sender] = _balances[sender].sub(amount);

        _burnTokens( sender, amount, reflectedAmount );
    }
    
    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

        _reflectedBalances[burnAddress] = _reflectedBalances[burnAddress].add(rBurn);
        if (_isExcludedFromRewards[burnAddress])
            _balances[burnAddress] = _balances[burnAddress].add(tBurn);

        emit Transfer(sender, burnAddress, tBurn);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcludedFromRewards[account];
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= TOTAL_SUPPLY, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount,0);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount,_getSumOfFees(_msgSender(), tAmount));
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) internal view returns(uint256) {
        require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
        uint256 currentRate = _getCurrentRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromRewards[account], "Account is not included");
        _exclude(account);
    }
    
    function _exclude(address account) internal {
        if(_reflectedBalances[account] > 0) {
            _balances[account] = tokenFromReflection(_reflectedBalances[account]);
        }
        _isExcludedFromRewards[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromRewards[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balances[account] = 0;
                _isExcludedFromRewards[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function setExcludedFromFee(address account, bool value) external onlyOwner { _isExcludedFromFee[account] = value; }
    function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; }
    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BaseRfiToken: approve from the zero address");
        require(spender != address(0), "BaseRfiToken: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function _isUnlimitedSender(address account) internal view returns(bool){
        return (account == owner());
    }

    function _isUnlimitedRecipient(address account) internal view returns(bool){
        return (account == owner() || account == burnAddress);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {

        require(sender != address(0), "BaseRfiToken: transfer from the zero address");
        require(recipient != address(0), "BaseRfiToken: transfer to the zero address");
        require(sender != address(burnAddress), "BaseRfiToken: transfer from the burn address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        bool takeFee = true;

        if ( isInPresale ){ takeFee = false; }
        else {

            if ( amount > maxTransactionAmount && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) ){
                revert("Transfer amount exceeds the maxTxAmount.");
            }

            if ( maxWalletBalance > 0 && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) && !_isV2Pair(recipient) ){
                uint256 recipientBalance = balanceOf(recipient);
                require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
            }
        }

        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; }

        _transferTokens(sender, recipient, amount, takeFee);
        
    }

    function _transferTokens(address sender, address recipient, uint256 amount, bool takeFee) private {
    
        uint256 sumOfFees = _getSumOfFees(sender, amount);
        if ( !takeFee ){ sumOfFees = 0; }
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, sumOfFees);
        
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(rAmount);
        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rTransferAmount);

        if (_isExcludedFromRewards[sender]){ _balances[sender] = _balances[sender].sub(tAmount); }
        if (_isExcludedFromRewards[recipient] ){ _balances[recipient] = _balances[recipient].add(tTransferAmount); }
        
        _takeFees( amount, currentRate, sumOfFees );
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _takeFees(uint256 amount, uint256 currentRate, uint256 sumOfFees ) private {
        if ( sumOfFees > 0 && !isInPresale ){
            _takeTransactionFees(amount, currentRate);
        }
    }
    
    function _getValues(uint256 tAmount, uint256 feesSum) internal view returns (uint256, uint256, uint256, uint256, uint256) {
        
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);
        uint256 currentRate = _getCurrentRate();
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTotalFees = tTotalFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTotalFees);
        
        return (rAmount, rTransferAmount, tAmount, tTransferAmount, currentRate);
    }
    
    function _getCurrentRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _reflectedSupply;
        uint256 tSupply = TOTAL_SUPPLY;  

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectedBalances[_excluded[i]] > rSupply || _balances[_excluded[i]] > tSupply) return (_reflectedSupply, TOTAL_SUPPLY);
            rSupply = rSupply.sub(_reflectedBalances[_excluded[i]]);
            tSupply = tSupply.sub(_balances[_excluded[i]]);
        }
        if (tSupply == 0 || rSupply < _reflectedSupply.div(TOTAL_SUPPLY)) return (_reflectedSupply, TOTAL_SUPPLY);
        return (rSupply, tSupply);
    }
    
    function _getSumOfFees(address sender, uint256 amount) internal view virtual returns (uint256);

    function _isV2Pair(address account) internal view virtual returns(bool);

    function _redistribute(uint256 amount, uint256 currentRate, uint256 fee, uint256 index) internal {
        uint256 tFee = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rFee = tFee.mul(currentRate);

        _reflectedSupply = _reflectedSupply.sub(rFee);
        _addFeeCollectedAmount(index, tFee);
    }

    function _takeTransactionFees(uint256 amount, uint256 currentRate) internal virtual;
}

abstract contract UniHelper is Ownable, Manageable {

    using SafeMath for uint256;

    uint256 private withdrawableBalance;

    enum Env {Testnet, MainnetV2, MainnetV3}
    Env private _env;

    address private _mainnetRouterV2Address = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IUniswapV2Router internal _router;
    address internal _pair;

    uint256 private maxTransactionAmount;

    event RouterSet(address indexed router);

    receive() external payable {}

    function initializeRouterPair(Env env, uint256 maxTx) internal {
        _env = env;
        _setRouterAddress(_mainnetRouterV2Address);

        maxTransactionAmount = maxTx;
    }

    function _setRouterAddress(address router) private {
        IUniswapV2Router _newUniswapRouter = IUniswapV2Router(router);
        _pair = IUniswapV2Factory(_newUniswapRouter.factory()).createPair(address(this), _newUniswapRouter.WETH());
        _router = _newUniswapRouter;
        emit RouterSet(router);
    }

    function setRouterAddress(address router) external onlyManager() {
        _setRouterAddress(router);
    }

    function _approveDelegate(address owner, address spender, uint256 amount) internal virtual;

}

abstract contract Antiwhale is Tokenomics {

    function _getAntiwhaleFees(uint256, uint256) internal view returns (uint256){
        return sumOfFees;
    }
}

abstract contract PhoenixAbstract is BaseRfiToken, UniHelper, Antiwhale {
    
    using SafeMath for uint256;

    constructor(Env _env){

        initializeRouterPair(_env, maxTransactionAmount);

        _exclude(_pair);
        _exclude(burnAddress);
    }
    
    function _isV2Pair(address account) internal view override returns(bool){
        return (account == _pair);
    }

    function _getSumOfFees(address sender, uint256 amount) internal view override returns (uint256){ 
        return _getAntiwhaleFees(balanceOf(sender), amount); 
    }
    
    function _takeTransactionFees(uint256 amount, uint256 currentRate) internal override {
        
        if( isInPresale ){ return; }

        uint256 feesCount = _getFeesCount();
        for (uint256 index = 0; index < feesCount; index++ ){
            (FeeType name, uint256 value, address recipient,) = _getFee(index);
            if ( value == 0 ) continue;

            if ( name == FeeType.Rfi ){
                _redistribute( amount, currentRate, value, index );
            }
            else if ( name == FeeType.Burn ){
                _burn( amount, currentRate, value, index );
            }
            else {
                _takeFee( amount, currentRate, value, recipient, index );
            }
        }
    }

    function _burn(uint256 amount, uint256 currentRate, uint256 fee, uint256 index) private {
        uint256 tBurn = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rBurn = tBurn.mul(currentRate);

        _burnTokens(address(this), tBurn, rBurn);
        _addFeeCollectedAmount(index, tBurn);
    }

    function _takeFee(uint256 amount, uint256 currentRate, uint256 fee, address recipient, uint256 index) private {

        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rAmount = tAmount.mul(currentRate);

        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rAmount);
        if(_isExcludedFromRewards[recipient])
            _balances[recipient] = _balances[recipient].add(tAmount);

        _addFeeCollectedAmount(index, tAmount);
    }
    
    function _approveDelegate(address owner, address spender, uint256 amount) internal override {
        _approve(owner, spender, amount);
    }
}

contract CRYPTOPHOENIX is PhoenixAbstract{

    constructor() PhoenixAbstract(Env.MainnetV2){
        _approve(owner(),address(_router), ~uint256(0));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagementTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPreseableEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062001726565b66038d7ea4c6800062000028919062001863565b60001962000037919062001998565b600019620000469190620018c4565b6004557375d9ea6fafdbedb2ce00b76622aa0df1b68caaf6600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507335ef633803ae3918f37571af741bc39ad11e3eaa600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fdaf289c815701d2b1b7b34340af584a9fabd2d8600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073641e8274ce7513e2df215fcad97515165019c497600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200024157600080fd5b5060016000620002566200068a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000620003066200068a60201b60201c565b905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a350620003b56200069260201b60201c565b600454600c6000620003cc620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f600062000420620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004e9620004dd620007bc60201b60201c565b620007e560201b60201c565b620004fa30620007e560201b60201c565b6200050a620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a62000569919062001726565b66038d7ea4c680006200057d919062001863565b6040516200058c919062001608565b60405180910390a3620005d78160286012600a620005ab919062001726565b66038d7ea4c68000620005bf919062001863565b620005cb919062001693565b6200098060201b60201c565b6200060a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007e560201b60201c565b6200063d600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007e560201b60201c565b506200068462000652620007bc60201b60201c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001962000a0f60201b60201c565b62001b42565b600033905090565b620006a7600260143062000be260201b60201c565b620006de600160a0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007156003600a600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b6200074c6003600a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007836003600a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007ba6003600a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115620008c2576200087e600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d5260201b60201c565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b81601360006101000a81548160ff02191690836002811115620009cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555062000a04601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000dd260201b60201c565b806016819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7990620015a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aec90620015e6565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bd5919062001608565b60405180910390a3505050565b600a604051806080016040528085600481111562000c29577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff0219169083600481111562000cd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505081600b600082825462000d46919062001636565b92505081905550505050565b600060045482111562000d9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9390620015c4565b60405180910390fd5b600062000dae6200103460201b60201c565b905062000dca81846200106e60201b62001fcd1790919060201c565b915050919050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e1e57600080fd5b505afa15801562000e33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e599190620014b2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ebc57600080fd5b505afa15801562000ed1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef79190620014b2565b6040518363ffffffff1660e01b815260040162000f1692919062001575565b602060405180830381600087803b15801562000f3157600080fd5b505af115801562000f46573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6c9190620014b2565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a25050565b6000806000620010496200108660201b60201c565b915091506200106781836200106e60201b62001fcd1790919060201c565b9250505090565b600081836200107e919062001693565b905092915050565b6000806000600454905060006012600a620010a2919062001726565b66038d7ea4c68000620010b6919062001863565b905060005b601180549050811015620013ef5782600c60006011848154811062001109577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200121f575081600d600060118481548110620011b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562001259576004546012600a62001238919062001726565b66038d7ea4c680006200124c919062001863565b945094505050506200147f565b62001317600c6000601184815481106200129c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200148360201b62001fe31790919060201c565b9250620013d7600d6000601184815481106200135c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836200148360201b62001fe31790919060201c565b91508080620013e6906200194a565b915050620010bb565b5060008114806200143d57506200143a6012600a6200140f919062001726565b66038d7ea4c6800062001423919062001863565b6004546200106e60201b62001fcd1790919060201c565b82105b1562001476576004546012600a62001456919062001726565b66038d7ea4c680006200146a919062001863565b9350935050506200147f565b81819350935050505b9091565b60008183620014939190620018c4565b905092915050565b600081519050620014ac8162001b28565b92915050565b600060208284031215620014c557600080fd5b6000620014d5848285016200149b565b91505092915050565b620014e981620018ff565b82525050565b6000620014fe602b8362001625565b91506200150b8262001a3b565b604082019050919050565b600062001525602a8362001625565b9150620015328262001a8a565b604082019050919050565b60006200154c60298362001625565b9150620015598262001ad9565b604082019050919050565b6200156f8162001933565b82525050565b60006040820190506200158c6000830185620014de565b6200159b6020830184620014de565b9392505050565b60006020820190508181036000830152620015bd81620014ef565b9050919050565b60006020820190508181036000830152620015df8162001516565b9050919050565b6000602082019050818103600083015262001601816200153d565b9050919050565b60006020820190506200161f600083018462001564565b92915050565b600082825260208201905092915050565b6000620016438262001933565b9150620016508362001933565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620016885762001687620019d0565b5b828201905092915050565b6000620016a08262001933565b9150620016ad8362001933565b925082620016c057620016bf620019ff565b5b828204905092915050565b6000808291508390505b60018511156200171d57808604811115620016f557620016f4620019d0565b5b6001851615620017055780820291505b8081029050620017158562001a2e565b9450620016d5565b94509492505050565b6000620017338262001933565b915062001740836200193d565b92506200176f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001777565b905092915050565b6000826200178957600190506200185c565b816200179957600090506200185c565b8160018114620017b25760028114620017bd57620017f3565b60019150506200185c565b60ff841115620017d257620017d1620019d0565b5b8360020a915084821115620017ec57620017eb620019d0565b5b506200185c565b5060208310610133831016604e8410600b84101617156200182d5782820a905083811115620018275762001826620019d0565b5b6200185c565b6200183c8484846001620016cb565b92509050818404811115620018565762001855620019d0565b5b81810290505b9392505050565b6000620018708262001933565b91506200187d8362001933565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620018b957620018b8620019d0565b5b828202905092915050565b6000620018d18262001933565b9150620018de8362001933565b925082821015620018f457620018f3620019d0565b5b828203905092915050565b60006200190c8262001913565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620019578262001933565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200198d576200198c620019d0565b5b600182019050919050565b6000620019a58262001933565b9150620019b28362001933565b925082620019c557620019c4620019ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b7f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a20617070726f766520746f20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b62001b3381620018ff565b811462001b3f57600080fd5b50565b6151048062001b526000396000f3fe6080604052600436106101bb5760003560e01c80636612e66f116100ec578063a457c2d71161008a578063dd46706411610064578063dd4670641461063d578063dd62ed3e14610666578063e4edf852146106a3578063f2fde38b146106cc576101c2565b8063a457c2d7146105ac578063a69df4b5146105e9578063a9059cbb14610600576101c2565b806374778cdc116100c657806374778cdc146104f057806388f82020146105195780638da5cb5b1461055657806395d89b4114610581576101c2565b80636612e66f1461047357806370a082311461049c578063715018a6146104d9576101c2565b806341cb87fc11610159578063481c6a7511610133578063481c6a75146103b757806352390c02146103e25780635342acb41461040b578063602bc62b14610448576101c2565b806341cb87fc1461032857806342966c68146103515780634549b0391461037a576101c2565b806323b872dd1161019557806323b872dd1461025a578063313ce567146102975780633685d419146102c257806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106f5565b6040516101e99190614398565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190613f1b565b610732565b604051610226919061437d565b60405180910390f35b34801561023b57600080fd5b50610244610750565b604051610251919061465a565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190613e90565b610777565b60405161028e919061437d565b60405180910390f35b3480156102a357600080fd5b506102ac610850565b6040516102b99190614675565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190613e02565b610859565b005b3480156102f757600080fd5b50610312600480360381019061030d9190613f1b565b610c40565b60405161031f919061437d565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613e02565b610cf3565b005b34801561035d57600080fd5b5061037860048036038101906103739190613f80565b610d96565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613fa9565b61109f565b6040516103ae919061465a565b60405180910390f35b3480156103c357600080fd5b506103cc611151565b6040516103d99190614339565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613e02565b61117b565b005b34801561041757600080fd5b50610432600480360381019061042d9190613e02565b6112a9565b60405161043f919061437d565b60405180910390f35b34801561045457600080fd5b5061045d6112ff565b60405161046a919061465a565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190613edf565b611309565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613e02565b6113f9565b6040516104d0919061465a565b60405180910390f35b3480156104e557600080fd5b506104ee6114e4565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613f57565b611637565b005b34801561052557600080fd5b50610540600480360381019061053b9190613e02565b6116eb565b60405161054d919061437d565b60405180910390f35b34801561056257600080fd5b5061056b611741565b6040516105789190614339565b60405180910390f35b34801561058d57600080fd5b5061059661176a565b6040516105a39190614398565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613f1b565b6117a7565b6040516105e0919061437d565b60405180910390f35b3480156105f557600080fd5b506105fe611874565b005b34801561060c57600080fd5b5061062760048036038101906106229190613f1b565b611a48565b604051610634919061437d565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613f80565b611a66565b005b34801561067257600080fd5b5061068d60048036038101906106889190613e54565b611c2d565b60405161069a919061465a565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613e02565b611cb4565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613e02565b611e0b565b005b60606040518060400160405280600e81526020017f43525950544f2050484f454e4958000000000000000000000000000000000000815250905090565b600061074661073f611ff9565b8484612001565b6001905092915050565b60006012600a6107609190614786565b66038d7ea4c6800061077291906148a4565b905090565b60006107848484846121cc565b61084584610790611ff9565b6108408560405180606001604052806028815260200161508260289139600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107f6611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e69092919063ffffffff16565b612001565b600190509392505050565b60006012905090565b610861611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e59061457a565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661097a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109719061449a565b60405180910390fd5b60005b601180549050811015610c3c578173ffffffffffffffffffffffffffffffffffffffff16601182815481106109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c295760116001601180549050610a3691906148fe565b81548110610a6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660118281548110610ad2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011805480610bef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610c3c565b8080610c34906149ba565b91505061097d565b5050565b6000610ce9610c4d611ff9565b84610ce485600e6000610c5e611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b612001565b6001905092915050565b610cfb611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145da565b60405180910390fd5b610d9381612651565b50565b6000610da0611ff9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e099061463a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a9061447a565b60405180910390fd5b6000610eae826113f9565b905082811015610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061453a565b60405180910390fd5b6000610f0f610f006128a5565b856128d090919063ffffffff16565b9050610f6381600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561108e5761104a84600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110998385836128e6565b50505050565b60006012600a6110af9190614786565b66038d7ea4c680006110c191906148a4565b831115611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa906144fa565b60405180910390fd5b81611124576000611115846000612b99565b5050505090508091505061114b565b60006111408461113b611135611ff9565b87612c56565b612b99565b505050915050809150505b92915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611183611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112079061457a565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061445a565b60405180910390fd5b6112a681612c72565b50565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b611311611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061457a565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561149457600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114df565b6114dc600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e04565b90505b919050565b6114ec611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61163f611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906145da565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f2443504858000000000000000000000000000000000000000000000000000000815250905090565b600061186a6117b4611ff9565b84611865856040518060600160405280602581526020016150aa60259139600e60006117de611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e69092919063ffffffff16565b612001565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906143fa565b60405180910390fd5b6002544211611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906143ba565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611a5c611a55611ff9565b84846121cc565b6001905092915050565b611a6e611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061457a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611ba991906146ac565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cbc611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d42906145da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e13611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e979061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061443a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611fdb9190614702565b905092915050565b60008183611ff191906148fe565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612068906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d89061461a565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121bf919061465a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561223c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612233906144ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39061455a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906144da565b60405180910390fd5b60008111612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061459a565b60405180910390fd5b600060019050600360149054906101000a900460ff16156123a45760009050612529565b60286012600a6123b49190614786565b66038d7ea4c680006123c691906148a4565b6123d09190614702565b821180156123e457506123e284612e72565b155b80156123f657506123f483612eb1565b155b15612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d9061451a565b60405180910390fd5b600060146012600a6124489190614786565b66038d7ea4c6800061245a91906148a4565b6124649190614702565b118015612477575061247584612e72565b155b8015612489575061248783612eb1565b155b801561249b575061249983612f48565b155b156125285760006124ab846113f9565b905060146012600a6124bd9190614786565b66038d7ea4c680006124cf91906148a4565b6124d99190614702565b83826124e591906146ac565b1115612526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251d906145ba565b60405180910390fd5b505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ca5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125d457600090505b6125e084848484612fa2565b50505050565b600083831115829061262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126259190614398565b60405180910390fd5b5082840390509392505050565b6000818361264991906146ac565b905092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561269c57600080fd5b505afa1580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190613e2b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561273657600080fd5b505afa15801561274a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276e9190613e2b565b6040518363ffffffff1660e01b815260040161278b929190614354565b602060405180830381600087803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613e2b565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a25050565b60008060006128b261334c565b915091506128c98183611fcd90919063ffffffff16565b9250505090565b600081836128de91906148a4565b905092915050565b61295a81600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b0d57612aa782600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b8c919061465a565b60405180910390a3505050565b600080600080600080612bcd6103e861ffff16612bbf898b6128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000612be4828a611fe390919063ffffffff16565b90506000612bf06128a5565b90506000612c07828c6128d090919063ffffffff16565b90506000612c1e83866128d090919063ffffffff16565b90506000612c358284611fe390919063ffffffff16565b905082818e87879a509a509a509a509a505050505050509295509295909350565b6000612c6a612c64846113f9565b83613716565b905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612d4657612d02600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e04565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600454821115612e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e429061441a565b60405180910390fd5b6000612e556128a5565b9050612e6a8184611fcd90919063ffffffff16565b915050919050565b6000612e7c611741565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000612ebb611741565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480612f415750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000612fae8584612c56565b905081612fba57600090505b6000806000806000612fcc8887612b99565b9450945094509450945061302885600c60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130bd84600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131e8576131a483600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d05761328c82600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6132db888288613723565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613338919061465a565b60405180910390a350505050505050505050565b6000806000600454905060006012600a6133669190614786565b66038d7ea4c6800061337891906148a4565b905060005b6011805490508110156136945782600c6000601184815481106133c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134dd575081600d600060118481548110613475577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613511576004546012600a6134f39190614786565b66038d7ea4c6800061350591906148a4565b94509450505050613712565b6135c7600c600060118481548110613552577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611fe390919063ffffffff16565b925061367f600d60006011848154811061360a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611fe390919063ffffffff16565b9150808061368c906149ba565b91505061337d565b5060008114806136d657506136d36012600a6136b09190614786565b66038d7ea4c680006136c291906148a4565b600454611fcd90919063ffffffff16565b82105b15613709576004546012600a6136ec9190614786565b66038d7ea4c680006136fe91906148a4565b935093505050613712565b81819350935050505b9091565b6000600b54905092915050565b6000811180156137405750600360149054906101000a900460ff16155b156137505761374f8383613755565b5b505050565b600360149054906101000a900460ff161561376f576138e9565b60006137796138ed565b905060005b818110156138e6576000806000613794846138fa565b5092509250925060008214156137ac575050506138d3565b600260048111156137e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b83600481111561381f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156138365761383187878487613a2d565b6138cf565b60016004811115613870577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8360048111156138a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156138c0576138bb87878487613aa0565b6138ce565b6138cd8787848488613b03565b5b5b5050505b80806138de906149ba565b91505061377e565b50505b5050565b6000600a80549050905090565b600080600080600061390b86613cd9565b6040518060800160405290816000820160009054906101000a900460ff166004811115613961577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481525050905080600001518160200151826040015183606001519450945094509450509193509193565b6000613a5a6103e861ffff16613a4c85886128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613a7185836128d090919063ffffffff16565b9050613a8881600454611fe390919063ffffffff16565b600481905550613a988383613d7d565b505050505050565b6000613acd6103e861ffff16613abf85886128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613ae485836128d090919063ffffffff16565b9050613af13083836128e6565b613afb8383613d7d565b505050505050565b6000613b306103e861ffff16613b2286896128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613b4786836128d090919063ffffffff16565b9050613b9b81600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cc657613c8282600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613cd08383613d7d565b50505050505050565b6000808210158015613cef5750600a8054905082105b613d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d25906145fa565b60405180910390fd5b600a8281548110613d68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600402019050919050565b6000613d8883613cd9565b9050613da182826003015461263b90919063ffffffff16565b8160030181905550505050565b600081359050613dbd8161503c565b92915050565b600081519050613dd28161503c565b92915050565b600081359050613de781615053565b92915050565b600081359050613dfc8161506a565b92915050565b600060208284031215613e1457600080fd5b6000613e2284828501613dae565b91505092915050565b600060208284031215613e3d57600080fd5b6000613e4b84828501613dc3565b91505092915050565b60008060408385031215613e6757600080fd5b6000613e7585828601613dae565b9250506020613e8685828601613dae565b9150509250929050565b600080600060608486031215613ea557600080fd5b6000613eb386828701613dae565b9350506020613ec486828701613dae565b9250506040613ed586828701613ded565b9150509250925092565b60008060408385031215613ef257600080fd5b6000613f0085828601613dae565b9250506020613f1185828601613dd8565b9150509250929050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dae565b9250506020613f4d85828601613ded565b9150509250929050565b600060208284031215613f6957600080fd5b6000613f7784828501613dd8565b91505092915050565b600060208284031215613f9257600080fd5b6000613fa084828501613ded565b91505092915050565b60008060408385031215613fbc57600080fd5b6000613fca85828601613ded565b9250506020613fdb85828601613dd8565b9150509250929050565b613fee81614932565b82525050565b613ffd81614944565b82525050565b600061400e82614690565b614018818561469b565b9350614028818560208601614987565b61403181614a61565b840191505092915050565b6000614049601c8361469b565b915061405482614a7f565b602082019050919050565b600061406c602b8361469b565b915061407782614aa8565b604082019050919050565b600061408f602c8361469b565b915061409a82614af7565b604082019050919050565b60006140b2602a8361469b565b91506140bd82614b46565b604082019050919050565b60006140d560268361469b565b91506140e082614b95565b604082019050919050565b60006140f860178361469b565b915061410382614be4565b602082019050919050565b600061411b60288361469b565b915061412682614c0d565b604082019050919050565b600061413e60178361469b565b915061414982614c5c565b602082019050919050565b6000614161602c8361469b565b915061416c82614c85565b604082019050919050565b6000614184602c8361469b565b915061418f82614cd4565b604082019050919050565b60006141a7601f8361469b565b91506141b282614d23565b602082019050919050565b60006141ca60288361469b565b91506141d582614d4c565b604082019050919050565b60006141ed60298361469b565b91506141f882614d9b565b604082019050919050565b6000614210602a8361469b565b915061421b82614dea565b604082019050919050565b600061423360208361469b565b915061423e82614e39565b602082019050919050565b600061425660298361469b565b915061426182614e62565b604082019050919050565b6000614279602d8361469b565b915061428482614eb1565b604082019050919050565b600061429c60258361469b565b91506142a782614f00565b604082019050919050565b60006142bf60338361469b565b91506142ca82614f4f565b604082019050919050565b60006142e260298361469b565b91506142ed82614f9e565b604082019050919050565b600061430560288361469b565b915061431082614fed565b604082019050919050565b61432481614970565b82525050565b6143338161497a565b82525050565b600060208201905061434e6000830184613fe5565b92915050565b60006040820190506143696000830185613fe5565b6143766020830184613fe5565b9392505050565b60006020820190506143926000830184613ff4565b92915050565b600060208201905081810360008301526143b28184614003565b905092915050565b600060208201905081810360008301526143d38161403c565b9050919050565b600060208201905081810360008301526143f38161405f565b9050919050565b6000602082019050818103600083015261441381614082565b9050919050565b60006020820190508181036000830152614433816140a5565b9050919050565b60006020820190508181036000830152614453816140c8565b9050919050565b60006020820190508181036000830152614473816140eb565b9050919050565b600060208201905081810360008301526144938161410e565b9050919050565b600060208201905081810360008301526144b381614131565b9050919050565b600060208201905081810360008301526144d381614154565b9050919050565b600060208201905081810360008301526144f381614177565b9050919050565b600060208201905081810360008301526145138161419a565b9050919050565b60006020820190508181036000830152614533816141bd565b9050919050565b60006020820190508181036000830152614553816141e0565b9050919050565b6000602082019050818103600083015261457381614203565b9050919050565b6000602082019050818103600083015261459381614226565b9050919050565b600060208201905081810360008301526145b381614249565b9050919050565b600060208201905081810360008301526145d38161426c565b9050919050565b600060208201905081810360008301526145f38161428f565b9050919050565b60006020820190508181036000830152614613816142b2565b9050919050565b60006020820190508181036000830152614633816142d5565b9050919050565b60006020820190508181036000830152614653816142f8565b9050919050565b600060208201905061466f600083018461431b565b92915050565b600060208201905061468a600083018461432a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006146b782614970565b91506146c283614970565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146f7576146f6614a03565b5b828201905092915050565b600061470d82614970565b915061471883614970565b92508261472857614727614a32565b5b828204905092915050565b6000808291508390505b600185111561477d5780860481111561475957614758614a03565b5b60018516156147685780820291505b808102905061477685614a72565b945061473d565b94509492505050565b600061479182614970565b915061479c8361497a565b92506147c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846147d1565b905092915050565b6000826147e1576001905061489d565b816147ef576000905061489d565b8160018114614805576002811461480f5761483e565b600191505061489d565b60ff84111561482157614820614a03565b5b8360020a91508482111561483857614837614a03565b5b5061489d565b5060208310610133831016604e8410600b84101617156148735782820a90508381111561486e5761486d614a03565b5b61489d565b6148808484846001614733565b9250905081840481111561489757614896614a03565b5b81810290505b9392505050565b60006148af82614970565b91506148ba83614970565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148f3576148f2614a03565b5b828202905092915050565b600061490982614970565b915061491483614970565b92508282101561492757614926614a03565b5b828203905092915050565b600061493d82614950565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156149a557808201518184015260208101905061498a565b838111156149b4576000848401525b50505050565b60006149c582614970565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f8576149f7614a03565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f54686520636f6e7472616374206973207374696c6c206c6f636b656400000000600082015250565b7f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f6e6c79207468652070726576696f7573206f776e65722063616e20756e6c6f60008201527f636b206f6e776572736869700000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420696e636c75646564000000000000000000600082015250565b7f42617365526669546f6b656e3a206275726e2066726f6d20746865206275726e60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060008201527f6275726e20616464726573730000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a206275726e20616d6f756e742065786365656460008201527f732062616c616e63650000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a207472616e7366657220746f20746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65772062616c616e636520776f756c642065786365656420746865206d617860008201527f57616c6c657442616c616e636500000000000000000000000000000000000000602082015250565b7f4d616e61676561626c653a2063616c6c6572206973206e6f7420746865206d6160008201527f6e61676572000000000000000000000000000000000000000000000000000000602082015250565b7f4665657353657474696e67732e5f6765744665655374727563743a204665652060008201527f696e646578206f7574206f6620626f756e647300000000000000000000000000602082015250565b7f42617365526669546f6b656e3a20617070726f766520746f20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a206275726e2066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b61504581614932565b811461505057600080fd5b50565b61505c81614944565b811461506757600080fd5b50565b61507381614970565b811461507e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220529b713f1721b8d3a0a45a787a27d4a56ae4b5d5189660a93fdbc1d97471e52964736f6c63430008040033

Deployed ByteCode Sourcemap

26349:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12225:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13257:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12506:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13452:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12407:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16781:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14882:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23659:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13790:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15534:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6938:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16304:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17414:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5960:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17292:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12636:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5556:148;;;;;;;;;;;;;:::i;:::-;;11240:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15393:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5346:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12314:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15112:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6288:311;;;;;;;;;;;;;:::i;:::-;;12889:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6056:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13089:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7144:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5710:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12225:79;12273:13;12297:4;;;;;;;;;;;;;;;;;12290:11;;12225:79;:::o;13257:175::-;13334:4;13355:39;13364:12;:10;:12::i;:::-;13378:7;13387:6;13355:8;:39::i;:::-;13416:4;13409:11;;13257:175;;;;:::o;12506:110::-;12561:7;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;12585:19;;12506:110;:::o;13452:330::-;13552:4;13572:36;13582:6;13590:9;13601:6;13572:9;:36::i;:::-;13623:121;13632:6;13640:12;:10;:12::i;:::-;13654:89;13692:6;13654:89;;;;;;;;;;;;;;;;;:11;:19;13666:6;13654:19;;;;;;;;;;;;;;;:33;13674:12;:10;:12::i;:::-;13654:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13623:8;:121::i;:::-;13766:4;13759:11;;13452:330;;;;;:::o;12407:79::-;12459:5;8558:2;12468:15;;12407:79;:::o;16781:499::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16863:22:::1;:31;16886:7;16863:31;;;;;;;;;;;;;;;;;;;;;;;;;16855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16938:9;16933:340;16957:9;:16;;;;16953:1;:20;16933:340;;;17015:7;16999:23;;:9;17009:1;16999:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;16995:267;;;17058:9;17087:1;17068:9;:16;;;;:20;;;;:::i;:::-;17058:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:9;17053:1;17043:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17129:1;17108:9;:18;17118:7;17108:18;;;;;;;;;;;;;;;:22;;;;17183:5;17149:22;:31;17172:7;17149:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17207:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17241:5;;16995:267;16975:3;;;;;:::i;:::-;;;;16933:340;;;;16781:499:::0;:::o;14882:218::-;14970:4;14987:83;14996:12;:10;:12::i;:::-;15010:7;15019:50;15058:10;15019:11;:25;15031:12;:10;:12::i;:::-;15019:25;;;;;;;;;;;;;;;:34;15045:7;15019:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14987:8;:83::i;:::-;15088:4;15081:11;;14882:218;;;;:::o;23659:109::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23735:25:::1;23753:6;23735:17;:25::i;:::-;23659:109:::0;:::o;13790:722::-;13842:14;13859:12;:10;:12::i;:::-;13842:29;;13908:1;13890:20;;:6;:20;;;;13882:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13992:11;;;;;;;;;;;13974:30;;:6;:30;;;;13966:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;14062:15;14080:17;14090:6;14080:9;:17::i;:::-;14062:35;;14127:6;14116:7;:17;;14108:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14192:23;14218:29;14229:17;:15;:17::i;:::-;14218:6;:10;;:29;;;;:::i;:::-;14192:55;;14289:47;14320:15;14289:18;:26;14308:6;14289:26;;;;;;;;;;;;;;;;:30;;:47;;;;:::i;:::-;14260:18;:26;14279:6;14260:26;;;;;;;;;;;;;;;:76;;;;14351:22;:30;14374:6;14351:30;;;;;;;;;;;;;;;;;;;;;;;;;14347:98;;;14416:29;14438:6;14416:9;:17;14426:6;14416:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;14396:9;:17;14406:6;14396:17;;;;;;;;;;;;;;;:49;;;;14347:98;14458:46;14471:6;14479;14487:15;14458:11;:46::i;:::-;13790:722;;;;:::o;15534:480::-;15626:7;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;15654:7;:23;;15646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15729:17;15724:283;;15764:15;15787:21;15798:7;15806:1;15787:10;:21::i;:::-;15763:45;;;;;;15830:7;15823:14;;;;;15724:283;15872:23;15902:56;15913:7;15921:36;15935:12;:10;:12::i;:::-;15949:7;15921:13;:36::i;:::-;15902:10;:56::i;:::-;15870:88;;;;;;15980:15;15973:22;;;15534:480;;;;;:::o;6938:67::-;6977:7;6994:8;;;;;;;;;;;6987:15;;6938:67;:::o;16304:180::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16389:22:::1;:31;16412:7;16389:31;;;;;;;;;;;;;;;;;;;;;;;;;16388:32;16380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16459:17;16468:7;16459:8;:17::i;:::-;16304:180:::0;:::o;17414:109::-;17478:4;17493:18;:27;17512:7;17493:27;;;;;;;;;;;;;;;;;;;;;;;;;17486:34;;17414:109;;;:::o;5960:90::-;6006:7;6033:9;;6026:16;;5960:90;:::o;17292:116::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17400:5:::1;17370:18;:27;17389:7;17370:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;17292:116:::0;;:::o;12636:233::-;12702:7;12729:22;:31;12752:7;12729:31;;;;;;;;;;;;;;;;;;;;;;;;;12725:62;;;12769:9;:18;12779:7;12769:18;;;;;;;;;;;;;;;;12762:25;;;;12725:62;12809:48;12829:18;:27;12848:7;12829:27;;;;;;;;;;;;;;;;12809:19;:48::i;:::-;12802:55;;12636:233;;;;:::o;5556:148::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5663:1:::1;5626:40;;5647:6;::::0;::::1;;;;;;;;5626:40;;;;;;;;;;;;5694:1;5677:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5556:148::o:0;11240:100::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11327:5:::1;11313:11;;:19;;;;;;;;;;;;;;;;;;11240:100:::0;:::o;15393:133::-;15463:4;15487:22;:31;15510:7;15487:31;;;;;;;;;;;;;;;;;;;;;;;;;15480:38;;15393:133;;;:::o;5346:79::-;5384:7;5411:6;;;;;;;;;;;5404:13;;5346:79;:::o;12314:83::-;12364:13;12388:6;;;;;;;;;;;;;;;;;12381:13;;12314:83;:::o;15112:269::-;15205:4;15222:129;15231:12;:10;:12::i;:::-;15245:7;15254:96;15293:15;15254:96;;;;;;;;;;;;;;;;;:11;:25;15266:12;:10;:12::i;:::-;15254:25;;;;;;;;;;;;;;;:34;15280:7;15254:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15222:8;:129::i;:::-;15369:4;15362:11;;15112:269;;;;:::o;6288:311::-;6358:10;6340:28;;:14;;;;;;;;;;;:28;;;6332:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:9;;6436:15;:27;6428:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:14;;;;;;;;;;;6513:44;;6534:6;;;;;;;;;;6513:44;;;;;;;;;;;;6577:14;;;;;;;;;;;6568:6;;:23;;;;;;;;;;;;;;;;;;6288:311::o;12889:180::-;12969:4;12989:42;12999:12;:10;:12::i;:::-;13013:9;13024:6;12989:9;:42::i;:::-;13053:4;13046:11;;12889:180;;;;:::o;6056:226::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6137:6:::1;::::0;::::1;;;;;;;;6120:14;;:23;;;;;;;;;;;;;;;;;;6171:1;6154:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6214:4;6196:15;:22;;;;:::i;:::-;6184:9;:34;;;;6271:1;6234:40;;6255:6;::::0;::::1;;;;;;;;6234:40;;;;;;;;;;;;6056:226:::0;:::o;13089:152::-;13172:7;13202:11;:18;13214:5;13202:18;;;;;;;;;;;;;;;:27;13221:7;13202:27;;;;;;;;;;;;;;;;13195:34;;13089:152;;;;:::o;7144:176::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7269:10:::1;7237:43;;7259:8;;;;;;;;;;;7237:43;;;;;;;;;;;;7302:10;7291:8;;:21;;;;;;;;;;;;;;;;;;7144:176:::0;:::o;5710:244::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5819:1:::1;5799:22;;:8;:22;;;;5791:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5909:8;5880:38;;5901:6;::::0;::::1;;;;;;;;5880:38;;;;;;;;;;;;5938:8;5929:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5710:244:::0;:::o;1469:82::-;1527:7;1548:1;1544;:5;;;;:::i;:::-;1537:12;;1469:82;;;;:::o;1293:::-;1351:7;1372:1;1368;:5;;;;:::i;:::-;1361:12;;1293:82;;;;:::o;997:::-;1050:7;1067:10;1060:17;;997:82;:::o;17535:352::-;17646:1;17629:19;;:5;:19;;;;17621:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17734:1;17715:21;;:7;:21;;;;17707:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17825:6;17795:11;:18;17807:5;17795:18;;;;;;;;;;;;;;;:27;17814:7;17795:27;;;;;;;;;;;;;;;:36;;;;17863:7;17847:32;;17856:5;17847:32;;;17872:6;17847:32;;;;;;:::i;:::-;;;;;;;;17535:352;;;:::o;18180:1269::-;18297:1;18279:20;;:6;:20;;;;18271:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18388:1;18367:23;;:9;:23;;;;18359:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;18474:11;;;;;;;;;;;18456:30;;:6;:30;;;;18448:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;18563:1;18554:6;:10;18546:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18631:12;18646:4;18631:19;;18668:11;;;;;;;;;;;18663:610;;;18693:5;18683:15;;18663:610;;;8886:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8871:17;;;;:::i;:::-;18738:6;:29;:60;;;;;18772:26;18791:6;18772:18;:26::i;:::-;18771:27;18738:60;:97;;;;;18803:32;18825:9;18803:21;:32::i;:::-;18802:33;18738:97;18733:189;;;18856:50;;;;;;;;;;:::i;:::-;;;;;;;;18733:189;18962:1;8989:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8974:17;;;;:::i;:::-;18943:20;:51;;;;;18968:26;18987:6;18968:18;:26::i;:::-;18967:27;18943:51;:88;;;;;18999:32;19021:9;18999:21;:32::i;:::-;18998:33;18943:88;:113;;;;;19036:20;19046:9;19036;:20::i;:::-;19035:21;18943:113;18938:324;;;19077:24;19104:20;19114:9;19104;:20::i;:::-;19077:47;;8989:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8974:17;;;;:::i;:::-;19170:6;19151:16;:25;;;;:::i;:::-;:45;;19143:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;18938:324;;18663:610;19288:18;:26;19307:6;19288:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;19318:18;:29;19337:9;19318:29;;;;;;;;;;;;;;;;;;;;;;;;;19288:59;19285:83;;;19360:5;19350:15;;19285:83;19380:51;19396:6;19404:9;19415:6;19423:7;19380:15;:51::i;:::-;18180:1269;;;;:::o;1645:171::-;1731:7;1776:1;1771;:6;;1779:12;1763:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1805:1;1801;:5;1794:12;;1645:171;;;;;:::o;1205:82::-;1263:7;1284:1;1280;:5;;;;:::i;:::-;1273:12;;1205:82;;;;:::o;23332:319::-;23394:34;23448:6;23394:61;;23492:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23474:57;;;23540:4;23547:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23474:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23466:5;;:106;;;;;;;;;;;;;;;;;;23593:17;23583:7;;:27;;;;;;;;;;;;;;;;;;23636:6;23626:17;;;;;;;;;;;;23332:319;;:::o;21184:171::-;21233:7;21254:15;21271;21290:19;:17;:19::i;:::-;21253:56;;;;21327:20;21339:7;21327;:11;;:20;;;;:::i;:::-;21320:27;;;;21184:171;:::o;1381:82::-;1439:7;1460:1;1456;:5;;;;:::i;:::-;1449:12;;1381:82;;;;:::o;14524:350::-;14647:42;14683:5;14647:18;:31;14666:11;;;;;;;;;;;14647:31;;;;;;;;;;;;;;;;:35;;:42;;;;:::i;:::-;14613:18;:31;14632:11;;;;;;;;;;;14613:31;;;;;;;;;;;;;;;:76;;;;14704:22;:35;14727:11;;;;;;;;;;;14704:35;;;;;;;;;;;;;;;;;;;;;;;;;14700:112;;;14779:33;14806:5;14779:9;:22;14789:11;;;;;;;;;;;14779:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;14754:9;:22;14764:11;;;;;;;;;;;14754:22;;;;;;;;;;;;;;;:58;;;;14700:112;14847:11;;;;;;;;;;;14830:36;;14839:6;14830:36;;;14860:5;14830:36;;;;;;:::i;:::-;;;;;;;;14524:350;;;:::o;20587:585::-;20664:7;20673;20682;20691;20700;20730:18;20751:38;8511:5;20751:38;;:20;20763:7;20751;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;20730:59;;20800:23;20826;20838:10;20826:7;:11;;:23;;;;:::i;:::-;20800:49;;20860:19;20882:17;:15;:17::i;:::-;20860:39;;20910:15;20928:24;20940:11;20928:7;:11;;:24;;;;:::i;:::-;20910:42;;20963:18;20984:27;20999:11;20984:10;:14;;:27;;;;:::i;:::-;20963:48;;21022:23;21048;21060:10;21048:7;:11;;:23;;;;:::i;:::-;21022:49;;21100:7;21109:15;21126:7;21135:15;21152:11;21092:72;;;;;;;;;;;;;;;;20587:585;;;;;;;;:::o;24451:167::-;24538:7;24565:44;24583:17;24593:6;24583:9;:17::i;:::-;24602:6;24565:17;:44::i;:::-;24558:51;;24451:167;;;;:::o;16496:277::-;16584:1;16554:18;:27;16573:7;16554:27;;;;;;;;;;;;;;;;:31;16551:132;;;16623:48;16643:18;:27;16662:7;16643:27;;;;;;;;;;;;;;;;16623:19;:48::i;:::-;16602:9;:18;16612:7;16602:18;;;;;;;;;;;;;;;:69;;;;16551:132;16727:4;16693:22;:31;16716:7;16693:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;16742:9;16757:7;16742:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16496:277;:::o;16022:270::-;16090:7;16129:16;;16118:7;:27;;16110:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;16203:19;16225:17;:15;:17::i;:::-;16203:39;;16260:24;16272:11;16260:7;:11;;:24;;;;:::i;:::-;16253:31;;;16022:270;;;:::o;17899:118::-;17966:4;18001:7;:5;:7::i;:::-;17990:18;;:7;:18;;;17982:27;;17899:118;;;:::o;18025:147::-;18095:4;18130:7;:5;:7::i;:::-;18119:18;;:7;:18;;;:44;;;;18152:11;;;;;;;;;;;18141:22;;:7;:22;;;18119:44;18111:53;;18025:147;;;:::o;24327:116::-;24394:4;24429:5;;;;;;;;;;;24418:16;;:7;:16;;;24410:25;;24327:116;;;:::o;19457:900::-;19572:17;19592:29;19606:6;19614;19592:13;:29::i;:::-;19572:49;;19638:7;19632:33;;19661:1;19649:13;;19632:33;19686:15;19703:23;19728:15;19745:23;19770:19;19794:29;19805:6;19813:9;19794:10;:29::i;:::-;19685:138;;;;;;;;;;19873:39;19904:7;19873:18;:26;19892:6;19873:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;19844:18;:26;19863:6;19844:26;;;;;;;;;;;;;;;:68;;;;19955:50;19989:15;19955:18;:29;19974:9;19955:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;19923:18;:29;19942:9;19923:29;;;;;;;;;;;;;;;:82;;;;20022:22;:30;20045:6;20022:30;;;;;;;;;;;;;;;;;;;;;;;;;20018:90;;;20075:30;20097:7;20075:9;:17;20085:6;20075:17;;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;20055:9;:17;20065:6;20055:17;;;;;;;;;;;;;;;:50;;;;20018:90;20122:22;:33;20145:9;20122:33;;;;;;;;;;;;;;;;;;;;;;;;;20118:108;;;20182:41;20207:15;20182:9;:20;20192:9;20182:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;20159:9;:20;20169:9;20159:20;;;;;;;;;;;;;;;:64;;;;20118:108;20246:43;20257:6;20265:11;20278:9;20246;:43::i;:::-;20322:9;20305:44;;20314:6;20305:44;;;20333:15;20305:44;;;;;;:::i;:::-;;;;;;;;19457:900;;;;;;;;;;:::o;21367:658::-;21418:7;21427;21447:15;21465:16;;21447:34;;21492:15;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21492:30;;21542:9;21537:329;21561:9;:16;;;;21557:1;:20;21537:329;;;21638:7;21603:18;:32;21622:9;21632:1;21622:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21603:32;;;;;;;;;;;;;;;;:42;:79;;;;21675:7;21649:9;:23;21659:9;21669:1;21659:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21649:23;;;;;;;;;;;;;;;;:33;21603:79;21599:124;;;21692:16;;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21684:39;;;;;;;;;21599:124;21748:45;21760:18;:32;21779:9;21789:1;21779:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21760:32;;;;;;;;;;;;;;;;21748:7;:11;;:45;;;;:::i;:::-;21738:55;;21818:36;21830:9;:23;21840:9;21850:1;21840:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21830:23;;;;;;;;;;;;;;;;21818:7;:11;;:36;;;;:::i;:::-;21808:46;;21579:3;;;;;:::i;:::-;;;;21537:329;;;;21891:1;21880:7;:12;:60;;;;21906:34;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21906:16;;:20;;:34;;;;:::i;:::-;21896:7;:44;21880:60;21876:105;;;21950:16;;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21942:39;;;;;;;;21876:105;22000:7;22009;21992:25;;;;;;21367:658;;;:::o;23927:111::-;23995:7;24021:9;;24014:16;;23927:111;;;;:::o;20369:206::-;20481:1;20469:9;:13;:29;;;;;20487:11;;;;;;;;;;;20486:12;20469:29;20464:104;;;20515:41;20536:6;20544:11;20515:20;:41::i;:::-;20464:104;20369:206;;;:::o;24630:745::-;24740:11;;;;;;;;;;;24736:28;;;24755:7;;24736:28;24776:17;24796:15;:13;:15::i;:::-;24776:35;;24827:13;24822:546;24854:9;24846:5;:17;24822:546;;;24890:12;24904:13;24919:17;24941:14;24949:5;24941:7;:14::i;:::-;24889:66;;;;;;;24984:1;24975:5;:10;24970:26;;;24988:8;;;;;24970:26;25026:11;25018:19;;;;;;;;;;;;;;;;:4;:19;;;;;;;;;;;;;;;;;25013:344;;;25058:50;25073:6;25081:11;25094:5;25101;25058:13;:50::i;:::-;25013:344;;;25156:12;25148:20;;;;;;;;;;;;;;;;:4;:20;;;;;;;;;;;;;;;;;25143:214;;;25189:42;25196:6;25204:11;25217:5;25224;25189;:42::i;:::-;25143:214;;;25285:56;25295:6;25303:11;25316:5;25323:9;25334:5;25285:8;:56::i;:::-;25143:214;25013:344;24822:546;;;;24865:7;;;;;:::i;:::-;;;;24822:546;;;;24630:745;;;;:::o;10281:79::-;10329:7;10346:4;:11;;;;10339:18;;10281:79;:::o;10591:213::-;10646:7;10655;10664;10673;10692:14;10709:20;10723:5;10709:13;:20::i;:::-;10692:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10749:3;:8;;;10759:3;:9;;;10770:3;:13;;;10785:3;:9;;;10740:56;;;;;;;;;10591:213;;;;;:::o;22220:315::-;22328:12;22343:33;8511:5;22343:33;;:15;22354:3;22343:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;22328:48;;22387:12;22402:21;22411:11;22402:4;:8;;:21;;;;:::i;:::-;22387:36;;22455:26;22476:4;22455:16;;:20;;:26;;;;:::i;:::-;22436:16;:45;;;;22492:35;22515:5;22522:4;22492:22;:35::i;:::-;22220:315;;;;;;:::o;25383:305::-;25482:13;25498:33;8511:5;25498:33;;:15;25509:3;25498:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25482:49;;25542:13;25558:22;25568:11;25558:5;:9;;:22;;;;:::i;:::-;25542:38;;25593:40;25613:4;25620:5;25627;25593:11;:40::i;:::-;25644:36;25667:5;25674;25644:22;:36::i;:::-;25383:305;;;;;;:::o;25696:491::-;25819:15;25837:33;8511:5;25837:33;;:15;25848:3;25837:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25819:51;;25881:15;25899:24;25911:11;25899:7;:11;;:24;;;;:::i;:::-;25881:42;;25968;26002:7;25968:18;:29;25987:9;25968:29;;;;;;;;;;;;;;;;:33;;:42;;;;:::i;:::-;25936:18;:29;25955:9;25936:29;;;;;;;;;;;;;;;:74;;;;26024:22;:33;26047:9;26024:33;;;;;;;;;;;;;;;;;;;;;;;;;26021:107;;;26095:33;26120:7;26095:9;:20;26105:9;26095:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;26072:9;:20;26082:9;26072:20;;;;;;;;;;;;;;;:56;;;;26021:107;26141:38;26164:5;26171:7;26141:22;:38::i;:::-;25696:491;;;;;;;:::o;10368:217::-;10427:11;10468:1;10459:5;:10;;:33;;;;;10481:4;:11;;;;10473:5;:19;10459:33;10450:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;10566:4;10571:5;10566:11;;;;;;;;;;;;;;;;;;;;;;;;;;10559:18;;10368:217;;;:::o;10810:173::-;10893:15;10911:20;10925:5;10911:13;:20::i;:::-;10893:38;;10954:21;10968:6;10954:3;:9;;;:13;;:21;;;;:::i;:::-;10942:3;:9;;:33;;;;10810:173;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:401::-;2179:6;2187;2236:2;2224:9;2215:7;2211:23;2207:32;2204:2;;;2252:1;2249;2242:12;2204:2;2295:1;2320:53;2365:7;2356:6;2345:9;2341:22;2320:53;:::i;:::-;2310:63;;2266:117;2422:2;2448:50;2490:7;2481:6;2470:9;2466:22;2448:50;:::i;:::-;2438:60;;2393:115;2194:321;;;;;:::o;2521:407::-;2589:6;2597;2646:2;2634:9;2625:7;2621:23;2617:32;2614:2;;;2662:1;2659;2652:12;2614:2;2705:1;2730:53;2775:7;2766:6;2755:9;2751:22;2730:53;:::i;:::-;2720:63;;2676:117;2832:2;2858:53;2903:7;2894:6;2883:9;2879:22;2858:53;:::i;:::-;2848:63;;2803:118;2604:324;;;;;:::o;2934:256::-;2990:6;3039:2;3027:9;3018:7;3014:23;3010:32;3007:2;;;3055:1;3052;3045:12;3007:2;3098:1;3123:50;3165:7;3156:6;3145:9;3141:22;3123:50;:::i;:::-;3113:60;;3069:114;2997:193;;;;:::o;3196:262::-;3255:6;3304:2;3292:9;3283:7;3279:23;3275:32;3272:2;;;3320:1;3317;3310:12;3272:2;3363:1;3388:53;3433:7;3424:6;3413:9;3409:22;3388:53;:::i;:::-;3378:63;;3334:117;3262:196;;;;:::o;3464:401::-;3529:6;3537;3586:2;3574:9;3565:7;3561:23;3557:32;3554:2;;;3602:1;3599;3592:12;3554:2;3645:1;3670:53;3715:7;3706:6;3695:9;3691:22;3670:53;:::i;:::-;3660:63;;3616:117;3772:2;3798:50;3840:7;3831:6;3820:9;3816:22;3798:50;:::i;:::-;3788:60;;3743:115;3544:321;;;;;:::o;3871:118::-;3958:24;3976:5;3958:24;:::i;:::-;3953:3;3946:37;3936:53;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;4054:50;;:::o;4110:364::-;4198:3;4226:39;4259:5;4226:39;:::i;:::-;4281:71;4345:6;4340:3;4281:71;:::i;:::-;4274:78;;4361:52;4406:6;4401:3;4394:4;4387:5;4383:16;4361:52;:::i;:::-;4438:29;4460:6;4438:29;:::i;:::-;4433:3;4429:39;4422:46;;4202:272;;;;;:::o;4480:366::-;4622:3;4643:67;4707:2;4702:3;4643:67;:::i;:::-;4636:74;;4719:93;4808:3;4719:93;:::i;:::-;4837:2;4832:3;4828:12;4821:19;;4626:220;;;:::o;4852:366::-;4994:3;5015:67;5079:2;5074:3;5015:67;:::i;:::-;5008:74;;5091:93;5180:3;5091:93;:::i;:::-;5209:2;5204:3;5200:12;5193:19;;4998:220;;;:::o;5224:366::-;5366:3;5387:67;5451:2;5446:3;5387:67;:::i;:::-;5380:74;;5463:93;5552:3;5463:93;:::i;:::-;5581:2;5576:3;5572:12;5565:19;;5370:220;;;:::o;5596:366::-;5738:3;5759:67;5823:2;5818:3;5759:67;:::i;:::-;5752:74;;5835:93;5924:3;5835:93;:::i;:::-;5953:2;5948:3;5944:12;5937:19;;5742:220;;;:::o;5968:366::-;6110:3;6131:67;6195:2;6190:3;6131:67;:::i;:::-;6124:74;;6207:93;6296:3;6207:93;:::i;:::-;6325:2;6320:3;6316:12;6309:19;;6114:220;;;:::o;6340:366::-;6482:3;6503:67;6567:2;6562:3;6503:67;:::i;:::-;6496:74;;6579:93;6668:3;6579:93;:::i;:::-;6697:2;6692:3;6688:12;6681:19;;6486:220;;;:::o;6712:366::-;6854:3;6875:67;6939:2;6934:3;6875:67;:::i;:::-;6868:74;;6951:93;7040:3;6951:93;:::i;:::-;7069:2;7064:3;7060:12;7053:19;;6858:220;;;:::o;7084:366::-;7226:3;7247:67;7311:2;7306:3;7247:67;:::i;:::-;7240:74;;7323:93;7412:3;7323:93;:::i;:::-;7441:2;7436:3;7432:12;7425:19;;7230:220;;;:::o;7456:366::-;7598:3;7619:67;7683:2;7678:3;7619:67;:::i;:::-;7612:74;;7695:93;7784:3;7695:93;:::i;:::-;7813:2;7808:3;7804:12;7797:19;;7602:220;;;:::o;7828:366::-;7970:3;7991:67;8055:2;8050:3;7991:67;:::i;:::-;7984:74;;8067:93;8156:3;8067:93;:::i;:::-;8185:2;8180:3;8176:12;8169:19;;7974:220;;;:::o;8200:366::-;8342:3;8363:67;8427:2;8422:3;8363:67;:::i;:::-;8356:74;;8439:93;8528:3;8439:93;:::i;:::-;8557:2;8552:3;8548:12;8541:19;;8346:220;;;:::o;8572:366::-;8714:3;8735:67;8799:2;8794:3;8735:67;:::i;:::-;8728:74;;8811:93;8900:3;8811:93;:::i;:::-;8929:2;8924:3;8920:12;8913:19;;8718:220;;;:::o;8944:366::-;9086:3;9107:67;9171:2;9166:3;9107:67;:::i;:::-;9100:74;;9183:93;9272:3;9183:93;:::i;:::-;9301:2;9296:3;9292:12;9285:19;;9090:220;;;:::o;9316:366::-;9458:3;9479:67;9543:2;9538:3;9479:67;:::i;:::-;9472:74;;9555:93;9644:3;9555:93;:::i;:::-;9673:2;9668:3;9664:12;9657:19;;9462:220;;;:::o;9688:366::-;9830:3;9851:67;9915:2;9910:3;9851:67;:::i;:::-;9844:74;;9927:93;10016:3;9927:93;:::i;:::-;10045:2;10040:3;10036:12;10029:19;;9834:220;;;:::o;10060:366::-;10202:3;10223:67;10287:2;10282:3;10223:67;:::i;:::-;10216:74;;10299:93;10388:3;10299:93;:::i;:::-;10417:2;10412:3;10408:12;10401:19;;10206:220;;;:::o;10432:366::-;10574:3;10595:67;10659:2;10654:3;10595:67;:::i;:::-;10588:74;;10671:93;10760:3;10671:93;:::i;:::-;10789:2;10784:3;10780:12;10773:19;;10578:220;;;:::o;10804:366::-;10946:3;10967:67;11031:2;11026:3;10967:67;:::i;:::-;10960:74;;11043:93;11132:3;11043:93;:::i;:::-;11161:2;11156:3;11152:12;11145:19;;10950:220;;;:::o;11176:366::-;11318:3;11339:67;11403:2;11398:3;11339:67;:::i;:::-;11332:74;;11415:93;11504:3;11415:93;:::i;:::-;11533:2;11528:3;11524:12;11517:19;;11322:220;;;:::o;11548:366::-;11690:3;11711:67;11775:2;11770:3;11711:67;:::i;:::-;11704:74;;11787:93;11876:3;11787:93;:::i;:::-;11905:2;11900:3;11896:12;11889:19;;11694:220;;;:::o;11920:366::-;12062:3;12083:67;12147:2;12142:3;12083:67;:::i;:::-;12076:74;;12159:93;12248:3;12159:93;:::i;:::-;12277:2;12272:3;12268:12;12261:19;;12066:220;;;:::o;12292:118::-;12379:24;12397:5;12379:24;:::i;:::-;12374:3;12367:37;12357:53;;:::o;12416:112::-;12499:22;12515:5;12499:22;:::i;:::-;12494:3;12487:35;12477:51;;:::o;12534:222::-;12627:4;12665:2;12654:9;12650:18;12642:26;;12678:71;12746:1;12735:9;12731:17;12722:6;12678:71;:::i;:::-;12632:124;;;;:::o;12762:332::-;12883:4;12921:2;12910:9;12906:18;12898:26;;12934:71;13002:1;12991:9;12987:17;12978:6;12934:71;:::i;:::-;13015:72;13083:2;13072:9;13068:18;13059:6;13015:72;:::i;:::-;12888:206;;;;;:::o;13100:210::-;13187:4;13225:2;13214:9;13210:18;13202:26;;13238:65;13300:1;13289:9;13285:17;13276:6;13238:65;:::i;:::-;13192:118;;;;:::o;13316:313::-;13429:4;13467:2;13456:9;13452:18;13444:26;;13516:9;13510:4;13506:20;13502:1;13491:9;13487:17;13480:47;13544:78;13617:4;13608:6;13544:78;:::i;:::-;13536:86;;13434:195;;;;:::o;13635:419::-;13801:4;13839:2;13828:9;13824:18;13816:26;;13888:9;13882:4;13878:20;13874:1;13863:9;13859:17;13852:47;13916:131;14042:4;13916:131;:::i;:::-;13908:139;;13806:248;;;:::o;14060:419::-;14226:4;14264:2;14253:9;14249:18;14241:26;;14313:9;14307:4;14303:20;14299:1;14288:9;14284:17;14277:47;14341:131;14467:4;14341:131;:::i;:::-;14333:139;;14231:248;;;:::o;14485:419::-;14651:4;14689:2;14678:9;14674:18;14666:26;;14738:9;14732:4;14728:20;14724:1;14713:9;14709:17;14702:47;14766:131;14892:4;14766:131;:::i;:::-;14758:139;;14656:248;;;:::o;14910:419::-;15076:4;15114:2;15103:9;15099:18;15091:26;;15163:9;15157:4;15153:20;15149:1;15138:9;15134:17;15127:47;15191:131;15317:4;15191:131;:::i;:::-;15183:139;;15081:248;;;:::o;15335:419::-;15501:4;15539:2;15528:9;15524:18;15516:26;;15588:9;15582:4;15578:20;15574:1;15563:9;15559:17;15552:47;15616:131;15742:4;15616:131;:::i;:::-;15608:139;;15506:248;;;:::o;15760:419::-;15926:4;15964:2;15953:9;15949:18;15941:26;;16013:9;16007:4;16003:20;15999:1;15988:9;15984:17;15977:47;16041:131;16167:4;16041:131;:::i;:::-;16033:139;;15931:248;;;:::o;16185:419::-;16351:4;16389:2;16378:9;16374:18;16366:26;;16438:9;16432:4;16428:20;16424:1;16413:9;16409:17;16402:47;16466:131;16592:4;16466:131;:::i;:::-;16458:139;;16356:248;;;:::o;16610:419::-;16776:4;16814:2;16803:9;16799:18;16791:26;;16863:9;16857:4;16853:20;16849:1;16838:9;16834:17;16827:47;16891:131;17017:4;16891:131;:::i;:::-;16883:139;;16781:248;;;:::o;17035:419::-;17201:4;17239:2;17228:9;17224:18;17216:26;;17288:9;17282:4;17278:20;17274:1;17263:9;17259:17;17252:47;17316:131;17442:4;17316:131;:::i;:::-;17308:139;;17206:248;;;:::o;17460:419::-;17626:4;17664:2;17653:9;17649:18;17641:26;;17713:9;17707:4;17703:20;17699:1;17688:9;17684:17;17677:47;17741:131;17867:4;17741:131;:::i;:::-;17733:139;;17631:248;;;:::o;17885:419::-;18051:4;18089:2;18078:9;18074:18;18066:26;;18138:9;18132:4;18128:20;18124:1;18113:9;18109:17;18102:47;18166:131;18292:4;18166:131;:::i;:::-;18158:139;;18056:248;;;:::o;18310:419::-;18476:4;18514:2;18503:9;18499:18;18491:26;;18563:9;18557:4;18553:20;18549:1;18538:9;18534:17;18527:47;18591:131;18717:4;18591:131;:::i;:::-;18583:139;;18481:248;;;:::o;18735:419::-;18901:4;18939:2;18928:9;18924:18;18916:26;;18988:9;18982:4;18978:20;18974:1;18963:9;18959:17;18952:47;19016:131;19142:4;19016:131;:::i;:::-;19008:139;;18906:248;;;:::o;19160:419::-;19326:4;19364:2;19353:9;19349:18;19341:26;;19413:9;19407:4;19403:20;19399:1;19388:9;19384:17;19377:47;19441:131;19567:4;19441:131;:::i;:::-;19433:139;;19331:248;;;:::o;19585:419::-;19751:4;19789:2;19778:9;19774:18;19766:26;;19838:9;19832:4;19828:20;19824:1;19813:9;19809:17;19802:47;19866:131;19992:4;19866:131;:::i;:::-;19858:139;;19756:248;;;:::o;20010:419::-;20176:4;20214:2;20203:9;20199:18;20191:26;;20263:9;20257:4;20253:20;20249:1;20238:9;20234:17;20227:47;20291:131;20417:4;20291:131;:::i;:::-;20283:139;;20181:248;;;:::o;20435:419::-;20601:4;20639:2;20628:9;20624:18;20616:26;;20688:9;20682:4;20678:20;20674:1;20663:9;20659:17;20652:47;20716:131;20842:4;20716:131;:::i;:::-;20708:139;;20606:248;;;:::o;20860:419::-;21026:4;21064:2;21053:9;21049:18;21041:26;;21113:9;21107:4;21103:20;21099:1;21088:9;21084:17;21077:47;21141:131;21267:4;21141:131;:::i;:::-;21133:139;;21031:248;;;:::o;21285:419::-;21451:4;21489:2;21478:9;21474:18;21466:26;;21538:9;21532:4;21528:20;21524:1;21513:9;21509:17;21502:47;21566:131;21692:4;21566:131;:::i;:::-;21558:139;;21456:248;;;:::o;21710:419::-;21876:4;21914:2;21903:9;21899:18;21891:26;;21963:9;21957:4;21953:20;21949:1;21938:9;21934:17;21927:47;21991:131;22117:4;21991:131;:::i;:::-;21983:139;;21881:248;;;:::o;22135:419::-;22301:4;22339:2;22328:9;22324:18;22316:26;;22388:9;22382:4;22378:20;22374:1;22363:9;22359:17;22352:47;22416:131;22542:4;22416:131;:::i;:::-;22408:139;;22306:248;;;:::o;22560:222::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22704:71;22772:1;22761:9;22757:17;22748:6;22704:71;:::i;:::-;22658:124;;;;:::o;22788:214::-;22877:4;22915:2;22904:9;22900:18;22892:26;;22928:67;22992:1;22981:9;22977:17;22968:6;22928:67;:::i;:::-;22882:120;;;;:::o;23008:99::-;23060:6;23094:5;23088:12;23078:22;;23067:40;;;:::o;23113:169::-;23197:11;23231:6;23226:3;23219:19;23271:4;23266:3;23262:14;23247:29;;23209:73;;;;:::o;23288:305::-;23328:3;23347:20;23365:1;23347:20;:::i;:::-;23342:25;;23381:20;23399:1;23381:20;:::i;:::-;23376:25;;23535:1;23467:66;23463:74;23460:1;23457:81;23454:2;;;23541:18;;:::i;:::-;23454:2;23585:1;23582;23578:9;23571:16;;23332:261;;;;:::o;23599:185::-;23639:1;23656:20;23674:1;23656:20;:::i;:::-;23651:25;;23690:20;23708:1;23690:20;:::i;:::-;23685:25;;23729:1;23719:2;;23734:18;;:::i;:::-;23719:2;23776:1;23773;23769:9;23764:14;;23641:143;;;;:::o;23790:848::-;23851:5;23858:4;23882:6;23873:15;;23906:5;23897:14;;23920:712;23941:1;23931:8;23928:15;23920:712;;;24036:4;24031:3;24027:14;24021:4;24018:24;24015:2;;;24045:18;;:::i;:::-;24015:2;24095:1;24085:8;24081:16;24078:2;;;24510:4;24503:5;24499:16;24490:25;;24078:2;24560:4;24554;24550:15;24542:23;;24590:32;24613:8;24590:32;:::i;:::-;24578:44;;23920:712;;;23863:775;;;;;;;:::o;24644:281::-;24702:5;24726:23;24744:4;24726:23;:::i;:::-;24718:31;;24770:25;24786:8;24770:25;:::i;:::-;24758:37;;24814:104;24851:66;24841:8;24835:4;24814:104;:::i;:::-;24805:113;;24708:217;;;;:::o;24931:1073::-;24985:5;25176:8;25166:2;;25197:1;25188:10;;25199:5;;25166:2;25225:4;25215:2;;25242:1;25233:10;;25244:5;;25215:2;25311:4;25359:1;25354:27;;;;25395:1;25390:191;;;;25304:277;;25354:27;25372:1;25363:10;;25374:5;;;25390:191;25435:3;25425:8;25422:17;25419:2;;;25442:18;;:::i;:::-;25419:2;25491:8;25488:1;25484:16;25475:25;;25526:3;25519:5;25516:14;25513:2;;;25533:18;;:::i;:::-;25513:2;25566:5;;;25304:277;;25690:2;25680:8;25677:16;25671:3;25665:4;25662:13;25658:36;25640:2;25630:8;25627:16;25622:2;25616:4;25613:12;25609:35;25593:111;25590:2;;;25746:8;25740:4;25736:19;25727:28;;25781:3;25774:5;25771:14;25768:2;;;25788:18;;:::i;:::-;25768:2;25821:5;;25590:2;25861:42;25899:3;25889:8;25883:4;25880:1;25861:42;:::i;:::-;25846:57;;;;25935:4;25930:3;25926:14;25919:5;25916:25;25913:2;;;25944:18;;:::i;:::-;25913:2;25993:4;25986:5;25982:16;25973:25;;24991:1013;;;;;;:::o;26010:348::-;26050:7;26073:20;26091:1;26073:20;:::i;:::-;26068:25;;26107:20;26125:1;26107:20;:::i;:::-;26102:25;;26295:1;26227:66;26223:74;26220:1;26217:81;26212:1;26205:9;26198:17;26194:105;26191:2;;;26302:18;;:::i;:::-;26191:2;26350:1;26347;26343:9;26332:20;;26058:300;;;;:::o;26364:191::-;26404:4;26424:20;26442:1;26424:20;:::i;:::-;26419:25;;26458:20;26476:1;26458:20;:::i;:::-;26453:25;;26497:1;26494;26491:8;26488:2;;;26502:18;;:::i;:::-;26488:2;26547:1;26544;26540:9;26532:17;;26409:146;;;;:::o;26561:96::-;26598:7;26627:24;26645:5;26627:24;:::i;:::-;26616:35;;26606:51;;;:::o;26663:90::-;26697:7;26740:5;26733:13;26726:21;26715:32;;26705:48;;;:::o;26759:126::-;26796:7;26836:42;26829:5;26825:54;26814:65;;26804:81;;;:::o;26891:77::-;26928:7;26957:5;26946:16;;26936:32;;;:::o;26974:86::-;27009:7;27049:4;27042:5;27038:16;27027:27;;27017:43;;;:::o;27066:307::-;27134:1;27144:113;27158:6;27155:1;27152:13;27144:113;;;27243:1;27238:3;27234:11;27228:18;27224:1;27219:3;27215:11;27208:39;27180:2;27177:1;27173:10;27168:15;;27144:113;;;27275:6;27272:1;27269:13;27266:2;;;27355:1;27346:6;27341:3;27337:16;27330:27;27266:2;27115:258;;;;:::o;27379:233::-;27418:3;27441:24;27459:5;27441:24;:::i;:::-;27432:33;;27487:66;27480:5;27477:77;27474:2;;;27557:18;;:::i;:::-;27474:2;27604:1;27597:5;27593:13;27586:20;;27422:190;;;:::o;27618:180::-;27666:77;27663:1;27656:88;27763:4;27760:1;27753:15;27787:4;27784:1;27777:15;27804:180;27852:77;27849:1;27842:88;27949:4;27946:1;27939:15;27973:4;27970:1;27963:15;27990:102;28031:6;28082:2;28078:7;28073:2;28066:5;28062:14;28058:28;28048:38;;28038:54;;;:::o;28098:102::-;28140:8;28187:5;28184:1;28180:13;28159:34;;28149:51;;;:::o;28206:178::-;28346:30;28342:1;28334:6;28330:14;28323:54;28312:72;:::o;28390:230::-;28530:34;28526:1;28518:6;28514:14;28507:58;28599:13;28594:2;28586:6;28582:15;28575:38;28496:124;:::o;28626:231::-;28766:34;28762:1;28754:6;28750:14;28743:58;28835:14;28830:2;28822:6;28818:15;28811:39;28732:125;:::o;28863:229::-;29003:34;28999:1;28991:6;28987:14;28980:58;29072:12;29067:2;29059:6;29055:15;29048:37;28969:123;:::o;29098:225::-;29238:34;29234:1;29226:6;29222:14;29215:58;29307:8;29302:2;29294:6;29290:15;29283:33;29204:119;:::o;29329:173::-;29469:25;29465:1;29457:6;29453:14;29446:49;29435:67;:::o;29508:227::-;29648:34;29644:1;29636:6;29632:14;29625:58;29717:10;29712:2;29704:6;29700:15;29693:35;29614:121;:::o;29741:173::-;29881:25;29877:1;29869:6;29865:14;29858:49;29847:67;:::o;29920:231::-;30060:34;30056:1;30048:6;30044:14;30037:58;30129:14;30124:2;30116:6;30112:15;30105:39;30026:125;:::o;30157:231::-;30297:34;30293:1;30285:6;30281:14;30274:58;30366:14;30361:2;30353:6;30349:15;30342:39;30263:125;:::o;30394:181::-;30534:33;30530:1;30522:6;30518:14;30511:57;30500:75;:::o;30581:227::-;30721:34;30717:1;30709:6;30705:14;30698:58;30790:10;30785:2;30777:6;30773:15;30766:35;30687:121;:::o;30814:228::-;30954:34;30950:1;30942:6;30938:14;30931:58;31023:11;31018:2;31010:6;31006:15;30999:36;30920:122;:::o;31048:229::-;31188:34;31184:1;31176:6;31172:14;31165:58;31257:12;31252:2;31244:6;31240:15;31233:37;31154:123;:::o;31283:182::-;31423:34;31419:1;31411:6;31407:14;31400:58;31389:76;:::o;31471:228::-;31611:34;31607:1;31599:6;31595:14;31588:58;31680:11;31675:2;31667:6;31663:15;31656:36;31577:122;:::o;31705:232::-;31845:34;31841:1;31833:6;31829:14;31822:58;31914:15;31909:2;31901:6;31897:15;31890:40;31811:126;:::o;31943:224::-;32083:34;32079:1;32071:6;32067:14;32060:58;32152:7;32147:2;32139:6;32135:15;32128:32;32049:118;:::o;32173:238::-;32313:34;32309:1;32301:6;32297:14;32290:58;32382:21;32377:2;32369:6;32365:15;32358:46;32279:132;:::o;32417:228::-;32557:34;32553:1;32545:6;32541:14;32534:58;32626:11;32621:2;32613:6;32609:15;32602:36;32523:122;:::o;32651:227::-;32791:34;32787:1;32779:6;32775:14;32768:58;32860:10;32855:2;32847:6;32843:15;32836:35;32757:121;:::o;32884:122::-;32957:24;32975:5;32957:24;:::i;:::-;32950:5;32947:35;32937:2;;32996:1;32993;32986:12;32937:2;32927:79;:::o;33012:116::-;33082:21;33097:5;33082:21;:::i;:::-;33075:5;33072:32;33062:2;;33118:1;33115;33108:12;33062:2;33052:76;:::o;33134:122::-;33207:24;33225:5;33207:24;:::i;:::-;33200:5;33197:35;33187:2;;33246:1;33243;33236:12;33187:2;33177:79;:::o

Swarm Source

ipfs://529b713f1721b8d3a0a45a787a27d4a56ae4b5d5189660a93fdbc1d97471e529
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.