AVAX Price: $51.97 (+0.56%)
 

Overview

AVAX Balance

Avalanche C-Chain LogoAvalanche C-Chain LogoAvalanche C-Chain Logo57.733075155435465625 AVAX

AVAX Value

$3,000.31 (@ $51.97/AVAX)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Submit540369892024-12-07 9:16:327 secs ago1733562992IN
0x526FF5e4...b7DFb40c1
0.0165462 AVAX0.0170907225
Submit540369842024-12-07 9:16:2217 secs ago1733562982IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.022453625
Submit540369712024-12-07 9:15:5643 secs ago1733562956IN
0x526FF5e4...b7DFb40c1
0.01400063 AVAX0.0169981525
Submit540369702024-12-07 9:15:5445 secs ago1733562954IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.0224793225
Submit540369172024-12-07 9:14:002 mins ago1733562840IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.022469125
Submit540369082024-12-07 9:13:393 mins ago1733562819IN
0x526FF5e4...b7DFb40c1
0.03563797 AVAX0.0201766225
Submit540369032024-12-07 9:13:293 mins ago1733562809IN
0x526FF5e4...b7DFb40c1
0.03563797 AVAX0.020149725
Submit540368972024-12-07 9:13:173 mins ago1733562797IN
0x526FF5e4...b7DFb40c1
0.00127278 AVAX0.0095010225
Submit540368722024-12-07 9:12:234 mins ago1733562743IN
0x526FF5e4...b7DFb40c1
0.03818354 AVAX0.0223839525
Submit540368692024-12-07 9:12:144 mins ago1733562734IN
0x526FF5e4...b7DFb40c1
0.03818354 AVAX0.0223842525
Claim540368672024-12-07 9:12:084 mins ago1733562728IN
0x526FF5e4...b7DFb40c1
0.01939481 AVAX0.0398902225
Claim540368672024-12-07 9:12:084 mins ago1733562728IN
0x526FF5e4...b7DFb40c1
0.01939481 AVAX0.040385125
Submit540368552024-12-07 9:11:444 mins ago1733562704IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.022304925
Submit540368532024-12-07 9:11:404 mins ago1733562700IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.022305525
Submit540368352024-12-07 9:11:005 mins ago1733562660IN
0x526FF5e4...b7DFb40c1
0.03563797 AVAX0.0206536525
Submit540368332024-12-07 9:10:575 mins ago1733562657IN
0x526FF5e4...b7DFb40c1
0.01400063 AVAX0.0169947525
Submit540368312024-12-07 9:10:535 mins ago1733562653IN
0x526FF5e4...b7DFb40c1
0.03563797 AVAX0.0206267225
Claim540367952024-12-07 9:09:397 mins ago1733562579IN
0x526FF5e4...b7DFb40c1
0.01939481 AVAX0.0398902225
Submit540367732024-12-07 9:08:557 mins ago1733562535IN
0x526FF5e4...b7DFb40c1
0.07127594 AVAX0.0225235725
Submit540367632024-12-07 9:08:328 mins ago1733562512IN
0x526FF5e4...b7DFb40c1
0.03436518 AVAX0.0225439725
Submit540367572024-12-07 9:08:208 mins ago1733562500IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.0224769725
Submit540367322024-12-07 9:07:309 mins ago1733562450IN
0x526FF5e4...b7DFb40c1
0.08145821 AVAX0.022441425
Claim540367282024-12-07 9:07:229 mins ago1733562442IN
0x526FF5e4...b7DFb40c1
0.01939481 AVAX0.0389384725
Claim540367282024-12-07 9:07:229 mins ago1733562442IN
0x526FF5e4...b7DFb40c1
0.05818444 AVAX0.0309973225
Submit540367172024-12-07 9:07:009 mins ago1733562420IN
0x526FF5e4...b7DFb40c1
0.00254556 AVAX0.0113700225
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
540222462024-12-07 0:46:208 hrs ago1733532380
0x526FF5e4...b7DFb40c1
22.1385677 AVAX
540155152024-12-06 20:56:1412 hrs ago1733518574
0x526FF5e4...b7DFb40c1
22.08731117 AVAX
540097282024-12-06 17:38:2315 hrs ago1733506703
0x526FF5e4...b7DFb40c1
154.19238686 AVAX
539750152024-12-05 22:03:3135 hrs ago1733436211
0x526FF5e4...b7DFb40c1
200.49940838 AVAX
539226012024-12-04 16:37:092 days ago1733330229
0x526FF5e4...b7DFb40c1
97.23581513 AVAX
539033112024-12-04 5:56:163 days ago1733291776
0x526FF5e4...b7DFb40c1
9.90285114 AVAX
539020462024-12-04 5:12:433 days ago1733289163
0x526FF5e4...b7DFb40c1
12.60445584 AVAX
538982642024-12-04 3:03:403 days ago1733281420
0x526FF5e4...b7DFb40c1
19.12361896 AVAX
538918282024-12-03 23:27:023 days ago1733268422
0x526FF5e4...b7DFb40c1
15.96437676 AVAX
538870382024-12-03 20:44:023 days ago1733258642
0x526FF5e4...b7DFb40c1
47.60628207 AVAX
538758542024-12-03 14:30:403 days ago1733236240
0x526FF5e4...b7DFb40c1
48.52864288 AVAX
538645982024-12-03 8:17:574 days ago1733213877
0x526FF5e4...b7DFb40c1
25.19830856 AVAX
538603682024-12-03 5:55:164 days ago1733205316
0x526FF5e4...b7DFb40c1
3.96965493 AVAX
538598742024-12-03 5:38:094 days ago1733204289
0x526FF5e4...b7DFb40c1
26.97103523 AVAX
538520332024-12-03 1:14:474 days ago1733188487
0x526FF5e4...b7DFb40c1
56.79353063 AVAX
538359912024-12-02 16:21:094 days ago1733156469
0x526FF5e4...b7DFb40c1
96.08938608 AVAX
538178192024-12-02 6:21:445 days ago1733120504
0x526FF5e4...b7DFb40c1
44.74964401 AVAX
538068992024-12-02 0:20:055 days ago1733098805
0x526FF5e4...b7DFb40c1
415.23613328 AVAX
537228092024-11-30 0:36:207 days ago1732926980
0x526FF5e4...b7DFb40c1
151.87444316 AVAX
536930452024-11-29 7:43:528 days ago1732866232
0x526FF5e4...b7DFb40c1
71.41310387 AVAX
536789202024-11-28 23:39:588 days ago1732837198
0x526FF5e4...b7DFb40c1
82.06790057 AVAX
536619872024-11-28 14:02:338 days ago1732802553
0x526FF5e4...b7DFb40c1
43.0974137 AVAX
536532272024-11-28 9:03:559 days ago1732784635
0x526FF5e4...b7DFb40c1
74.62031922 AVAX
536410932024-11-28 2:12:109 days ago1732759930
0x526FF5e4...b7DFb40c1
168.0156411 AVAX
536092632024-11-27 8:17:3010 days ago1732695450
0x526FF5e4...b7DFb40c1
51.80848668 AVAX
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MINING

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowscan.xyz on 2024-11-12
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/utils/Pausable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/access/Ownable2Step.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

// File: contracts/MiningV9/Core/Mining.sol


pragma solidity ^0.8.20;


contract MINING is Pausable, Ownable2Step {
    mapping ( address => bool ) public  allowedContracts;
    mapping ( uint256 => uint256 ) public  totalDailyShares;
    mapping ( bytes => shareData ) public  submitted;
    mapping ( bytes => shareData ) public  claimed;
    mapping ( address => submittedData[] ) public  submittedByDock;
    mapping ( address => mapping(uint => bool) ) public  submittedByOwner;
    mapping ( uint => mapping(uint => address) ) public  submittedByMiner;
    mapping (bytes => bool) public usedData;
    mapping (uint => uint) public dailySubmissions;
    //legcy
    MINING public legacyCon;
    mapping (address => mapping ( uint=> bool)) public legacySubmittedByOwner;
    mapping (address => uint) public daysClaimed;
    mapping (address => mapping (uint => bool)) public dayClaimed;
    //legacy
    int public timeZoneOffset;
    uint public startingDate;
    uint public daysBuffer;

    bool public checkDataUnique;
    bytes32 private tknHash;    

    IDock public dockCon;
    IAirdrops public airdropsCon;
    IActivities public activitiesCon;
    ITokenPricing public tokenPricingCon;
    IFees public feesCon;
    ILogs public logsCon;
    ILease public leaseCon;

    address public usdToken;
    address public wrappedCoin;
    address public mainToken;
    //fees prices in $ 6 decimals
    constructor() Ownable(msg.sender) {
        legacyCon = MINING(0x069571BDA2f6Fbb2fEDcF18a7BbdA1014b485818);
        dockCon = IDock(0x7d2F62b6134e8B5676D17f5E988B3e48b4f50b70);
        airdropsCon = IAirdrops(0x5ff0AB41Cb09bF077a471fEbef35934f040305cf);
        activitiesCon = IActivities(0x0e5A335093AEd1559C14581f44D3928Aa05D8756);
        feesCon = IFees(0x5d9bab4a66f084746844b0FC0115B3174C327E42);
        tokenPricingCon = ITokenPricing(0x1E5c4001009B1ebCd98DBD0e95cE45f119373b52);
        usdToken = 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7;
        wrappedCoin = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
        mainToken = 0xef0cdae2FfEEeFA539a244a16b3f46ba75b8c810;
        daysBuffer = 3;
        timeZoneOffset = -5;
    }    
    struct shareData{address _owner;uint shares;uint day;}
    struct submittedData{uint shares;uint _day;}
    struct submittedPerDay{uint _day;uint _nbr;uint _shares;}
    struct removeSubmitData{uint tokenId;uint index;}
    struct dockCompData{uint _userSlots; uint _dockedNbr; uint[] _docked; uint _leasedNbr; uint[] _leased; uint[] _all;}
    
    event submitEvent(uint _shares,address _owner,uint _round);
    event claimEvent(address _owner,uint _totalDays,uint _totalShares);
    //ALLOW--PAUSE--START
    function pause() public onlyOwner {_pause();}
    function unpause() public onlyOwner {_unpause();}
    modifier onlyAllowedContract (){require(allowedContracts[msg.sender] == true);_;}
    function allowContract ( address _addr ) onlyOwner public {allowedContracts[_addr ] = true;}
    function disallowContract ( address _addr ) onlyOwner public  {allowedContracts[_addr ] = false;}
    //ALLOW--PAUSE--END
    function __importLegacyGlobalShares(uint _start, uint _end) public onlyOwner {
        for (uint i= _start; i<= _end; i++) 
        {totalDailyShares[i] = legacyCon.totalDailyShares(i);}
    }
    function getUserDockComposition(address _user) public view returns (dockCompData memory compData) {
        IDock.userDock memory dock = dockCon.getUserDock(_user);
        compData._userSlots = dock._userSlots;
        compData._docked = dock._userDock;
        if (address(leaseCon) != address(0)) {compData._leased = leaseCon.getLeased(_user);} else {compData._leased = new uint[](0);}
        compData._dockedNbr = compData._docked.length;
        compData._leasedNbr = compData._leased.length;
        uint totalItems = compData._dockedNbr + (compData._userSlots > compData._dockedNbr ? (compData._userSlots - compData._dockedNbr) : 0);
        if (totalItems > compData._leasedNbr + compData._dockedNbr) {totalItems = compData._leasedNbr + compData._dockedNbr;}
        compData._all = new uint[](totalItems);
        for (uint i = 0; i < compData._dockedNbr; i++) {compData._all[i] = compData._docked[i];}
        uint remainingSlots = totalItems - compData._dockedNbr;
        for (uint j = 0; j < remainingSlots && j < compData._leasedNbr; j++) {compData._all[compData._dockedNbr + j] = compData._leased[j];}
    }
    function getUserDockCompositionAndUpdate(address _user) public returns (dockCompData memory compData) {
        IDock.userDock memory dock = dockCon.getUserDock(_user);
        compData._userSlots = dock._userSlots;
        compData._docked = dock._userDock;   
        if (address(leaseCon) != address(0)) {compData._leased = leaseCon.getLeasedAndUpdate(_user);} else {compData._leased = new uint[](0);}
        compData._dockedNbr = compData._docked.length;
        compData._leasedNbr = compData._leased.length;
        uint totalItems = compData._dockedNbr + (compData._userSlots > compData._dockedNbr ? (compData._userSlots - compData._dockedNbr) : 0);
        if (totalItems > compData._leasedNbr + compData._dockedNbr) {totalItems = compData._leasedNbr + compData._dockedNbr;}
        compData._all = new uint[](totalItems);
        for (uint i = 0; i < compData._dockedNbr; i++) {compData._all[i] = compData._docked[i];}
        uint remainingSlots = totalItems - compData._dockedNbr;
        for (uint j = 0; j < remainingSlots && j < compData._leasedNbr; j++) {compData._all[compData._dockedNbr + j] = compData._leased[j];}
    }
    function submit (string memory _tkn,address _owner,uint[] calldata _tokensId,uint256[] calldata data,uint[] calldata workouts,uint _day) public payable whenNotPaused returns ( bool ) {
        // DATA [ daily_steps, steps_t1, steps_t2, steps_t3, steps_t4, distance, calories,  workouts, sleep]
        require( isValidDateToSubmit(_day), "Submission outdated");
        uint[] memory tokensId = getUserDockCompositionAndUpdate(_owner)._all;
        (,uint _fees) = feesCon.getSubFees(tokensId);
        require(msg.value >= (_fees), "Not enough funds sent");
        require(keccak256(abi.encodePacked(_tkn)) == tknHash, "App not allowed");
        require(dockCon.isOwnerOfAll(_owner, _tokensId), "Invalid submitter");
        bytes memory track = trackId(_owner, _day);
        require(!isAlreadySubmitted(_owner, _day), "Already submitted");
        bytes memory fPrint = dataFprint(_day,data,workouts);
        require(checkDataUnique == false || usedData[fPrint] == false, "Data already submitted");
        uint _shares = activitiesCon.multiComputeAllShares(tokensId, data, workouts);
        require(_shares>0, "Zero shares can't be submitted");
        address _user = _owner;
        shareData memory fin_data = shareData(_user, _shares, _day);
        for (uint i = 0; i < tokensId.length; i++) {
            require(!isAlreadySubmittedByMiner(tokensId[i], _day), "One or more miners already submitted");
            submittedByMiner[tokensId[i]][_day] = _user;
        }
        //global
        totalDailyShares[_day] = totalDailyShares[_day] + fin_data.shares;
        dailySubmissions[_day] += 1;
        //user
        submittedByDock[_user].push(submittedData(fin_data.shares, _day));
        submittedByOwner[_user][_day] = true;
        //data
        submitted[track] = fin_data;
        usedData[fPrint] = true;
        if(address(logsCon) != address(0)){
            uint[] memory _values = new uint[](2);
            _values[0] = _day;
            _values[1] = fin_data.shares;
            logsCon.logAction(_user, 1, _values);
        }
        emit submitEvent(fin_data.shares,_user,_day);
        return true;
    }
    function _claim (address _owner) private returns ( IAirdrops.sharesData[] memory ) {
        if(address(leaseCon) != address(0)){leaseCon.getLeasedAndUpdate(_owner);}
        submittedData[] memory allClaims = getPendingClaims(_owner);
        uint n = allClaims.length;
        if (n > getMaxClaimDays()) n = getMaxClaimDays();
        uint totalDays = 0;
        uint totalShares = 0;
        uint32 totalRatio = 0;
        for (uint256 _i = n; _i > 0; _i--) {
            uint index = _i - 1;
            if (isValidDateToMine(allClaims[index]._day)) {totalDays += 1;}
        }
        (, uint _fees) = getClaimFees(totalDays);
        require(msg.value >= _fees, "Not enough funds sent; check fees!");
        uint32 ratio_multiplier = 1000000;
        IAirdrops.sharesData[] memory array = new IAirdrops.sharesData[](n);        
        address __owner = _owner;
        for (uint256 _i = n; _i > 0; _i--) {
            uint index = _i - 1;
            if (isValidDateToMine(allClaims[index]._day)) {
                totalShares += allClaims[index].shares;
                uint32 ratio = uint32((allClaims[index].shares * ratio_multiplier) / totalDailyShares[allClaims[index]._day]);
                totalRatio = totalRatio + ratio;
                array[index] = IAirdrops.sharesData(ratio, allClaims[index]._day);
                bytes memory track = trackId(__owner, allClaims[index]._day);
                claimed[track] = submitted[track];
                delete submitted[track];
                removeFromSubmitterByNft(__owner, allClaims[index]._day);
                dayClaimed[__owner][allClaims[index]._day] = true;
            }
        }
        if(address(logsCon) != address(0)){
            uint[] memory _values = new uint[](2);
            _values[0] = totalDays;
            _values[1] = totalShares;
            logsCon.logAction(_owner, 2, _values);
        }
        emit claimEvent(_owner, totalDays, totalShares);
        return array;
    }
  
    function claim (string memory _tkn, address _owner) payable whenNotPaused public returns ( bool ) {
        require(keccak256(abi.encodePacked(_tkn)) == tknHash, "App not allowed");
        IAirdrops.sharesData[] memory totalRatio = _claim(_owner);
        airdropsCon.claimTokens(_owner, totalRatio);
        return true;
    }
    function claimWithTokens (string memory _tkn, address _owner, address[]calldata tokens) payable whenNotPaused public returns ( bool ) {
        require(keccak256(abi.encodePacked(_tkn)) == tknHash, "App not allowed");
        IAirdrops.sharesData[] memory totalRatio = _claim(_owner);
        if(tokens.length>0){airdropsCon.claimTokens(_owner, totalRatio, tokens);}else{airdropsCon.claimTokens(_owner, totalRatio);}
        return true;
    }
    function addDailyShares (uint32 _day, uint _shares) public onlyAllowedContract  {totalDailyShares[_day] = totalDailyShares[_day] + _shares;}
    function removeFromSubmitterByNft(address _owner, uint _day) private {
        submittedData[] storage submissions = submittedByDock[_owner];
        for (uint i = 0; i < submissions.length; i++) {
            if (submissions[i]._day == _day) {
                submissions[i] = submissions[submissions.length - 1];
                submissions.pop();
                break;
            }
        }
    }
    function isAlreadySubmitted (address _owner, uint _days) public view returns (bool) {
        return submittedByOwner[_owner][_days] || legacyCon.isAlreadySubmitted(_owner,_days);
    }
    function isAlreadySubmittedByMiner (uint _tkn, uint _day) public view returns (bool) {
        return submittedByMiner[_tkn][_day] != address(0);
    }
    function getInvalidMinersToSubmit(uint[] memory _tkns, uint _day) public view returns (uint[] memory _invalid) {
        uint count = 0;
        for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {count++;}}
        _invalid = new uint[](count);
        uint index = 0;
        for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {_invalid[index++] = _tkns[i];}}
        return _invalid;
    }
    function getPendingClaimsNbr(address _owner) public view returns(uint){return getPendingClaims(_owner).length;}
    function getPendingClaims(address _owner) public view returns (submittedData[] memory) {
        submittedData[] memory old = legacyCon.getPendingClaims(_owner);
        submittedData[] memory current = submittedByDock[_owner];
        submittedData[] memory combinedTemp = new submittedData[](old.length + current.length);
        uint count = 0;
        for (uint i = 0; i < old.length; i++) {if (!dayClaimed[_owner][old[i]._day]) {combinedTemp[count++] = old[i];}}
        for (uint j = 0; j < current.length; j++) {if (!dayClaimed[_owner][current[j]._day]) {combinedTemp[count++] = current[j];}}
        submittedData[] memory combined = new submittedData[](count);
        for (uint k = 0; k < count; k++) {combined[k] = combinedTemp[k];}
        return combined;
    }
    function getSubmissionsPerDay(uint _day, uint _length) public view returns (submittedPerDay[] memory) {
        submittedPerDay[] memory array = new submittedPerDay[](_length);
        for (uint i = 0; i < _length; i++) {
            array[i] = submittedPerDay(_day - i, dailySubmissions[_day - i], totalDailyShares[_day - i]);
        }
        return array;
    }
    function getSubPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
        bytes memory ref = trackId(_owner, _days);return submitted[ref];
    }
    function getClaimPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
        bytes memory ref = trackId(_owner, _days);return claimed[ref];
    }
    
    function getDate() public view returns(uint){return getTime() / 1 days;}
    function getTime() public view returns(uint){return uint(int(block.timestamp) + (timeZoneOffset * 1 hours));}
    function SetTimeZoneOffset(int _value) public onlyOwner {timeZoneOffset = _value;}

    function getDayShares (uint _day) public view returns (uint) {return totalDailyShares[_day];}
    function simulateShares(uint[] calldata tokensId,uint256[] calldata data,uint[] calldata workouts) public view returns(uint){return activitiesCon.multiComputeAllShares(tokensId, data, workouts);}
    function isValidDateToSubmit (uint _days) public view returns (bool) {return (getDate() - _days) < daysBuffer;}
    function isValidDateToMine (uint _days) public view returns (bool) {if(_days > getDate()) return false;if(_days < startingDate) return false;return (getDate() - _days) > (daysBuffer - 1);}

    function getAirdropsPerDay() public view returns (IAirdrops.dailyDistribution[] memory){return airdropsCon.getAirdropsPerDay();}
    function getAirdropsActive() public view returns (address[] memory) {
        address[] memory array;
        IAirdrops.dailyDistribution[] memory list = airdropsCon.getAirdropsPerDay();
        for (uint i = 0; i < list.length; i++) {
            bool active;
            (,,,,,,active) = airdropsCon.getTokenData(list[i]._addr);
            if (active) {
                if (array.length == 0) {
                    array = new address[](1);
                } else {
                    address[] memory newArray = new address[](array.length + 1);
                    for (uint j = 0; j < array.length; j++) {
                        newArray[j] = array[j];
                    }
                    array = newArray;
                }
                array[array.length - 1] = list[i]._addr;
            }
        }
        return array;
    }
    function trackId (address _owner, uint _days) public pure returns (bytes memory) {return abi.encodePacked(_owner, _days);}
    function dataFprint(uint _days, uint256[] calldata data, uint[] calldata workouts) public pure returns (bytes memory) {return abi.encodePacked(_days, data, workouts);}
    //FEES
    function getMaxClaimDays () public view returns (uint){ return feesCon.getMaxClaimDays();}
    function getTokenValueTier () public view returns (uint){return feesCon.getTokenValueTier();}    
    function getSubFees (uint[] calldata tokensId) public view returns (uint _usd, uint _coin){return feesCon.getSubFees(tokensId);}
    function getClaimFees(uint _days) public view returns (uint _usd, uint _coin){return feesCon.getClaimFees(_days);}
    //
    function setusdTokenAddress(address _addr) public onlyOwner {usdToken = _addr;}
    function setwrappedCoinAddress(address _addr) public onlyOwner {wrappedCoin = _addr;}
    function settokenPricingCon(address _addr) public onlyOwner {tokenPricingCon = ITokenPricing(_addr);}
    function setLegacyContract (address _addr) public onlyOwner {legacyCon = MINING(_addr);}
    function setActivitiesContract (address _addr) public onlyOwner {activitiesCon = IActivities(_addr);}
    function setdockContract (address _addr) public onlyOwner {dockCon = IDock(_addr);}
    function setFeesContract (address _addr) public onlyOwner {feesCon = IFees(_addr);}
    function setLogsContract (address _addr) public onlyOwner {logsCon = ILogs(_addr);}
    function setLeaseContract (address _addr) public onlyOwner {leaseCon = ILease(_addr);}
    function setAirdropsContract (address _addr) public onlyOwner {airdropsCon = IAirdrops(_addr);}

    function setTknHash (string memory _str) public onlyOwner {tknHash = keccak256(abi.encodePacked(_str));}
    function setStartingDate (uint _days) public onlyOwner {startingDate = _days;}
    function setUniqueCheck (bool _v) public onlyOwner {checkDataUnique = _v;}
    function setDaysBuffer (uint _days) public onlyOwner {daysBuffer = _days;}
    function getDaysBuffer () public view returns (uint) {return daysBuffer;}

    function getBalance() public view returns(uint) {return address(this).balance;}    
    function withdraw() public payable onlyOwner {address payable to = payable(msg.sender);to.transfer(getBalance());}
    function withdrawAmount(uint _amount) public payable onlyOwner {require(_amount <= getBalance(), "err : Amount > Balance");address payable to = payable(msg.sender);to.transfer(getBalance());}
    function transferToken (address _tokenAddress, address addr, uint amount) public onlyOwner returns (uint256) {ERC20(_tokenAddress).transfer(addr, amount);return ERC20(_tokenAddress).balanceOf(address(this));}
}
interface IActivities {
    function nftType (uint tokenId) external pure returns(uint);
    function computeAllShares (uint tokenId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
    function multiComputeAllShares(uint[] calldata tokensId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
    function getMiningLevelBonus(uint tknId) external view returns (uint);
}
interface IDock {
    struct userDock {uint _userSlots;uint[] _userDock;}
    function getUserDock(address user) external view returns (userDock memory);
    function isOwnerOfAll(address _owner, uint[] calldata _nfts) external view returns (bool);
    function maxSlots() external view returns (uint);
}
interface IAirdrops {
    struct dailyDistribution {address _addr; string _name;uint _perDay; uint _startingDay;}
    struct sharesData {uint32 _shares; uint _day;}
    function getAirdropsPerDay() external view returns (dailyDistribution[] memory);
    function getTokenData(address addr) external view returns (address _addr,string  memory _name,string memory _symbol,uint256 _supply,uint256 _perDay,uint256 _claimed,bool _active );
    function claimTokens (address addr, sharesData[] memory ratios) external returns (bool);
    function claimTokens (address addr, sharesData[] memory ratios, address[] calldata _tkns) external returns (bool);
}
interface ITokenPricing {
    function getPrice(address tokenIn, address tokenOut, uint amountIn) external view returns (uint amountOut);
}
interface ERC20 {
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
}
interface IFees {
    function getMaxClaimDays () external view returns (uint);
    function getTokenValueTier () external view returns (uint);
    function getSubFeesPerMiner (uint tknId) external view returns (uint _usd, uint _coin);
    function getSubFees (uint[] calldata tokensId) external view returns (uint _usd, uint _coin);
    function getClaimFees(uint _days) external view returns (uint _usd, uint _coin);
}
interface ILogs {
    function logAction (address _user, uint _type, uint[] memory _values) external;
}
interface ILease {
    function getLeased (address _user) external view returns (uint[] memory items);
    function getLeasedAndUpdate (address _user) external returns (uint[] memory items);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalShares","type":"uint256"}],"name":"claimEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_round","type":"uint256"}],"name":"submitEvent","type":"event"},{"inputs":[{"internalType":"int256","name":"_value","type":"int256"}],"name":"SetTimeZoneOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"__importLegacyGlobalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activitiesCon","outputs":[{"internalType":"contract IActivities","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_day","type":"uint32"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"addDailyShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropsCon","outputs":[{"internalType":"contract IAirdrops","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"allowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkDataUnique","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tkn","type":"string"},{"internalType":"address","name":"_owner","type":"address"}],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_tkn","type":"string"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"claimWithTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"claimed","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailySubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"dataFprint","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"dayClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"daysClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"disallowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dockCon","outputs":[{"internalType":"contract IDock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesCon","outputs":[{"internalType":"contract IFees","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsActive","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsPerDay","outputs":[{"components":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_perDay","type":"uint256"},{"internalType":"uint256","name":"_startingDay","type":"uint256"}],"internalType":"struct IAirdrops.dailyDistribution[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"getClaimFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getClaimPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct MINING.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getDayShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDaysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tkns","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getInvalidMinersToSubmit","outputs":[{"internalType":"uint256[]","name":"_invalid","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxClaimDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaims","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"internalType":"struct MINING.submittedData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaimsNbr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"}],"name":"getSubFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getSubPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct MINING.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getSubmissionsPerDay","outputs":[{"components":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_nbr","type":"uint256"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"internalType":"struct MINING.submittedPerDay[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenValueTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockComposition","outputs":[{"components":[{"internalType":"uint256","name":"_userSlots","type":"uint256"},{"internalType":"uint256","name":"_dockedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_docked","type":"uint256[]"},{"internalType":"uint256","name":"_leasedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_leased","type":"uint256[]"},{"internalType":"uint256[]","name":"_all","type":"uint256[]"}],"internalType":"struct MINING.dockCompData","name":"compData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockCompositionAndUpdate","outputs":[{"components":[{"internalType":"uint256","name":"_userSlots","type":"uint256"},{"internalType":"uint256","name":"_dockedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_docked","type":"uint256[]"},{"internalType":"uint256","name":"_leasedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_leased","type":"uint256[]"},{"internalType":"uint256[]","name":"_all","type":"uint256[]"}],"internalType":"struct MINING.dockCompData","name":"compData","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isAlreadySubmitted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tkn","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"isAlreadySubmittedByMiner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToMine","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToSubmit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaseCon","outputs":[{"internalType":"contract ILease","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legacyCon","outputs":[{"internalType":"contract MINING","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"legacySubmittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logsCon","outputs":[{"internalType":"contract ILogs","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setActivitiesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setAirdropsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setDaysBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLeaseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLegacyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLogsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setStartingDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_str","type":"string"}],"name":"setTknHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_v","type":"bool"}],"name":"setUniqueCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setdockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"settokenPricingCon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setusdTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setwrappedCoinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"simulateShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tkn","type":"string"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256[]","name":"_tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"submit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"submitted","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByDock","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByMiner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeZoneOffset","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPricingCon","outputs":[{"internalType":"contract ITokenPricing","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalDailyShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"trackId","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"usedData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wrappedCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801562000010575f80fd5b505f805460ff1916905533806200004057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200004b8162000177565b50600b80546001600160a01b031990811673069571bda2f6fbb2fedcf18a7bbda1014b48581817909155601480548216737d2f62b6134e8b5676d17f5e988b3e48b4f50b70179055601580548216735ff0ab41cb09bf077a471febef35934f040305cf179055601680548216730e5a335093aed1559c14581f44d3928aa05d8756179055601880548216735d9bab4a66f084746844b0fc0115b3174c327e42179055601780548216731e5c4001009b1ebcd98dbd0e95ce45f119373b52179055601b80548216739702230a8ea53601f5cd2dc00fdbc13d4df4a8c7179055601c8054821673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055601d805490911673ef0cdae2ffeeefa539a244a16b3f46ba75b8c8101790556003601155600419600f55620001ed565b600180546001600160a01b0319169055620001928162000195565b50565b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b614cf780620001fb5f395ff3fe6080604052600436106104a5575f3560e01c806381da45b211610262578063cd4309671161014a578063ef62071f116100be578063f7f5ed6111610083578063f7f5ed6114610f7a578063f88c4d0214610f99578063f897a22b14610fc4578063f8fd09e414610fe3578063ff62309c14611002578063ffc345c614611021575f80fd5b8063ef62071f14610eae578063f2fde38b14610ecd578063f5537ede14610eec578063f6bd02fa14610f0b578063f6df805514610f2a575f80fd5b8063dfda09051161010f578063dfda090514610ddc578063e30c397814610dfb578063e438005d14610e18578063e4542aae14610e37578063e5b5462d14610e56578063ec45864e14610e75575f80fd5b8063cd43096714610d4d578063d01460ca14610d60578063d2f9d45b14610d7f578063d9be4b3e14610d9e578063dac6b05014610dbd575f80fd5b806399f91405116101e1578063b2467949116101a6578063b246794914610c3d578063b6b2ae0314610c5c578063b6b67d9e14610c7b578063bbac408c14610c9a578063c1df5cc814610d0f578063cb0e122a14610d2e575f80fd5b806399f9140514610b955780639ea507f214610bc15780639edbc24614610be05780639ff7a39d14610bff578063ab5f5d8d14610c1e575f80fd5b80638f3277fe116102275780638f3277fe14610b04578063925b506a14610b185780639464361d14610b4357806394a4c34a14610b6257806399a5432a14610b81575f80fd5b806381da45b214610a705780638456cb5914610a8f5780638685343614610aa35780638da5cb5b14610ac25780638e45870f14610ae3575f80fd5b8063430fe9c11161039057806360a1da831161030457806370f9cecf116102c957806370f9cecf146109c9578063715018a6146109e85780637231535a146109fc5780637232ed2714610a1157806379ba509714610a3d5780637ca93f5a14610a51575f80fd5b806360a1da83146108f45780636725cda11461090757806367645bbb146109265780636a9f2807146109655780636d37eda51461099e575f80fd5b806353d09aac1161035557806353d09aac14610826578063557ed1ba1461085257806358a215b01461086657806359fa047d146108855780635c975abb146108bf5780635e37fb00146108d5575f80fd5b8063430fe9c114610787578063440f82c91461079b5780634b6592cc146107ba57806351e0e26b146107d9578063527ba9af14610807575f80fd5b806337280408116104275780633de2662c116103ec5780633de2662c146106b75780633e0e44d0146107015780633e3ff7b6146107205780633f4ba83a146107355780633fc15f15146107495780633fce590814610768575f80fd5b806337280408146106155780633c010dc9146106365780633ccfd60b1461066f5780633d93e02e146106775780633db7aced146106a3575f80fd5b806312065fe01161046d57806312065fe01461055f57806319174c23146105715780631e5e99061461059d57806332cbe4c4146105c857806334dc8ea5146105e1575f80fd5b806304a8d707146104a95780630562b9f7146104d157806307e438e2146104e65780630966a6a51461051d5780630b7f52df1461053c575b5f80fd5b3480156104b4575f80fd5b506104be60115481565b6040519081526020015b60405180910390f35b6104e46104df366004613bee565b611040565b005b3480156104f1575f80fd5b50600b54610505906001600160a01b031681565b6040516001600160a01b0390911681526020016104c8565b348015610528575f80fd5b506104e4610537366004613c29565b6110c6565b61054f61054a366004613d91565b6110f0565b60405190151581526020016104c8565b34801561056a575f80fd5b50476104be565b34801561057c575f80fd5b5061059061058b366004613e5d565b61185a565b6040516104c89190613e7d565b3480156105a8575f80fd5b506104be6105b7366004613bee565b5f9081526003602052604090205490565b3480156105d3575f80fd5b5060125461054f9060ff1681565b3480156105ec575f80fd5b506106006105fb366004613ed5565b61196a565b604080519283526020830191909152016104c8565b348015610620575f80fd5b506106296119ea565b6040516104c89190613f60565b348015610641575f80fd5b5061054f610650366004613ff4565b600760209081525f928352604080842090915290825290205460ff1681565b6104e4611a5d565b348015610682575f80fd5b50610696610691366004614040565b611a94565b6040516104c8919061410a565b3480156106ae575f80fd5b506104be611bc3565b3480156106c2575f80fd5b506106d66106d136600461412f565b611c2e565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016104c8565b34801561070c575f80fd5b5061060061071b366004613bee565b611cbd565b34801561072b575f80fd5b506104be60105481565b348015610740575f80fd5b506104e4611d34565b348015610754575f80fd5b50601d54610505906001600160a01b031681565b348015610773575f80fd5b506104be610782366004614162565b611d46565b348015610792575f80fd5b506104be611dca565b3480156107a6575f80fd5b506104be6107b5366004613c29565b611de1565b3480156107c5575f80fd5b50601954610505906001600160a01b031681565b3480156107e4575f80fd5b5061054f6107f3366004613c29565b60026020525f908152604090205460ff1681565b348015610812575f80fd5b50601c54610505906001600160a01b031681565b348015610831575f80fd5b50610845610840366004613c29565b611df2565b6040516104c891906141f4565b34801561085d575f80fd5b506104be6120fb565b348015610871575f80fd5b506104e4610880366004613bee565b612116565b348015610890575f80fd5b5061054f61089f366004614272565b805160208183018101805160098252928201919093012091525460ff1681565b3480156108ca575f80fd5b505f5460ff1661054f565b3480156108e0575f80fd5b506104e46108ef366004613c29565b612123565b61054f6109023660046142b6565b61214b565b348015610912575f80fd5b506104e4610921366004613c29565b612222565b348015610931575f80fd5b50610505610940366004613e5d565b600860209081525f92835260408084209091529082529020546001600160a01b031681565b348015610970575f80fd5b5061054f61097f366004613ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b3480156109a9575f80fd5b506104be6109b8366004613bee565b60036020525f908152604090205481565b3480156109d4575f80fd5b5061054f6109e3366004613ff4565b61224c565b3480156109f3575f80fd5b506104e46122f2565b348015610a07575f80fd5b506104be600f5481565b348015610a1c575f80fd5b50610a30610a2b366004613ff4565b612303565b6040516104c89190614304565b348015610a48575f80fd5b506104e4612341565b348015610a5c575f80fd5b50601754610505906001600160a01b031681565b348015610a7b575f80fd5b506104e4610a8a366004614323565b612385565b348015610a9a575f80fd5b506104e46123a0565b348015610aae575f80fd5b506104e4610abd366004613c29565b6123b0565b348015610acd575f80fd5b505f5461010090046001600160a01b0316610505565b348015610aee575f80fd5b50610af76123da565b6040516104c8919061433e565b348015610b0f575f80fd5b506104be61266a565b348015610b23575f80fd5b506104be610b32366004613bee565b600a6020525f908152604090205481565b348015610b4e575f80fd5b50610845610b5d366004613c29565b6126b1565b348015610b6d575f80fd5b506106d6610b7c36600461412f565b6129b2565b348015610b8c575f80fd5b506011546104be565b348015610ba0575f80fd5b50610bb4610baf366004613c29565b6129ff565b6040516104c8919061438a565b348015610bcc575f80fd5b50610600610bdb366004613ff4565b612d87565b348015610beb575f80fd5b506104e4610bfa366004613e5d565b612dbf565b348015610c0a575f80fd5b506104e4610c19366004613c29565b612e5b565b348015610c29575f80fd5b506104e4610c383660046143cb565b612e85565b348015610c48575f80fd5b50601654610505906001600160a01b031681565b348015610c67575f80fd5b506104e4610c76366004613c29565b612ebc565b348015610c86575f80fd5b506104e4610c953660046143fc565b612ee6565b348015610ca5575f80fd5b50610cea610cb4366004614272565b80516020818301810180516005825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016104c8565b348015610d1a575f80fd5b5061054f610d29366004613bee565b612f41565b348015610d39575f80fd5b50601554610505906001600160a01b031681565b61054f610d5b366004614416565b612f92565b348015610d6b575f80fd5b5061054f610d7a366004613bee565b6130ef565b348015610d8a575f80fd5b50610a30610d9936600461448b565b61310d565b348015610da9575f80fd5b50601854610505906001600160a01b031681565b348015610dc8575f80fd5b506104e4610dd7366004613c29565b613142565b348015610de7575f80fd5b50601a54610505906001600160a01b031681565b348015610e06575f80fd5b506001546001600160a01b0316610505565b348015610e23575f80fd5b506104e4610e32366004613c29565b61316c565b348015610e42575f80fd5b506104e4610e51366004613bee565b613196565b348015610e61575f80fd5b5061054f610e70366004613e5d565b6131a3565b348015610e80575f80fd5b5061054f610e8f366004613ff4565b600c60209081525f928352604080842090915290825290205460ff1681565b348015610eb9575f80fd5b506104e4610ec8366004613bee565b6131ca565b348015610ed8575f80fd5b506104e4610ee7366004613c29565b6131d7565b348015610ef7575f80fd5b506104be610f063660046144fe565b61324d565b348015610f16575f80fd5b506104e4610f25366004613c29565b613335565b348015610f35575f80fd5b50610cea610f44366004614272565b80516020818301810180516004825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b348015610f85575f80fd5b506104e4610f94366004613c29565b613360565b348015610fa4575f80fd5b506104be610fb3366004613c29565b600d6020525f908152604090205481565b348015610fcf575f80fd5b50601b54610505906001600160a01b031681565b348015610fee575f80fd5b50601454610505906001600160a01b031681565b34801561100d575f80fd5b506104e461101c366004613c29565b61338a565b34801561102c575f80fd5b506104e461103b366004613c29565b6133b4565b6110486133de565b478111156110965760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b33806108fc476040518115909202915f818181858888f193505050501580156110c1573d5f803e3d5ffd5b505050565b6110ce6133de565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b5f6110f9613410565b611102826130ef565b6111445760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b604482015260640161108d565b5f61114e8a6126b1565b60a001516018546040516334dc8ea560e01b81529192505f916001600160a01b03909116906334dc8ea59061118790859060040161410a565b6040805180830381865afa1580156111a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c5919061453c565b915050803410156112105760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b604482015260640161108d565b6013548c604051602001611224919061455e565b60405160208183030381529060405280519060200120146112575760405162461bcd60e51b815260040161108d90614579565b60145460405163a713e45b60e01b81526001600160a01b039091169063a713e45b9061128b908e908e908e906004016145d2565b602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca91906145f6565b61130a5760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21039bab136b4ba3a32b960791b604482015260640161108d565b5f6113158c86612303565b90506113218c8661224c565b156113625760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b604482015260640161108d565b5f611370868b8b8b8b61310d565b60125490915060ff1615806113a55750600981604051611390919061455e565b9081526040519081900360200190205460ff16155b6113ea5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b604482015260640161108d565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac327906114229088908f908f908f908f90600401614611565b602060405180830381865afa15801561143d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114619190614657565b90505f81116114b25760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d69747465640000604482015260640161108d565b5f8e90505f6040518060600160405280836001600160a01b031681526020018481526020018a81525090505f5b87518110156115d45761150b8882815181106114fd576114fd61466e565b60200260200101518b6131a3565b156115645760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b606482015260840161108d565b8260085f8a848151811061157a5761157a61466e565b602002602001015181526020019081526020015f205f8c81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080806115cc90614696565b9150506114df565b506020808201515f8b815260039092526040909120546115f491906146ae565b5f8a815260036020908152604080832093909355600a90529081208054600192906116209084906146ae565b90915550506001600160a01b0382165f818152600660209081526040808320815180830183528684015181528084018f8152825460018181018555938752858720925160029091029092019182555190820155938352600782528083208d845290915290819020805460ff19169092179091555181906004906116a490889061455e565b908152604080519182900360209081018320845181546001600160a01b039091166001600160a01b03199091161781559084015160018083019190915593909101516002909101556009906116fa90879061455e565b908152604051908190036020019020805491151560ff199092169190911790556019546001600160a01b0316156117f1576040805160028082526060820183525f9260208301908036833701905050905089815f8151811061175e5761175e61466e565b6020026020010181815250508160200151816001815181106117825761178261466e565b60209081029190910101526019546040516336df2fb760e21b81526001600160a01b039091169063db7cbedc906117c290869060019086906004016146c1565b5f604051808303815f87803b1580156117d9575f80fd5b505af11580156117eb573d5f803e3d5ffd5b50505050505b602080820151604080519182526001600160a01b038516928201929092529081018a90527f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f19060600160405180910390a160019750505050505050509998505050505050505050565b60605f826001600160401b0381111561187557611875613c44565b6040519080825280602002602001820160405280156118c757816020015b6118b460405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816118935790505b5090505f5b8381101561196057604051806060016040528082876118eb91906146e7565b8152602001600a5f6118fd858a6146e7565b81526020019081526020015f2054815260200160035f848961191f91906146e7565b81526020019081526020015f20548152508282815181106119425761194261466e565b6020026020010181905250808061195890614696565b9150506118cc565b5090505b92915050565b6018546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906119a090879087906004016146fa565b6040805180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de919061453c565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa158015611a31573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a58919081019061474f565b905090565b611a656133de565b33806108fc476040518115909202915f818181858888f19350505050158015611a90573d5f803e3d5ffd5b5050565b60605f805b8451811015611aea57611ac5858281518110611ab757611ab761466e565b6020026020010151856131a3565b15611ad85781611ad481614696565b9250505b80611ae281614696565b915050611a99565b50806001600160401b03811115611b0357611b03613c44565b604051908082528060200260200182016040528015611b2c578160200160208202803683370190505b5091505f805b8551811015611bba57611b5e868281518110611b5057611b5061466e565b6020026020010151866131a3565b15611ba857858181518110611b7557611b7561466e565b6020026020010151848380611b8990614696565b945081518110611b9b57611b9b61466e565b6020026020010181815250505b80611bb281614696565b915050611b32565b50505092915050565b60185460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a589190614657565b611c5860405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c69848463ffffffff16612303565b9050600581604051611c7b919061455e565b90815260408051918290036020908101832060608401835280546001600160a01b03168452600181015491840191909152600201549082015291505092915050565b6018546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611d07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2b919061453c565b91509150915091565b611d3c6133de565b611d44613433565b565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611d80908a908a908a908a908a908a90600401614854565b602060405180830381865afa158015611d9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dbf9190614657565b979650505050505050565b5f62015180611dd76120fb565b611a58919061489c565b5f611deb826129ff565b5192915050565b611e286040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f92169063ea723132906024015f60405180830381865afa158015611e6f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e969190810190614913565b8051835260208101516040840152601a549091506001600160a01b031615611f3057601a546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa158015611eff573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f269190810190614984565b6080830152611f44565b604080515f81526020810190915260808301525b60408201515160208301819052608083015151606084015282515f9110611f6b575f611f7c565b60208301518351611f7c91906146e7565b8360200151611f8b91906146ae565b905082602001518360600151611fa191906146ae565b811115611fbf5782602001518360600151611fbc91906146ae565b90505b806001600160401b03811115611fd757611fd7613c44565b604051908082528060200260200182016040528015612000578160200160208202803683370190505b5060a08401525f5b8360200151811015612065578360400151818151811061202a5761202a61466e565b60200260200101518460a0015182815181106120485761204861466e565b60209081029190910101528061205d81614696565b915050612008565b505f83602001518261207791906146e7565b90505f5b818110801561208d5750846060015181105b156120f257846080015181815181106120a8576120a861466e565b60200260200101518560a001518287602001516120c591906146ae565b815181106120d5576120d561466e565b6020908102919091010152806120ea81614696565b91505061207b565b50505050919050565b5f600f54610e1061210c91906149b5565b611a5890426149e4565b61211e6133de565b601155565b61212b6133de565b6001600160a01b03165f908152600260205260409020805460ff19169055565b5f612154613410565b60135483604051602001612168919061455e565b604051602081830303815290604052805190602001201461219b5760405162461bcd60e51b815260040161108d90614579565b5f6121a583613484565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a00906121d79086908590600401614a4a565b6020604051808303815f875af11580156121f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221791906145f6565b506001949350505050565b61222a6133de565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f90815260076020908152604080832084845290915281205460ff16806122eb5750600b546040516370f9cecf60e01b81526001600160a01b03858116600483015260248201859052909116906370f9cecf90604401602060405180830381865afa1580156122c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122eb91906145f6565b9392505050565b6122fa6133de565b611d445f613a30565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b60015433906001600160a01b031681146123795760405163118cdaa760e01b81526001600160a01b038216600482015260240161108d565b61238281613a30565b50565b61238d6133de565b6012805460ff1916911515919091179055565b6123a86133de565b611d44613a49565b6123b86133de565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6060805f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa15801561242d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612454919081019061474f565b90505f5b81518110156126625760155482515f916001600160a01b0316906313ff7e9f9085908590811061248a5761248a61466e565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa1580156124d7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124fe9190810190614a6d565b9650508515945061264f93505050505783515f0361253b5760408051600180825281830190925290602080830190803683370190505093506125f2565b5f8451600161254a91906146ae565b6001600160401b0381111561256157612561613c44565b60405190808252806020026020018201604052801561258a578160200160208202803683370190505b5090505f5b85518110156125ee578581815181106125aa576125aa61466e565b60200260200101518282815181106125c4576125c461466e565b6001600160a01b0390921660209283029190910190910152806125e681614696565b91505061258f565b5093505b8282815181106126045761260461466e565b60200260200101515f0151846001865161261e91906146e7565b8151811061262e5761262e61466e565b60200260200101906001600160a01b031690816001600160a01b0316815250505b508061265a81614696565b915050612458565b509092915050565b601854604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c0a573d5f803e3d5ffd5b6126e76040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f92169063ea723132906024015f60405180830381865afa15801561272e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127559190810190614913565b8051835260208101516040840152601a549091506001600160a01b0316156127f057601a54604051634facce8160e01b81526001600160a01b03858116600483015290911690634facce81906024015f604051808303815f875af11580156127bf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127e69190810190614984565b6080830152612804565b604080515f81526020810190915260808301525b60408201515160208301819052608083015151606084015282515f911061282b575f61283c565b6020830151835161283c91906146e7565b836020015161284b91906146ae565b90508260200151836060015161286191906146ae565b81111561287f578260200151836060015161287c91906146ae565b90505b806001600160401b0381111561289757612897613c44565b6040519080825280602002602001820160405280156128c0578160200160208202803683370190505b5060a08401525f5b836020015181101561292557836040015181815181106128ea576128ea61466e565b60200260200101518460a0015182815181106129085761290861466e565b60209081029190910101528061291d81614696565b9150506128c8565b505f83602001518261293791906146e7565b90505f5b818110801561294d5750846060015181105b156120f257846080015181815181106129685761296861466e565b60200260200101518560a0015182876020015161298591906146ae565b815181106129955761299561466e565b6020908102919091010152806129aa81614696565b91505061293b565b6129dc60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f6129ed848463ffffffff16612303565b9050600481604051611c7b919061455e565b600b546040516399f9140560e01b81526001600160a01b0383811660048301526060925f929116906399f91405906024015f60405180830381865afa158015612a4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a719190810190614b0e565b6001600160a01b0384165f90815260066020908152604080832080548251818502810185019093528083529495509293909291849084015b82821015612aec578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612aa9565b5050505090505f81518351612b0191906146ae565b6001600160401b03811115612b1857612b18613c44565b604051908082528060200260200182016040528015612b5c57816020015b604080518082019091525f8082526020820152815260200190600190039081612b365790505b5090505f805b8451811015612c13576001600160a01b0387165f908152600e602052604081208651909190879084908110612b9957612b9961466e565b60209081029190910181015181015182528101919091526040015f205460ff16612c0157848181518110612bcf57612bcf61466e565b6020026020010151838380612be390614696565b945081518110612bf557612bf561466e565b60200260200101819052505b80612c0b81614696565b915050612b62565b505f5b8351811015612cc7576001600160a01b0387165f908152600e602052604081208551909190869084908110612c4d57612c4d61466e565b60209081029190910181015181015182528101919091526040015f205460ff16612cb557838181518110612c8357612c8361466e565b6020026020010151838380612c9790614696565b945081518110612ca957612ca961466e565b60200260200101819052505b80612cbf81614696565b915050612c16565b505f816001600160401b03811115612ce157612ce1613c44565b604051908082528060200260200182016040528015612d2557816020015b604080518082019091525f8082526020820152815260200190600190039081612cff5790505b5090505f5b82811015612d7c57838181518110612d4457612d4461466e565b6020026020010151828281518110612d5e57612d5e61466e565b60200260200101819052508080612d7490614696565b915050612d2a565b509695505050505050565b6006602052815f5260405f208181548110612da0575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b612dc76133de565b815b8181116110c157600b54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015612e17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e3b9190614657565b5f8281526003602052604090205580612e5381614696565b915050612dc9565b612e636133de565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b612e8d6133de565b80604051602001612e9e919061455e565b60408051601f19818403018152919052805160209091012060135550565b612ec46133de565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604090205460ff161515600114612f05575f80fd5b63ffffffff82165f90815260036020526040902054612f259082906146ae565b63ffffffff9092165f9081526003602052604090209190915550565b5f612f4a611dca565b821115612f5857505f919050565b601054821015612f6957505f919050565b6001601154612f7891906146e7565b82612f81611dca565b612f8b91906146e7565b1192915050565b5f612f9b613410565b60135485604051602001612faf919061455e565b6040516020818303038152906040528051906020012014612fe25760405162461bcd60e51b815260040161108d90614579565b5f612fec85613484565b90508215613070576015546040516321def88d60e01b81526001600160a01b03909116906321def88d9061302a908890859089908990600401614bb2565b6020604051808303815f875af1158015613046573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061306a91906145f6565b506130e3565b6015546040516264974560e91b81526001600160a01b039091169063c92e8a00906130a19088908590600401614a4a565b6020604051808303815f875af11580156130bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e191906145f6565b505b50600195945050505050565b5f601154826130fc611dca565b61310691906146e7565b1092915050565b60608585858585604051602001613128959493929190614c41565b604051602081830303815290604052905095945050505050565b61314a6133de565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6131746133de565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b61319e6133de565b600f55565b5f9182526008602090815260408084209284529190529020546001600160a01b0316151590565b6131d26133de565b601055565b6131df6133de565b600180546001600160a01b0383166001600160a01b031990911681179091556132155f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6132566133de565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af11580156132a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132c691906145f6565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061332d9190614657565b949350505050565b61333d6133de565b6001600160a01b03165f908152600260205260409020805460ff19166001179055565b6133686133de565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6133926133de565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6133bc6133de565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611d445760405163118cdaa760e01b815233600482015260240161108d565b5f5460ff1615611d445760405163d93c066560e01b815260040160405180910390fd5b61343b613a85565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b601a546060906001600160a01b03161561350957601a54604051634facce8160e01b81526001600160a01b03848116600483015290911690634facce81906024015f604051808303815f875af11580156134e0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135079190810190614984565b505b5f613513836129ff565b8051909150613520611bc3565b8111156135325761352f611bc3565b90505b5f8080835b8015613597575f6135496001836146e7565b90506135718782815181106135605761356061466e565b602002602001015160200151612f41565b15613584576135816001866146ae565b94505b508061358f81614c5d565b915050613537565b505f6135a284611cbd565b915050803410156136005760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f7567682066756e64732073656e743b20636865636b20666565604482015261732160f01b606482015260840161108d565b620f42405f866001600160401b0381111561361d5761361d613c44565b60405190808252806020026020018201604052801561366157816020015b604080518082019091525f808252602082015281526020019060019003908161363b5790505b50905089875b8015613904575f6136796001836146e7565b90506136908b82815181106135605761356061466e565b156138f1578a81815181106136a7576136a761466e565b60200260200101515f0151886136bd91906146ae565b97505f60035f8d84815181106136d5576136d561466e565b60200260200101516020015181526020019081526020015f20548663ffffffff168d84815181106137085761370861466e565b60200260200101515f015161371d9190614c72565b613727919061489c565b90506137338189614c89565b975060405180604001604052808263ffffffff1681526020018d848151811061375e5761375e61466e565b60200260200101516020015181525085838151811061377f5761377f61466e565b60200260200101819052505f6137b2858e85815181106137a1576137a161466e565b602002602001015160200151612303565b90506004816040516137c4919061455e565b90815260200160405180910390206005826040516137e2919061455e565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b039091161781556001808401549082015560029283015492019190915560049061383190839061455e565b90815260405190819003602001902080546001600160a01b03191681555f600182018190556002909101558c516138879086908f90869081106138765761387661466e565b602002602001015160200151613aa7565b6001600e5f876001600160a01b03166001600160a01b031681526020019081526020015f205f8f86815181106138bf576138bf61466e565b60200260200101516020015181526020019081526020015f205f6101000a81548160ff02191690831515021790555050505b50806138fc81614c5d565b915050613667565b506019546001600160a01b0316156139d8576040805160028082526060820183525f9260208301908036833701905050905087815f815181106139495761394961466e565b60200260200101818152505086816001815181106139695761396961466e565b60209081029190910101526019546040516336df2fb760e21b81526001600160a01b039091169063db7cbedc906139a9908f9060029086906004016146c1565b5f604051808303815f87803b1580156139c0575f80fd5b505af11580156139d2573d5f803e3d5ffd5b50505050505b604080516001600160a01b038d168152602081018990529081018790527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a1509998505050505050505050565b600180546001600160a01b031916905561238281613b96565b613a51613410565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134673390565b5f5460ff16611d4457604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b0382165f908152600660205260408120905b8154811015613b905782828281548110613adc57613adc61466e565b905f5260205f2090600202016001015403613b7e5781548290613b01906001906146e7565b81548110613b1157613b1161466e565b905f5260205f209060020201828281548110613b2f57613b2f61466e565b5f918252602090912082546002909202019081556001918201549101558154829080613b5d57613b5d614cad565b5f8281526020812060025f1990930192830201818155600101559055613b90565b80613b8881614696565b915050613ac0565b50505050565b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b5f60208284031215613bfe575f80fd5b5035919050565b6001600160a01b0381168114612382575f80fd5b8035613c2481613c05565b919050565b5f60208284031215613c39575f80fd5b81356122eb81613c05565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715613c7a57613c7a613c44565b60405290565b604080519081016001600160401b0381118282101715613c7a57613c7a613c44565b604051601f8201601f191681016001600160401b0381118282101715613cca57613cca613c44565b604052919050565b5f6001600160401b03821115613cea57613cea613c44565b50601f01601f191660200190565b5f613d0a613d0584613cd2565b613ca2565b9050828152838383011115613d1d575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112613d42575f80fd5b6122eb83833560208501613cf8565b5f8083601f840112613d61575f80fd5b5081356001600160401b03811115613d77575f80fd5b6020830191508360208260051b85010111156119e3575f80fd5b5f805f805f805f805f60c08a8c031215613da9575f80fd5b89356001600160401b0380821115613dbf575f80fd5b613dcb8d838e01613d33565b9a50613dd960208d01613c19565b995060408c0135915080821115613dee575f80fd5b613dfa8d838e01613d51565b909950975060608c0135915080821115613e12575f80fd5b613e1e8d838e01613d51565b909750955060808c0135915080821115613e36575f80fd5b50613e438c828d01613d51565b9a9d999c50979a9699959894979660a00135949350505050565b5f8060408385031215613e6e575f80fd5b50508035926020909101359150565b602080825282518282018190525f919060409081850190868401855b82811015613ec85781518051855286810151878601528501518585015260609093019290850190600101613e99565b5091979650505050505050565b5f8060208385031215613ee6575f80fd5b82356001600160401b03811115613efb575f80fd5b613f0785828601613d51565b90969095509350505050565b5f5b83811015613f2d578181015183820152602001613f15565b50505f910152565b5f8151808452613f4c816020860160208601613f13565b601f01601f19169290920160200192915050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015613fe657888303603f19018552815180516001600160a01b0316845287810151608089860181905290613fbe82870182613f35565b838a0151878b0152606093840151939096019290925250509386019390860190600101613f85565b509098975050505050505050565b5f8060408385031215614005575f80fd5b823561401081613c05565b946020939093013593505050565b5f6001600160401b0382111561403657614036613c44565b5060051b60200190565b5f8060408385031215614051575f80fd5b82356001600160401b03811115614066575f80fd5b8301601f81018513614076575f80fd5b80356020614086613d058361401e565b82815260059290921b830181019181810190888411156140a4575f80fd5b938201935b838510156140c2578435825293820193908201906140a9565b98969091013596505050505050565b5f8151808452602080850194508084015f5b838110156140ff578151875295820195908201906001016140e3565b509495945050505050565b602081525f6122eb60208301846140d1565b803563ffffffff81168114613c24575f80fd5b5f8060408385031215614140575f80fd5b823561414b81613c05565b91506141596020840161411c565b90509250929050565b5f805f805f8060608789031215614177575f80fd5b86356001600160401b038082111561418d575f80fd5b6141998a838b01613d51565b909850965060208901359150808211156141b1575f80fd5b6141bd8a838b01613d51565b909650945060408901359150808211156141d5575f80fd5b506141e289828a01613d51565b979a9699509497509295939492505050565b6020815281516020820152602082015160408201525f604083015160c0606084015261422360e08401826140d1565b9050606084015160808401526080840151601f19808584030160a086015261424b83836140d1565b925060a08601519150808584030160c08601525061426982826140d1565b95945050505050565b5f60208284031215614282575f80fd5b81356001600160401b03811115614297575f80fd5b8201601f810184136142a7575f80fd5b61332d84823560208401613cf8565b5f80604083850312156142c7575f80fd5b82356001600160401b038111156142dc575f80fd5b6142e885828601613d33565b92505060208301356142f981613c05565b809150509250929050565b602081525f6122eb6020830184613f35565b8015158114612382575f80fd5b5f60208284031215614333575f80fd5b81356122eb81614316565b602080825282518282018190525f9190848201906040850190845b8181101561437e5783516001600160a01b031683529284019291840191600101614359565b50909695505050505050565b602080825282518282018190525f919060409081850190868401855b82811015613ec8578151805185528601518685015292840192908501906001016143a6565b5f602082840312156143db575f80fd5b81356001600160401b038111156143f0575f80fd5b61332d84828501613d33565b5f806040838503121561440d575f80fd5b6140108361411c565b5f805f8060608587031215614429575f80fd5b84356001600160401b038082111561443f575f80fd5b61444b88838901613d33565b95506020870135915061445d82613c05565b90935060408601359080821115614472575f80fd5b5061447f87828801613d51565b95989497509550505050565b5f805f805f6060868803121561449f575f80fd5b8535945060208601356001600160401b03808211156144bc575f80fd5b6144c889838a01613d51565b909650945060408801359150808211156144e0575f80fd5b506144ed88828901613d51565b969995985093965092949392505050565b5f805f60608486031215614510575f80fd5b833561451b81613c05565b9250602084013561452b81613c05565b929592945050506040919091013590565b5f806040838503121561454d575f80fd5b505080516020909101519092909150565b5f825161456f818460208701613f13565b9190910192915050565b6020808252600f908201526e105c1c081b9bdd08185b1b1bddd959608a1b604082015260600190565b8183525f6001600160fb1b038311156145b9575f80fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526040602082018190525f9061426990830184866145a2565b5f60208284031215614606575f80fd5b81516122eb81614316565b606081525f61462360608301886140d1565b82810360208401526146368187896145a2565b9050828103604084015261464b8185876145a2565b98975050505050505050565b5f60208284031215614667575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016146a7576146a7614682565b5060010190565b8082018082111561196457611964614682565b60018060a01b0384168152826020820152606060408201525f61426960608301846140d1565b8181038181111561196457611964614682565b602081525f61332d6020830184866145a2565b5f82601f83011261471c575f80fd5b815161472a613d0582613cd2565b81815284602083860101111561473e575f80fd5b61332d826020830160208701613f13565b5f6020808385031215614760575f80fd5b82516001600160401b0380821115614776575f80fd5b818501915085601f830112614789575f80fd5b8151614797613d058261401e565b81815260059190911b830184019084810190888311156147b5575f80fd5b8585015b83811015614847578051858111156147d0575f8081fd5b86016080818c03601f19018113156147e7575f8081fd5b6147ef613c58565b898301516147fc81613c05565b815260408381015189811115614811575f8081fd5b61481f8f8d8388010161470d565b838d0152506060848101519183019190915291909201519082015283529186019186016147b9565b5098975050505050505050565b606081525f61486760608301888a6145a2565b828103602084015261487a8187896145a2565b9050828103604084015261488f8185876145a2565b9998505050505050505050565b5f826148b657634e487b7160e01b5f52601260045260245ffd5b500490565b5f82601f8301126148ca575f80fd5b815160206148da613d058361401e565b82815260059290921b840181019181810190868411156148f8575f80fd5b8286015b84811015612d7c57805183529183019183016148fc565b5f60208284031215614923575f80fd5b81516001600160401b0380821115614939575f80fd5b908301906040828603121561494c575f80fd5b614954613c80565b82518152602083015182811115614969575f80fd5b614975878286016148bb565b60208301525095945050505050565b5f60208284031215614994575f80fd5b81516001600160401b038111156149a9575f80fd5b61332d848285016148bb565b8082025f8212600160ff1b841416156149d0576149d0614682565b818105831482151761196457611964614682565b8082018281125f831280158216821582161715614a0357614a03614682565b505092915050565b5f8151808452602080850194508084015f5b838110156140ff578151805163ffffffff1688528301518388015260409096019590820190600101614a1d565b6001600160a01b03831681526040602082018190525f9061332d90830184614a0b565b5f805f805f805f60e0888a031215614a83575f80fd5b8751614a8e81613c05565b60208901519097506001600160401b0380821115614aaa575f80fd5b614ab68b838c0161470d565b975060408a0151915080821115614acb575f80fd5b50614ad88a828b0161470d565b955050606088015193506080880151925060a0880151915060c0880151614afe81614316565b8091505092959891949750929550565b5f6020808385031215614b1f575f80fd5b82516001600160401b03811115614b34575f80fd5b8301601f81018513614b44575f80fd5b8051614b52613d058261401e565b81815260069190911b82018301908381019087831115614b70575f80fd5b928401925b82841015611dbf5760408489031215614b8d575f8081fd5b614b95613c80565b845181528585015186820152825260409093019290840190614b75565b5f60018060a01b0380871683526020606081850152614bd46060850188614a0b565b8481036040860152858152869082015f5b87811015614c0c578235614bf881613c05565b851682529183019190830190600101614be5565b509998505050505050505050565b5f6001600160fb1b03831115614c2e575f80fd5b8260051b80838637939093019392505050565b8581525f611dbf614c56602084018789614c1a565b8486614c1a565b5f81614c6b57614c6b614682565b505f190190565b808202811582820484141761196457611964614682565b63ffffffff818116838216019080821115614ca657614ca6614682565b5092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b2d8e7e1ed2126defb28a04a260c24a753558eacd14b346029732c5a3e041e2b64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106104a5575f3560e01c806381da45b211610262578063cd4309671161014a578063ef62071f116100be578063f7f5ed6111610083578063f7f5ed6114610f7a578063f88c4d0214610f99578063f897a22b14610fc4578063f8fd09e414610fe3578063ff62309c14611002578063ffc345c614611021575f80fd5b8063ef62071f14610eae578063f2fde38b14610ecd578063f5537ede14610eec578063f6bd02fa14610f0b578063f6df805514610f2a575f80fd5b8063dfda09051161010f578063dfda090514610ddc578063e30c397814610dfb578063e438005d14610e18578063e4542aae14610e37578063e5b5462d14610e56578063ec45864e14610e75575f80fd5b8063cd43096714610d4d578063d01460ca14610d60578063d2f9d45b14610d7f578063d9be4b3e14610d9e578063dac6b05014610dbd575f80fd5b806399f91405116101e1578063b2467949116101a6578063b246794914610c3d578063b6b2ae0314610c5c578063b6b67d9e14610c7b578063bbac408c14610c9a578063c1df5cc814610d0f578063cb0e122a14610d2e575f80fd5b806399f9140514610b955780639ea507f214610bc15780639edbc24614610be05780639ff7a39d14610bff578063ab5f5d8d14610c1e575f80fd5b80638f3277fe116102275780638f3277fe14610b04578063925b506a14610b185780639464361d14610b4357806394a4c34a14610b6257806399a5432a14610b81575f80fd5b806381da45b214610a705780638456cb5914610a8f5780638685343614610aa35780638da5cb5b14610ac25780638e45870f14610ae3575f80fd5b8063430fe9c11161039057806360a1da831161030457806370f9cecf116102c957806370f9cecf146109c9578063715018a6146109e85780637231535a146109fc5780637232ed2714610a1157806379ba509714610a3d5780637ca93f5a14610a51575f80fd5b806360a1da83146108f45780636725cda11461090757806367645bbb146109265780636a9f2807146109655780636d37eda51461099e575f80fd5b806353d09aac1161035557806353d09aac14610826578063557ed1ba1461085257806358a215b01461086657806359fa047d146108855780635c975abb146108bf5780635e37fb00146108d5575f80fd5b8063430fe9c114610787578063440f82c91461079b5780634b6592cc146107ba57806351e0e26b146107d9578063527ba9af14610807575f80fd5b806337280408116104275780633de2662c116103ec5780633de2662c146106b75780633e0e44d0146107015780633e3ff7b6146107205780633f4ba83a146107355780633fc15f15146107495780633fce590814610768575f80fd5b806337280408146106155780633c010dc9146106365780633ccfd60b1461066f5780633d93e02e146106775780633db7aced146106a3575f80fd5b806312065fe01161046d57806312065fe01461055f57806319174c23146105715780631e5e99061461059d57806332cbe4c4146105c857806334dc8ea5146105e1575f80fd5b806304a8d707146104a95780630562b9f7146104d157806307e438e2146104e65780630966a6a51461051d5780630b7f52df1461053c575b5f80fd5b3480156104b4575f80fd5b506104be60115481565b6040519081526020015b60405180910390f35b6104e46104df366004613bee565b611040565b005b3480156104f1575f80fd5b50600b54610505906001600160a01b031681565b6040516001600160a01b0390911681526020016104c8565b348015610528575f80fd5b506104e4610537366004613c29565b6110c6565b61054f61054a366004613d91565b6110f0565b60405190151581526020016104c8565b34801561056a575f80fd5b50476104be565b34801561057c575f80fd5b5061059061058b366004613e5d565b61185a565b6040516104c89190613e7d565b3480156105a8575f80fd5b506104be6105b7366004613bee565b5f9081526003602052604090205490565b3480156105d3575f80fd5b5060125461054f9060ff1681565b3480156105ec575f80fd5b506106006105fb366004613ed5565b61196a565b604080519283526020830191909152016104c8565b348015610620575f80fd5b506106296119ea565b6040516104c89190613f60565b348015610641575f80fd5b5061054f610650366004613ff4565b600760209081525f928352604080842090915290825290205460ff1681565b6104e4611a5d565b348015610682575f80fd5b50610696610691366004614040565b611a94565b6040516104c8919061410a565b3480156106ae575f80fd5b506104be611bc3565b3480156106c2575f80fd5b506106d66106d136600461412f565b611c2e565b6040805182516001600160a01b031681526020808401519082015291810151908201526060016104c8565b34801561070c575f80fd5b5061060061071b366004613bee565b611cbd565b34801561072b575f80fd5b506104be60105481565b348015610740575f80fd5b506104e4611d34565b348015610754575f80fd5b50601d54610505906001600160a01b031681565b348015610773575f80fd5b506104be610782366004614162565b611d46565b348015610792575f80fd5b506104be611dca565b3480156107a6575f80fd5b506104be6107b5366004613c29565b611de1565b3480156107c5575f80fd5b50601954610505906001600160a01b031681565b3480156107e4575f80fd5b5061054f6107f3366004613c29565b60026020525f908152604090205460ff1681565b348015610812575f80fd5b50601c54610505906001600160a01b031681565b348015610831575f80fd5b50610845610840366004613c29565b611df2565b6040516104c891906141f4565b34801561085d575f80fd5b506104be6120fb565b348015610871575f80fd5b506104e4610880366004613bee565b612116565b348015610890575f80fd5b5061054f61089f366004614272565b805160208183018101805160098252928201919093012091525460ff1681565b3480156108ca575f80fd5b505f5460ff1661054f565b3480156108e0575f80fd5b506104e46108ef366004613c29565b612123565b61054f6109023660046142b6565b61214b565b348015610912575f80fd5b506104e4610921366004613c29565b612222565b348015610931575f80fd5b50610505610940366004613e5d565b600860209081525f92835260408084209091529082529020546001600160a01b031681565b348015610970575f80fd5b5061054f61097f366004613ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b3480156109a9575f80fd5b506104be6109b8366004613bee565b60036020525f908152604090205481565b3480156109d4575f80fd5b5061054f6109e3366004613ff4565b61224c565b3480156109f3575f80fd5b506104e46122f2565b348015610a07575f80fd5b506104be600f5481565b348015610a1c575f80fd5b50610a30610a2b366004613ff4565b612303565b6040516104c89190614304565b348015610a48575f80fd5b506104e4612341565b348015610a5c575f80fd5b50601754610505906001600160a01b031681565b348015610a7b575f80fd5b506104e4610a8a366004614323565b612385565b348015610a9a575f80fd5b506104e46123a0565b348015610aae575f80fd5b506104e4610abd366004613c29565b6123b0565b348015610acd575f80fd5b505f5461010090046001600160a01b0316610505565b348015610aee575f80fd5b50610af76123da565b6040516104c8919061433e565b348015610b0f575f80fd5b506104be61266a565b348015610b23575f80fd5b506104be610b32366004613bee565b600a6020525f908152604090205481565b348015610b4e575f80fd5b50610845610b5d366004613c29565b6126b1565b348015610b6d575f80fd5b506106d6610b7c36600461412f565b6129b2565b348015610b8c575f80fd5b506011546104be565b348015610ba0575f80fd5b50610bb4610baf366004613c29565b6129ff565b6040516104c8919061438a565b348015610bcc575f80fd5b50610600610bdb366004613ff4565b612d87565b348015610beb575f80fd5b506104e4610bfa366004613e5d565b612dbf565b348015610c0a575f80fd5b506104e4610c19366004613c29565b612e5b565b348015610c29575f80fd5b506104e4610c383660046143cb565b612e85565b348015610c48575f80fd5b50601654610505906001600160a01b031681565b348015610c67575f80fd5b506104e4610c76366004613c29565b612ebc565b348015610c86575f80fd5b506104e4610c953660046143fc565b612ee6565b348015610ca5575f80fd5b50610cea610cb4366004614272565b80516020818301810180516005825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016104c8565b348015610d1a575f80fd5b5061054f610d29366004613bee565b612f41565b348015610d39575f80fd5b50601554610505906001600160a01b031681565b61054f610d5b366004614416565b612f92565b348015610d6b575f80fd5b5061054f610d7a366004613bee565b6130ef565b348015610d8a575f80fd5b50610a30610d9936600461448b565b61310d565b348015610da9575f80fd5b50601854610505906001600160a01b031681565b348015610dc8575f80fd5b506104e4610dd7366004613c29565b613142565b348015610de7575f80fd5b50601a54610505906001600160a01b031681565b348015610e06575f80fd5b506001546001600160a01b0316610505565b348015610e23575f80fd5b506104e4610e32366004613c29565b61316c565b348015610e42575f80fd5b506104e4610e51366004613bee565b613196565b348015610e61575f80fd5b5061054f610e70366004613e5d565b6131a3565b348015610e80575f80fd5b5061054f610e8f366004613ff4565b600c60209081525f928352604080842090915290825290205460ff1681565b348015610eb9575f80fd5b506104e4610ec8366004613bee565b6131ca565b348015610ed8575f80fd5b506104e4610ee7366004613c29565b6131d7565b348015610ef7575f80fd5b506104be610f063660046144fe565b61324d565b348015610f16575f80fd5b506104e4610f25366004613c29565b613335565b348015610f35575f80fd5b50610cea610f44366004614272565b80516020818301810180516004825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b348015610f85575f80fd5b506104e4610f94366004613c29565b613360565b348015610fa4575f80fd5b506104be610fb3366004613c29565b600d6020525f908152604090205481565b348015610fcf575f80fd5b50601b54610505906001600160a01b031681565b348015610fee575f80fd5b50601454610505906001600160a01b031681565b34801561100d575f80fd5b506104e461101c366004613c29565b61338a565b34801561102c575f80fd5b506104e461103b366004613c29565b6133b4565b6110486133de565b478111156110965760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b33806108fc476040518115909202915f818181858888f193505050501580156110c1573d5f803e3d5ffd5b505050565b6110ce6133de565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b5f6110f9613410565b611102826130ef565b6111445760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b604482015260640161108d565b5f61114e8a6126b1565b60a001516018546040516334dc8ea560e01b81529192505f916001600160a01b03909116906334dc8ea59061118790859060040161410a565b6040805180830381865afa1580156111a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c5919061453c565b915050803410156112105760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b604482015260640161108d565b6013548c604051602001611224919061455e565b60405160208183030381529060405280519060200120146112575760405162461bcd60e51b815260040161108d90614579565b60145460405163a713e45b60e01b81526001600160a01b039091169063a713e45b9061128b908e908e908e906004016145d2565b602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca91906145f6565b61130a5760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b21039bab136b4ba3a32b960791b604482015260640161108d565b5f6113158c86612303565b90506113218c8661224c565b156113625760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b604482015260640161108d565b5f611370868b8b8b8b61310d565b60125490915060ff1615806113a55750600981604051611390919061455e565b9081526040519081900360200190205460ff16155b6113ea5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b604482015260640161108d565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac327906114229088908f908f908f908f90600401614611565b602060405180830381865afa15801561143d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114619190614657565b90505f81116114b25760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d69747465640000604482015260640161108d565b5f8e90505f6040518060600160405280836001600160a01b031681526020018481526020018a81525090505f5b87518110156115d45761150b8882815181106114fd576114fd61466e565b60200260200101518b6131a3565b156115645760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b606482015260840161108d565b8260085f8a848151811061157a5761157a61466e565b602002602001015181526020019081526020015f205f8c81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555080806115cc90614696565b9150506114df565b506020808201515f8b815260039092526040909120546115f491906146ae565b5f8a815260036020908152604080832093909355600a90529081208054600192906116209084906146ae565b90915550506001600160a01b0382165f818152600660209081526040808320815180830183528684015181528084018f8152825460018181018555938752858720925160029091029092019182555190820155938352600782528083208d845290915290819020805460ff19169092179091555181906004906116a490889061455e565b908152604080519182900360209081018320845181546001600160a01b039091166001600160a01b03199091161781559084015160018083019190915593909101516002909101556009906116fa90879061455e565b908152604051908190036020019020805491151560ff199092169190911790556019546001600160a01b0316156117f1576040805160028082526060820183525f9260208301908036833701905050905089815f8151811061175e5761175e61466e565b6020026020010181815250508160200151816001815181106117825761178261466e565b60209081029190910101526019546040516336df2fb760e21b81526001600160a01b039091169063db7cbedc906117c290869060019086906004016146c1565b5f604051808303815f87803b1580156117d9575f80fd5b505af11580156117eb573d5f803e3d5ffd5b50505050505b602080820151604080519182526001600160a01b038516928201929092529081018a90527f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f19060600160405180910390a160019750505050505050509998505050505050505050565b60605f826001600160401b0381111561187557611875613c44565b6040519080825280602002602001820160405280156118c757816020015b6118b460405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816118935790505b5090505f5b8381101561196057604051806060016040528082876118eb91906146e7565b8152602001600a5f6118fd858a6146e7565b81526020019081526020015f2054815260200160035f848961191f91906146e7565b81526020019081526020015f20548152508282815181106119425761194261466e565b6020026020010181905250808061195890614696565b9150506118cc565b5090505b92915050565b6018546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906119a090879087906004016146fa565b6040805180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de919061453c565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa158015611a31573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a58919081019061474f565b905090565b611a656133de565b33806108fc476040518115909202915f818181858888f19350505050158015611a90573d5f803e3d5ffd5b5050565b60605f805b8451811015611aea57611ac5858281518110611ab757611ab761466e565b6020026020010151856131a3565b15611ad85781611ad481614696565b9250505b80611ae281614696565b915050611a99565b50806001600160401b03811115611b0357611b03613c44565b604051908082528060200260200182016040528015611b2c578160200160208202803683370190505b5091505f805b8551811015611bba57611b5e868281518110611b5057611b5061466e565b6020026020010151866131a3565b15611ba857858181518110611b7557611b7561466e565b6020026020010151848380611b8990614696565b945081518110611b9b57611b9b61466e565b6020026020010181815250505b80611bb281614696565b915050611b32565b50505092915050565b60185460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a589190614657565b611c5860405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c69848463ffffffff16612303565b9050600581604051611c7b919061455e565b90815260408051918290036020908101832060608401835280546001600160a01b03168452600181015491840191909152600201549082015291505092915050565b6018546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611d07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2b919061453c565b91509150915091565b611d3c6133de565b611d44613433565b565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611d80908a908a908a908a908a908a90600401614854565b602060405180830381865afa158015611d9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dbf9190614657565b979650505050505050565b5f62015180611dd76120fb565b611a58919061489c565b5f611deb826129ff565b5192915050565b611e286040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f92169063ea723132906024015f60405180830381865afa158015611e6f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e969190810190614913565b8051835260208101516040840152601a549091506001600160a01b031615611f3057601a546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa158015611eff573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f269190810190614984565b6080830152611f44565b604080515f81526020810190915260808301525b60408201515160208301819052608083015151606084015282515f9110611f6b575f611f7c565b60208301518351611f7c91906146e7565b8360200151611f8b91906146ae565b905082602001518360600151611fa191906146ae565b811115611fbf5782602001518360600151611fbc91906146ae565b90505b806001600160401b03811115611fd757611fd7613c44565b604051908082528060200260200182016040528015612000578160200160208202803683370190505b5060a08401525f5b8360200151811015612065578360400151818151811061202a5761202a61466e565b60200260200101518460a0015182815181106120485761204861466e565b60209081029190910101528061205d81614696565b915050612008565b505f83602001518261207791906146e7565b90505f5b818110801561208d5750846060015181105b156120f257846080015181815181106120a8576120a861466e565b60200260200101518560a001518287602001516120c591906146ae565b815181106120d5576120d561466e565b6020908102919091010152806120ea81614696565b91505061207b565b50505050919050565b5f600f54610e1061210c91906149b5565b611a5890426149e4565b61211e6133de565b601155565b61212b6133de565b6001600160a01b03165f908152600260205260409020805460ff19169055565b5f612154613410565b60135483604051602001612168919061455e565b604051602081830303815290604052805190602001201461219b5760405162461bcd60e51b815260040161108d90614579565b5f6121a583613484565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a00906121d79086908590600401614a4a565b6020604051808303815f875af11580156121f3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221791906145f6565b506001949350505050565b61222a6133de565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f90815260076020908152604080832084845290915281205460ff16806122eb5750600b546040516370f9cecf60e01b81526001600160a01b03858116600483015260248201859052909116906370f9cecf90604401602060405180830381865afa1580156122c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122eb91906145f6565b9392505050565b6122fa6133de565b611d445f613a30565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b60015433906001600160a01b031681146123795760405163118cdaa760e01b81526001600160a01b038216600482015260240161108d565b61238281613a30565b50565b61238d6133de565b6012805460ff1916911515919091179055565b6123a86133de565b611d44613a49565b6123b86133de565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6060805f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa15801561242d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612454919081019061474f565b90505f5b81518110156126625760155482515f916001600160a01b0316906313ff7e9f9085908590811061248a5761248a61466e565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa1580156124d7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124fe9190810190614a6d565b9650508515945061264f93505050505783515f0361253b5760408051600180825281830190925290602080830190803683370190505093506125f2565b5f8451600161254a91906146ae565b6001600160401b0381111561256157612561613c44565b60405190808252806020026020018201604052801561258a578160200160208202803683370190505b5090505f5b85518110156125ee578581815181106125aa576125aa61466e565b60200260200101518282815181106125c4576125c461466e565b6001600160a01b0390921660209283029190910190910152806125e681614696565b91505061258f565b5093505b8282815181106126045761260461466e565b60200260200101515f0151846001865161261e91906146e7565b8151811061262e5761262e61466e565b60200260200101906001600160a01b031690816001600160a01b0316815250505b508061265a81614696565b915050612458565b509092915050565b601854604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c0a573d5f803e3d5ffd5b6126e76040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f92169063ea723132906024015f60405180830381865afa15801561272e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127559190810190614913565b8051835260208101516040840152601a549091506001600160a01b0316156127f057601a54604051634facce8160e01b81526001600160a01b03858116600483015290911690634facce81906024015f604051808303815f875af11580156127bf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127e69190810190614984565b6080830152612804565b604080515f81526020810190915260808301525b60408201515160208301819052608083015151606084015282515f911061282b575f61283c565b6020830151835161283c91906146e7565b836020015161284b91906146ae565b90508260200151836060015161286191906146ae565b81111561287f578260200151836060015161287c91906146ae565b90505b806001600160401b0381111561289757612897613c44565b6040519080825280602002602001820160405280156128c0578160200160208202803683370190505b5060a08401525f5b836020015181101561292557836040015181815181106128ea576128ea61466e565b60200260200101518460a0015182815181106129085761290861466e565b60209081029190910101528061291d81614696565b9150506128c8565b505f83602001518261293791906146e7565b90505f5b818110801561294d5750846060015181105b156120f257846080015181815181106129685761296861466e565b60200260200101518560a0015182876020015161298591906146ae565b815181106129955761299561466e565b6020908102919091010152806129aa81614696565b91505061293b565b6129dc60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f6129ed848463ffffffff16612303565b9050600481604051611c7b919061455e565b600b546040516399f9140560e01b81526001600160a01b0383811660048301526060925f929116906399f91405906024015f60405180830381865afa158015612a4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a719190810190614b0e565b6001600160a01b0384165f90815260066020908152604080832080548251818502810185019093528083529495509293909291849084015b82821015612aec578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612aa9565b5050505090505f81518351612b0191906146ae565b6001600160401b03811115612b1857612b18613c44565b604051908082528060200260200182016040528015612b5c57816020015b604080518082019091525f8082526020820152815260200190600190039081612b365790505b5090505f805b8451811015612c13576001600160a01b0387165f908152600e602052604081208651909190879084908110612b9957612b9961466e565b60209081029190910181015181015182528101919091526040015f205460ff16612c0157848181518110612bcf57612bcf61466e565b6020026020010151838380612be390614696565b945081518110612bf557612bf561466e565b60200260200101819052505b80612c0b81614696565b915050612b62565b505f5b8351811015612cc7576001600160a01b0387165f908152600e602052604081208551909190869084908110612c4d57612c4d61466e565b60209081029190910181015181015182528101919091526040015f205460ff16612cb557838181518110612c8357612c8361466e565b6020026020010151838380612c9790614696565b945081518110612ca957612ca961466e565b60200260200101819052505b80612cbf81614696565b915050612c16565b505f816001600160401b03811115612ce157612ce1613c44565b604051908082528060200260200182016040528015612d2557816020015b604080518082019091525f8082526020820152815260200190600190039081612cff5790505b5090505f5b82811015612d7c57838181518110612d4457612d4461466e565b6020026020010151828281518110612d5e57612d5e61466e565b60200260200101819052508080612d7490614696565b915050612d2a565b509695505050505050565b6006602052815f5260405f208181548110612da0575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b612dc76133de565b815b8181116110c157600b54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015612e17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e3b9190614657565b5f8281526003602052604090205580612e5381614696565b915050612dc9565b612e636133de565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b612e8d6133de565b80604051602001612e9e919061455e565b60408051601f19818403018152919052805160209091012060135550565b612ec46133de565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604090205460ff161515600114612f05575f80fd5b63ffffffff82165f90815260036020526040902054612f259082906146ae565b63ffffffff9092165f9081526003602052604090209190915550565b5f612f4a611dca565b821115612f5857505f919050565b601054821015612f6957505f919050565b6001601154612f7891906146e7565b82612f81611dca565b612f8b91906146e7565b1192915050565b5f612f9b613410565b60135485604051602001612faf919061455e565b6040516020818303038152906040528051906020012014612fe25760405162461bcd60e51b815260040161108d90614579565b5f612fec85613484565b90508215613070576015546040516321def88d60e01b81526001600160a01b03909116906321def88d9061302a908890859089908990600401614bb2565b6020604051808303815f875af1158015613046573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061306a91906145f6565b506130e3565b6015546040516264974560e91b81526001600160a01b039091169063c92e8a00906130a19088908590600401614a4a565b6020604051808303815f875af11580156130bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e191906145f6565b505b50600195945050505050565b5f601154826130fc611dca565b61310691906146e7565b1092915050565b60608585858585604051602001613128959493929190614c41565b604051602081830303815290604052905095945050505050565b61314a6133de565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6131746133de565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b61319e6133de565b600f55565b5f9182526008602090815260408084209284529190529020546001600160a01b0316151590565b6131d26133de565b601055565b6131df6133de565b600180546001600160a01b0383166001600160a01b031990911681179091556132155f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6132566133de565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af11580156132a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132c691906145f6565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613309573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061332d9190614657565b949350505050565b61333d6133de565b6001600160a01b03165f908152600260205260409020805460ff19166001179055565b6133686133de565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6133926133de565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6133bc6133de565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611d445760405163118cdaa760e01b815233600482015260240161108d565b5f5460ff1615611d445760405163d93c066560e01b815260040160405180910390fd5b61343b613a85565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b601a546060906001600160a01b03161561350957601a54604051634facce8160e01b81526001600160a01b03848116600483015290911690634facce81906024015f604051808303815f875af11580156134e0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135079190810190614984565b505b5f613513836129ff565b8051909150613520611bc3565b8111156135325761352f611bc3565b90505b5f8080835b8015613597575f6135496001836146e7565b90506135718782815181106135605761356061466e565b602002602001015160200151612f41565b15613584576135816001866146ae565b94505b508061358f81614c5d565b915050613537565b505f6135a284611cbd565b915050803410156136005760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f7567682066756e64732073656e743b20636865636b20666565604482015261732160f01b606482015260840161108d565b620f42405f866001600160401b0381111561361d5761361d613c44565b60405190808252806020026020018201604052801561366157816020015b604080518082019091525f808252602082015281526020019060019003908161363b5790505b50905089875b8015613904575f6136796001836146e7565b90506136908b82815181106135605761356061466e565b156138f1578a81815181106136a7576136a761466e565b60200260200101515f0151886136bd91906146ae565b97505f60035f8d84815181106136d5576136d561466e565b60200260200101516020015181526020019081526020015f20548663ffffffff168d84815181106137085761370861466e565b60200260200101515f015161371d9190614c72565b613727919061489c565b90506137338189614c89565b975060405180604001604052808263ffffffff1681526020018d848151811061375e5761375e61466e565b60200260200101516020015181525085838151811061377f5761377f61466e565b60200260200101819052505f6137b2858e85815181106137a1576137a161466e565b602002602001015160200151612303565b90506004816040516137c4919061455e565b90815260200160405180910390206005826040516137e2919061455e565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b039091161781556001808401549082015560029283015492019190915560049061383190839061455e565b90815260405190819003602001902080546001600160a01b03191681555f600182018190556002909101558c516138879086908f90869081106138765761387661466e565b602002602001015160200151613aa7565b6001600e5f876001600160a01b03166001600160a01b031681526020019081526020015f205f8f86815181106138bf576138bf61466e565b60200260200101516020015181526020019081526020015f205f6101000a81548160ff02191690831515021790555050505b50806138fc81614c5d565b915050613667565b506019546001600160a01b0316156139d8576040805160028082526060820183525f9260208301908036833701905050905087815f815181106139495761394961466e565b60200260200101818152505086816001815181106139695761396961466e565b60209081029190910101526019546040516336df2fb760e21b81526001600160a01b039091169063db7cbedc906139a9908f9060029086906004016146c1565b5f604051808303815f87803b1580156139c0575f80fd5b505af11580156139d2573d5f803e3d5ffd5b50505050505b604080516001600160a01b038d168152602081018990529081018790527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a1509998505050505050505050565b600180546001600160a01b031916905561238281613b96565b613a51613410565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134673390565b5f5460ff16611d4457604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b0382165f908152600660205260408120905b8154811015613b905782828281548110613adc57613adc61466e565b905f5260205f2090600202016001015403613b7e5781548290613b01906001906146e7565b81548110613b1157613b1161466e565b905f5260205f209060020201828281548110613b2f57613b2f61466e565b5f918252602090912082546002909202019081556001918201549101558154829080613b5d57613b5d614cad565b5f8281526020812060025f1990930192830201818155600101559055613b90565b80613b8881614696565b915050613ac0565b50505050565b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b5f60208284031215613bfe575f80fd5b5035919050565b6001600160a01b0381168114612382575f80fd5b8035613c2481613c05565b919050565b5f60208284031215613c39575f80fd5b81356122eb81613c05565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715613c7a57613c7a613c44565b60405290565b604080519081016001600160401b0381118282101715613c7a57613c7a613c44565b604051601f8201601f191681016001600160401b0381118282101715613cca57613cca613c44565b604052919050565b5f6001600160401b03821115613cea57613cea613c44565b50601f01601f191660200190565b5f613d0a613d0584613cd2565b613ca2565b9050828152838383011115613d1d575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112613d42575f80fd5b6122eb83833560208501613cf8565b5f8083601f840112613d61575f80fd5b5081356001600160401b03811115613d77575f80fd5b6020830191508360208260051b85010111156119e3575f80fd5b5f805f805f805f805f60c08a8c031215613da9575f80fd5b89356001600160401b0380821115613dbf575f80fd5b613dcb8d838e01613d33565b9a50613dd960208d01613c19565b995060408c0135915080821115613dee575f80fd5b613dfa8d838e01613d51565b909950975060608c0135915080821115613e12575f80fd5b613e1e8d838e01613d51565b909750955060808c0135915080821115613e36575f80fd5b50613e438c828d01613d51565b9a9d999c50979a9699959894979660a00135949350505050565b5f8060408385031215613e6e575f80fd5b50508035926020909101359150565b602080825282518282018190525f919060409081850190868401855b82811015613ec85781518051855286810151878601528501518585015260609093019290850190600101613e99565b5091979650505050505050565b5f8060208385031215613ee6575f80fd5b82356001600160401b03811115613efb575f80fd5b613f0785828601613d51565b90969095509350505050565b5f5b83811015613f2d578181015183820152602001613f15565b50505f910152565b5f8151808452613f4c816020860160208601613f13565b601f01601f19169290920160200192915050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015613fe657888303603f19018552815180516001600160a01b0316845287810151608089860181905290613fbe82870182613f35565b838a0151878b0152606093840151939096019290925250509386019390860190600101613f85565b509098975050505050505050565b5f8060408385031215614005575f80fd5b823561401081613c05565b946020939093013593505050565b5f6001600160401b0382111561403657614036613c44565b5060051b60200190565b5f8060408385031215614051575f80fd5b82356001600160401b03811115614066575f80fd5b8301601f81018513614076575f80fd5b80356020614086613d058361401e565b82815260059290921b830181019181810190888411156140a4575f80fd5b938201935b838510156140c2578435825293820193908201906140a9565b98969091013596505050505050565b5f8151808452602080850194508084015f5b838110156140ff578151875295820195908201906001016140e3565b509495945050505050565b602081525f6122eb60208301846140d1565b803563ffffffff81168114613c24575f80fd5b5f8060408385031215614140575f80fd5b823561414b81613c05565b91506141596020840161411c565b90509250929050565b5f805f805f8060608789031215614177575f80fd5b86356001600160401b038082111561418d575f80fd5b6141998a838b01613d51565b909850965060208901359150808211156141b1575f80fd5b6141bd8a838b01613d51565b909650945060408901359150808211156141d5575f80fd5b506141e289828a01613d51565b979a9699509497509295939492505050565b6020815281516020820152602082015160408201525f604083015160c0606084015261422360e08401826140d1565b9050606084015160808401526080840151601f19808584030160a086015261424b83836140d1565b925060a08601519150808584030160c08601525061426982826140d1565b95945050505050565b5f60208284031215614282575f80fd5b81356001600160401b03811115614297575f80fd5b8201601f810184136142a7575f80fd5b61332d84823560208401613cf8565b5f80604083850312156142c7575f80fd5b82356001600160401b038111156142dc575f80fd5b6142e885828601613d33565b92505060208301356142f981613c05565b809150509250929050565b602081525f6122eb6020830184613f35565b8015158114612382575f80fd5b5f60208284031215614333575f80fd5b81356122eb81614316565b602080825282518282018190525f9190848201906040850190845b8181101561437e5783516001600160a01b031683529284019291840191600101614359565b50909695505050505050565b602080825282518282018190525f919060409081850190868401855b82811015613ec8578151805185528601518685015292840192908501906001016143a6565b5f602082840312156143db575f80fd5b81356001600160401b038111156143f0575f80fd5b61332d84828501613d33565b5f806040838503121561440d575f80fd5b6140108361411c565b5f805f8060608587031215614429575f80fd5b84356001600160401b038082111561443f575f80fd5b61444b88838901613d33565b95506020870135915061445d82613c05565b90935060408601359080821115614472575f80fd5b5061447f87828801613d51565b95989497509550505050565b5f805f805f6060868803121561449f575f80fd5b8535945060208601356001600160401b03808211156144bc575f80fd5b6144c889838a01613d51565b909650945060408801359150808211156144e0575f80fd5b506144ed88828901613d51565b969995985093965092949392505050565b5f805f60608486031215614510575f80fd5b833561451b81613c05565b9250602084013561452b81613c05565b929592945050506040919091013590565b5f806040838503121561454d575f80fd5b505080516020909101519092909150565b5f825161456f818460208701613f13565b9190910192915050565b6020808252600f908201526e105c1c081b9bdd08185b1b1bddd959608a1b604082015260600190565b8183525f6001600160fb1b038311156145b9575f80fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526040602082018190525f9061426990830184866145a2565b5f60208284031215614606575f80fd5b81516122eb81614316565b606081525f61462360608301886140d1565b82810360208401526146368187896145a2565b9050828103604084015261464b8185876145a2565b98975050505050505050565b5f60208284031215614667575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016146a7576146a7614682565b5060010190565b8082018082111561196457611964614682565b60018060a01b0384168152826020820152606060408201525f61426960608301846140d1565b8181038181111561196457611964614682565b602081525f61332d6020830184866145a2565b5f82601f83011261471c575f80fd5b815161472a613d0582613cd2565b81815284602083860101111561473e575f80fd5b61332d826020830160208701613f13565b5f6020808385031215614760575f80fd5b82516001600160401b0380821115614776575f80fd5b818501915085601f830112614789575f80fd5b8151614797613d058261401e565b81815260059190911b830184019084810190888311156147b5575f80fd5b8585015b83811015614847578051858111156147d0575f8081fd5b86016080818c03601f19018113156147e7575f8081fd5b6147ef613c58565b898301516147fc81613c05565b815260408381015189811115614811575f8081fd5b61481f8f8d8388010161470d565b838d0152506060848101519183019190915291909201519082015283529186019186016147b9565b5098975050505050505050565b606081525f61486760608301888a6145a2565b828103602084015261487a8187896145a2565b9050828103604084015261488f8185876145a2565b9998505050505050505050565b5f826148b657634e487b7160e01b5f52601260045260245ffd5b500490565b5f82601f8301126148ca575f80fd5b815160206148da613d058361401e565b82815260059290921b840181019181810190868411156148f8575f80fd5b8286015b84811015612d7c57805183529183019183016148fc565b5f60208284031215614923575f80fd5b81516001600160401b0380821115614939575f80fd5b908301906040828603121561494c575f80fd5b614954613c80565b82518152602083015182811115614969575f80fd5b614975878286016148bb565b60208301525095945050505050565b5f60208284031215614994575f80fd5b81516001600160401b038111156149a9575f80fd5b61332d848285016148bb565b8082025f8212600160ff1b841416156149d0576149d0614682565b818105831482151761196457611964614682565b8082018281125f831280158216821582161715614a0357614a03614682565b505092915050565b5f8151808452602080850194508084015f5b838110156140ff578151805163ffffffff1688528301518388015260409096019590820190600101614a1d565b6001600160a01b03831681526040602082018190525f9061332d90830184614a0b565b5f805f805f805f60e0888a031215614a83575f80fd5b8751614a8e81613c05565b60208901519097506001600160401b0380821115614aaa575f80fd5b614ab68b838c0161470d565b975060408a0151915080821115614acb575f80fd5b50614ad88a828b0161470d565b955050606088015193506080880151925060a0880151915060c0880151614afe81614316565b8091505092959891949750929550565b5f6020808385031215614b1f575f80fd5b82516001600160401b03811115614b34575f80fd5b8301601f81018513614b44575f80fd5b8051614b52613d058261401e565b81815260069190911b82018301908381019087831115614b70575f80fd5b928401925b82841015611dbf5760408489031215614b8d575f8081fd5b614b95613c80565b845181528585015186820152825260409093019290840190614b75565b5f60018060a01b0380871683526020606081850152614bd46060850188614a0b565b8481036040860152858152869082015f5b87811015614c0c578235614bf881613c05565b851682529183019190830190600101614be5565b509998505050505050505050565b5f6001600160fb1b03831115614c2e575f80fd5b8260051b80838637939093019392505050565b8581525f611dbf614c56602084018789614c1a565b8486614c1a565b5f81614c6b57614c6b614682565b505f190190565b808202811582820484141761196457611964614682565b63ffffffff818116838216019080821115614ca657614ca6614682565b5092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b2d8e7e1ed2126defb28a04a260c24a753558eacd14b346029732c5a3e041e2b64736f6c63430008140033

Deployed Bytecode Sourcemap

9247:18293:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10164:22;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;10164:22:0;;;;;;;;27132:191;;;;;;:::i;:::-;;:::i;:::-;;9858:23;;;;;;;;;;-1:-1:-1;9858:23:0;;;;-1:-1:-1;;;;;9858:23:0;;;;;;-1:-1:-1;;;;;560:32:1;;;542:51;;530:2;515:18;9858:23:0;381:218:1;26115:83:0;;;;;;;;;;-1:-1:-1;26115:83:0;;;;;:::i;:::-;;:::i;14826:2177::-;;;;;;:::i;:::-;;:::i;:::-;;;4800:14:1;;4793:22;4775:41;;4763:2;4748:18;14826:2177:0;4635:187:1;26923:79:0;;;;;;;;;;-1:-1:-1;26979:21:0;26923:79;;22123:371;;;;;;;;;;-1:-1:-1;22123:371:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23149:93::-;;;;;;;;;;-1:-1:-1;23149:93:0;;;;;:::i;:::-;23204:4;23218:22;;;:16;:22;;;;;;;23149:93;10195:27;;;;;;;;;;-1:-1:-1;10195:27:0;;;;;;;;25280:128;;;;;;;;;;-1:-1:-1;25280:128:0;;;;;:::i;:::-;;:::i;:::-;;;;6558:25:1;;;6614:2;6599:18;;6592:34;;;;6531:18;25280:128:0;6384:248:1;23762:128:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9594:69::-;;;;;;;;;;-1:-1:-1;9594:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;27012:114;;;:::i;20737:473::-;;;;;;;;;;-1:-1:-1;20737:473:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25081:90::-;;;;;;;;;;;;;:::i;22680:174::-;;;;;;;;;;-1:-1:-1;22680:174:0;;;;;:::i;:::-;;:::i;:::-;;;;11337:13:1;;-1:-1:-1;;;;;11333:39:1;11315:58;;11429:4;11417:17;;;11411:24;11389:20;;;11382:54;11480:17;;;11474:24;11452:20;;;11445:54;11303:2;11288:18;22680:174:0;11117:388:1;25414:114:0;;;;;;;;;;-1:-1:-1;25414:114:0;;;;;:::i;:::-;;:::i;10133:24::-;;;;;;;;;;;;;;;;11957:49;;;;;;;;;;;;;:::i;10557:24::-;;;;;;;;;;-1:-1:-1;10557:24:0;;;;-1:-1:-1;;;;;10557:24:0;;;23248:195;;;;;;;;;;-1:-1:-1;23248:195:0;;;;;:::i;:::-;;:::i;22866:72::-;;;;;;;;;;;;;:::i;21216:111::-;;;;;;;;;;-1:-1:-1;21216:111:0;;;;;:::i;:::-;;:::i;10436:20::-;;;;;;;;;;-1:-1:-1;10436:20:0;;;;-1:-1:-1;;;;;10436:20:0;;;9296:52;;;;;;;;;;-1:-1:-1;9296:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10524:26;;;;;;;;;;-1:-1:-1;10524:26:0;;;;-1:-1:-1;;;;;10524:26:0;;;12526:1136;;;;;;;;;;-1:-1:-1;12526:1136:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22944:109::-;;;;;;;;;;;;;:::i;26762:74::-;;;;;;;;;;-1:-1:-1;26762:74:0;;;;;:::i;:::-;;:::i;9746:39::-;;;;;;;;;;-1:-1:-1;9746:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:86;;;;;;;;;;-1:-1:-1;2963:4:0;2987:7;;;2916:86;;12197:97;;;;;;;;;;-1:-1:-1;12197:97:0;;;;;:::i;:::-;;:::i;19029:333::-;;;;;;:::i;:::-;;:::i;25542:79::-;;;;;;;;;;-1:-1:-1;25542:79:0;;;;;:::i;:::-;;:::i;9670:69::-;;;;;;;;;;-1:-1:-1;9670:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9670:69:0;;;10019:61;;;;;;;;;;-1:-1:-1;10019:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:55;;;;;;;;;;-1:-1:-1;9355:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;20385:187;;;;;;;;;;-1:-1:-1;20385:187:0;;;;;:::i;:::-;;:::i;6289:103::-;;;;;;;;;;;;;:::i;10101:25::-;;;;;;;;;;;;;;;;24768:122;;;;;;;;;;-1:-1:-1;24768:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8926:235::-;;;;;;;;;;;;;:::i;10366:36::-;;;;;;;;;;-1:-1:-1;10366:36:0;;;;-1:-1:-1;;;;;10366:36:0;;;26682:74;;;;;;;;;;-1:-1:-1;26682:74:0;;;;;:::i;:::-;;:::i;11906:45::-;;;;;;;;;;;;;:::i;26204:83::-;;;;;;;;;;-1:-1:-1;26204:83:0;;;;;:::i;:::-;;:::i;5614:87::-;;;;;;;;;;-1:-1:-1;5660:7:0;5687:6;;;;-1:-1:-1;;;;;5687:6:0;5614:87;;23896:866;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25177:93::-;;;;;;;;;;;;;:::i;9792:46::-;;;;;;;;;;-1:-1:-1;9792:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;13668:1152;;;;;;;;;;-1:-1:-1;13668:1152:0;;;;;:::i;:::-;;:::i;22500:174::-;;;;;;;;;;-1:-1:-1;22500:174:0;;;;;:::i;:::-;;:::i;26842:73::-;;;;;;;;;;-1:-1:-1;26903:10:0;;26842:73;;21333:784;;;;;;;;;;-1:-1:-1;21333:784:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9525:62::-;;;;;;;;;;-1:-1:-1;9525:62:0;;;;;:::i;:::-;;:::i;12325:195::-;;;;;;;;;;-1:-1:-1;12325:195:0;;;;;:::i;:::-;;:::i;26026:83::-;;;;;;;;;;-1:-1:-1;26026:83:0;;;;;:::i;:::-;;:::i;26488:104::-;;;;;;;;;;-1:-1:-1;26488:104:0;;;;;:::i;:::-;;:::i;10327:32::-;;;;;;;;;;-1:-1:-1;10327:32:0;;;;-1:-1:-1;;;;;10327:32:0;;;25718:101;;;;;;;;;;-1:-1:-1;25718:101:0;;;;;:::i;:::-;;:::i;19822:140::-;;;;;;;;;;-1:-1:-1;19822:140:0;;;;;:::i;:::-;;:::i;9472:46::-;;;;;;;;;;-1:-1:-1;9472:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9472:46:0;;;;;;;;;;;-1:-1:-1;;;;;18415:32:1;;;18397:51;;18479:2;18464:18;;18457:34;;;;18507:18;;;18500:34;18385:2;18370:18;9472:46:0;18195:345:1;23566:188:0;;;;;;;;;;-1:-1:-1;23566:188:0;;;;;:::i;:::-;;:::i;10292:28::-;;;;;;;;;;-1:-1:-1;10292:28:0;;;;-1:-1:-1;;;;;10292:28:0;;;19368:448;;;;;;:::i;:::-;;:::i;23449:111::-;;;;;;;;;;-1:-1:-1;23449:111:0;;;;;:::i;:::-;;:::i;24896:167::-;;;;;;;;;;-1:-1:-1;24896:167:0;;;;;:::i;:::-;;:::i;10409:20::-;;;;;;;;;;-1:-1:-1;10409:20:0;;;;-1:-1:-1;;;;;10409:20:0;;;26385:95;;;;;;;;;;-1:-1:-1;26385:95:0;;;;;:::i;:::-;;:::i;10463:22::-;;;;;;;;;;-1:-1:-1;10463:22:0;;;;-1:-1:-1;;;;;10463:22:0;;;8014:101;;;;;;;;;;-1:-1:-1;8094:13:0;;-1:-1:-1;;;;;8094:13:0;8014:101;;26293:86;;;;;;;;;;-1:-1:-1;26293:86:0;;;;;:::i;:::-;;:::i;23059:82::-;;;;;;;;;;-1:-1:-1;23059:82:0;;;;;:::i;:::-;;:::i;20578:153::-;;;;;;;;;;-1:-1:-1;20578:153:0;;;;;:::i;:::-;;:::i;9888:73::-;;;;;;;;;;-1:-1:-1;9888:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;26598:78;;;;;;;;;;-1:-1:-1;26598:78:0;;;;;:::i;:::-;;:::i;8314:181::-;;;;;;;;;;-1:-1:-1;8314:181:0;;;;;:::i;:::-;;:::i;27329:208::-;;;;;;;;;;-1:-1:-1;27329:208:0;;;;;:::i;:::-;;:::i;12099:92::-;;;;;;;;;;-1:-1:-1;12099:92:0;;;;;:::i;:::-;;:::i;9417:48::-;;;;;;;;;;-1:-1:-1;9417:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9417:48:0;;;;;;;25627:85;;;;;;;;;;-1:-1:-1;25627:85:0;;;;;:::i;:::-;;:::i;9968:44::-;;;;;;;;;;-1:-1:-1;9968:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;10494:23;;;;;;;;;;-1:-1:-1;10494:23:0;;;;-1:-1:-1;;;;;10494:23:0;;;10265:20;;;;;;;;;;-1:-1:-1;10265:20:0;;;;-1:-1:-1;;;;;10265:20:0;;;25825:88;;;;;;;;;;-1:-1:-1;25825:88:0;;;;;:::i;:::-;;:::i;25919:101::-;;;;;;;;;;-1:-1:-1;25919:101:0;;;;;:::i;:::-;;:::i;27132:191::-;5500:13;:11;:13::i;:::-;26979:21;27204:7:::1;:23;;27196:58;;;::::0;-1:-1:-1;;;27196:58:0;;21929:2:1;27196:58:0::1;::::0;::::1;21911:21:1::0;21968:2;21948:18;;;21941:30;-1:-1:-1;;;21987:18:1;;;21980:52;22049:18;;27196:58:0::1;;;;;;;;;27284:10;::::0;27296:25:::1;26979:21:::0;27296:25:::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27195:128;27132:191:::0;:::o;26115:83::-;5500:13;:11;:13::i;:::-;26174:7:::1;:22:::0;;-1:-1:-1;;;;;;26174:22:0::1;-1:-1:-1::0;;;;;26174:22:0;;;::::1;::::0;;;::::1;::::0;;26115:83::o;14826:2177::-;15002:4;2521:19;:17;:19::i;:::-;15139:25:::1;15159:4;15139:19;:25::i;:::-;15130:58;;;::::0;-1:-1:-1;;;15130:58:0;;22280:2:1;15130:58:0::1;::::0;::::1;22262:21:1::0;22319:2;22299:18;;;22292:30;-1:-1:-1;;;22338:18:1;;;22331:49;22397:18;;15130:58:0::1;22078:343:1::0;15130:58:0::1;15199:22;15224:39;15256:6;15224:31;:39::i;:::-;:44;;::::0;15295:7:::1;::::0;:28:::1;::::0;-1:-1:-1;;;15295:28:0;;15224:44;;-1:-1:-1;15281:10:0::1;::::0;-1:-1:-1;;;;;15295:7:0;;::::1;::::0;:18:::1;::::0;:28:::1;::::0;15224:44;;15295:28:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15279:44;;;15356:5;15342:9;:20;;15334:54;;;::::0;-1:-1:-1;;;15334:54:0;;22878:2:1;15334:54:0::1;::::0;::::1;22860:21:1::0;22917:2;22897:18;;;22890:30;-1:-1:-1;;;22936:18:1;;;22929:51;22997:18;;15334:54:0::1;22676:345:1::0;15334:54:0::1;15444:7;;15434:4;15417:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;15407:33;;;;;;:44;15399:72;;;;-1:-1:-1::0;;;15399:72:0::1;;;;;;;:::i;:::-;15490:7;::::0;:39:::1;::::0;-1:-1:-1;;;15490:39:0;;-1:-1:-1;;;;;15490:7:0;;::::1;::::0;:20:::1;::::0;:39:::1;::::0;15511:6;;15519:9;;;;15490:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15482:69;;;::::0;-1:-1:-1;;;15482:69:0;;24830:2:1;15482:69:0::1;::::0;::::1;24812:21:1::0;24869:2;24849:18;;;24842:30;-1:-1:-1;;;24888:18:1;;;24881:47;24945:18;;15482:69:0::1;24628:341:1::0;15482:69:0::1;15562:18;15583:21;15591:6;15599:4;15583:7;:21::i;:::-;15562:42;;15624:32;15643:6;15651:4;15624:18;:32::i;:::-;15623:33;15615:63;;;::::0;-1:-1:-1;;;15615:63:0;;25176:2:1;15615:63:0::1;::::0;::::1;25158:21:1::0;25215:2;25195:18;;;25188:30;-1:-1:-1;;;25234:18:1;;;25227:47;25291:18;;15615:63:0::1;24974:341:1::0;15615:63:0::1;15689:19;15711:30;15722:4;15727;;15732:8;;15711:10;:30::i;:::-;15760:15;::::0;15689:52;;-1:-1:-1;15760:15:0::1;;:24;::::0;:53:::1;;;15788:8;15797:6;15788:16;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;::::1;;:25;15760:53;15752:88;;;::::0;-1:-1:-1;;;15752:88:0;;25814:2:1;15752:88:0::1;::::0;::::1;25796:21:1::0;25853:2;25833:18;;;25826:30;-1:-1:-1;;;25872:18:1;;;25865:52;25934:18;;15752:88:0::1;25612:346:1::0;15752:88:0::1;15866:13;::::0;:61:::1;::::0;-1:-1:-1;;;15866:61:0;;15851:12:::1;::::0;-1:-1:-1;;;;;15866:13:0::1;::::0;:35:::1;::::0;:61:::1;::::0;15902:8;;15912:4;;;;15918:8;;;;15866:61:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15851:76;;15954:1;15946:7;:9;15938:52;;;::::0;-1:-1:-1;;;15938:52:0;;27090:2:1;15938:52:0::1;::::0;::::1;27072:21:1::0;27129:2;27109:18;;;27102:30;27168:32;27148:18;;;27141:60;27218:18;;15938:52:0::1;26888:354:1::0;15938:52:0::1;16001:13;16017:6;16001:22;;16034:25;16062:31;;;;;;;;16072:5;-1:-1:-1::0;;;;;16062:31:0::1;;;;;16079:7;16062:31;;;;16088:4;16062:31;;::::0;16034:59:::1;;16109:6;16104:222;16125:8;:15;16121:1;:19;16104:222;;;16171:44;16197:8;16206:1;16197:11;;;;;;;;:::i;:::-;;;;;;;16210:4;16171:25;:44::i;:::-;16170:45;16162:94;;;::::0;-1:-1:-1;;;16162:94:0;;27581:2:1;16162:94:0::1;::::0;::::1;27563:21:1::0;27620:2;27600:18;;;27593:30;27659:34;27639:18;;;27632:62;-1:-1:-1;;;27710:18:1;;;27703:34;27754:19;;16162:94:0::1;27379:400:1::0;16162:94:0::1;16309:5;16271:16;:29;16288:8;16297:1;16288:11;;;;;;;;:::i;:::-;;;;;;;16271:29;;;;;;;;;;;:35;16301:4;16271:35;;;;;;;;;;;;:43;;;;;-1:-1:-1::0;;;;;16271:43:0::1;;;;;-1:-1:-1::0;;;;;16271:43:0::1;;;;;;16142:3;;;;;:::i;:::-;;;;16104:222;;;-1:-1:-1::0;16404:15:0::1;::::0;;::::1;::::0;16379:22:::1;::::0;;;:16:::1;:22:::0;;;;;;;;:40:::1;::::0;16404:15;16379:40:::1;:::i;:::-;16354:22;::::0;;;:16:::1;:22;::::0;;;;;;;:65;;;;16430:16:::1;:22:::0;;;;;:27;;16456:1:::1;::::0;16354:22;16430:27:::1;::::0;16456:1;;16430:27:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;16484:22:0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;;;16512:36;;;;::::1;::::0;;16526:15;;::::1;::::0;16512:36;;;;::::1;::::0;;;16484:65;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;16560:23;;;:16:::1;:23:::0;;;;;:29;;;;;;;;;;:36;;-1:-1:-1;;16560:36:0::1;::::0;;::::1;::::0;;;16623:16;16526:8;;16623:9:::1;::::0;:16:::1;::::0;16633:5;;16623:16:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:27;;;;-1:-1:-1;;;;;16623:27:0;;::::1;-1:-1:-1::0;;;;;;16623:27:0;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;16661:8:::1;::::0;:16:::1;::::0;16670:6;;16661:16:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:23;;;::::1;;-1:-1:-1::0;;16661:23:0;;::::1;::::0;;;::::1;::::0;;16706:7:::1;::::0;-1:-1:-1;;;;;16706:7:0::1;16698:30:::0;16695:224:::1;;16768:13;::::0;;16779:1:::1;16768:13:::0;;;;;::::1;::::0;;16744:21:::1;::::0;16768:13:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;16768:13:0::1;16744:37;;16809:4;16796:7;16804:1;16796:10;;;;;;;;:::i;:::-;;;;;;:17;;;::::0;::::1;16841:8;:15;;;16828:7;16836:1;16828:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:28;16871:7:::1;::::0;:36:::1;::::0;-1:-1:-1;;;16871:36:0;;-1:-1:-1;;;;;16871:7:0;;::::1;::::0;:17:::1;::::0;:36:::1;::::0;16889:5;;16871:7;;16899;;16871:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16729:190;16695:224;16946:15;::::0;;::::1;::::0;16934:39:::1;::::0;;28830:25:1;;;-1:-1:-1;;;;;28891:32:1;;28871:18;;;28864:60;;;;28940:18;;;28933:34;;;16934:39:0::1;::::0;28818:2:1;28803:18;16934:39:0::1;;;;;;;16991:4;16984:11;;;;;;;;;14826:2177:::0;;;;;;;;;;;:::o;22123:371::-;22199:24;22236:30;22291:7;-1:-1:-1;;;;;22269:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;22269:30:0;;;;;;;;;;;;;;;;;22236:63;;22315:6;22310:154;22331:7;22327:1;:11;22310:154;;;22371:81;;;;;;;;22394:1;22387:4;:8;;;;:::i;:::-;22371:81;;;;22397:16;:26;22414:8;22421:1;22414:4;:8;:::i;:::-;22397:26;;;;;;;;;;;;22371:81;;;;22425:16;:26;22449:1;22442:4;:8;;;;:::i;:::-;22425:26;;;;;;;;;;;;22371:81;;;22360:5;22366:1;22360:8;;;;;;;;:::i;:::-;;;;;;:92;;;;22340:3;;;;;:::i;:::-;;;;22310:154;;;-1:-1:-1;22481:5:0;-1:-1:-1;22123:371:0;;;;;:::o;25280:128::-;25378:7;;:28;;-1:-1:-1;;;25378:28:0;;25348:9;;;;-1:-1:-1;;;;;25378:7:0;;;;:18;;:28;;25397:8;;;;25378:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25371:35;;;;25280:128;;;;;;:::o;23762:::-;23857:11;;:31;;;-1:-1:-1;;;23857:31:0;;;;23812:36;;-1:-1:-1;;;;;23857:11:0;;:29;;:31;;;;;:11;;:31;;;;;;;:11;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23857:31:0;;;;;;;;;;;;:::i;:::-;23850:38;;23762:128;:::o;27012:114::-;5500:13;:11;:13::i;:::-;27087:10:::1;::::0;27099:25:::1;26979:21:::0;27099:25:::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27057:69;27012:114::o:0;20737:473::-;20824:22;20859:10;20889:6;20884:99;20905:5;:12;20901:1;:16;20884:99;;;20929:41;20955:5;20961:1;20955:8;;;;;;;;:::i;:::-;;;;;;;20965:4;20929:25;:41::i;:::-;20925:57;;;20973:7;;;;:::i;:::-;;;;20925:57;20919:3;;;;:::i;:::-;;;;20884:99;;;;21015:5;-1:-1:-1;;;;;21004:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21004:17:0;;20993:28;;21032:10;21062:6;21057:120;21078:5;:12;21074:1;:16;21057:120;;;21102:41;21128:5;21134:1;21128:8;;;;;;;;:::i;:::-;;;;;;;21138:4;21102:25;:41::i;:::-;21098:78;;;21166:5;21172:1;21166:8;;;;;;;;:::i;:::-;;;;;;;21146;21155:7;;;;;:::i;:::-;;;21146:17;;;;;;;;:::i;:::-;;;;;;:28;;;;;21098:78;21092:3;;;;:::i;:::-;;;;21057:120;;;;21187:15;;20737:473;;;;:::o;25081:90::-;25144:7;;:25;;;-1:-1:-1;;;25144:25:0;;;;25130:4;;-1:-1:-1;;;;;25144:7:0;;:23;;:25;;;;;;;;;;;;;;:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22680:174::-;22756:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22756:16:0;22785;22804:22;22812:6;22820:5;22804:22;;:7;:22::i;:::-;22785:41;;22834:7;22842:3;22834:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22827:19;;;;;;;-1:-1:-1;;;;;22827:19:0;;;;;;;;;;;;;;;;;;;;;22834:12;-1:-1:-1;;22680:174:0;;;;:::o;25414:114::-;25499:7;;:27;;-1:-1:-1;;;25499:27:0;;;;;160:25:1;;;25469:9:0;;;;-1:-1:-1;;;;;25499:7:0;;;;:20;;133:18:1;;25499:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25492:34;;;;25414:114;;;:::o;11957:49::-;5500:13;:11;:13::i;:::-;11994:10:::1;:8;:10::i;:::-;11957:49::o:0;23248:195::-;23380:13;;:61;;-1:-1:-1;;;23380:61:0;;23367:4;;-1:-1:-1;;;;;23380:13:0;;:35;;:61;;23416:8;;;;23426:4;;;;23432:8;;;;23380:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23373:68;23248:195;-1:-1:-1;;;;;;;23248:195:0:o;22866:72::-;22905:4;22930:6;22918:9;:7;:9::i;:::-;:18;;;;:::i;21216:111::-;21281:4;21294:24;21311:6;21294:16;:24::i;:::-;:31;;21216:111;-1:-1:-1;;21216:111:0:o;12526:1136::-;12594:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12594:28:0;12664:7;;:26;;-1:-1:-1;;;12664:26:0;;-1:-1:-1;;;;;560:32:1;;;12664:26:0;;;542:51:1;12635:26:0;;12664:7;;:19;;515:18:1;;12664:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12664:26:0;;;;;;;;;;;;:::i;:::-;12723:15;;12701:37;;12768:14;;;;12749:16;;;:33;12805:8;;12635:55;;-1:-1:-1;;;;;;12805:8:0;12797:31;12793:125;;12850:8;;:25;;-1:-1:-1;;;12850:25:0;;-1:-1:-1;;;;;560:32:1;;;12850:25:0;;;542:51:1;12850:8:0;;;;:18;;515::1;;12850:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12850:25:0;;;;;;;;;;;;:::i;:::-;12831:16;;;:44;12793:125;;;12903:13;;;12914:1;12903:13;;;;;;;;12884:16;;;:32;12793:125;12950:16;;;;:23;12928:19;;;:45;;;13006:16;;;;:23;12984:19;;;:45;13081:19;;-1:-1:-1;;;13081:91:0;;13171:1;13081:91;;;13148:19;;;;13126;;:41;;13148:19;13126:41;:::i;:::-;13058:8;:19;;;:115;;;;:::i;:::-;13040:133;;13223:8;:19;;;13201:8;:19;;;:41;;;;:::i;:::-;13188:10;:54;13184:117;;;13280:8;:19;;;13258:8;:19;;;:41;;;;:::i;:::-;13245:54;;13184:117;13338:10;-1:-1:-1;;;;;13327:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13327:22:0;-1:-1:-1;13311:13:0;;;:38;13365:6;13360:88;13381:8;:19;;;13377:1;:23;13360:88;;;13427:8;:16;;;13444:1;13427:19;;;;;;;;:::i;:::-;;;;;;;13408:8;:13;;;13422:1;13408:16;;;;;;;;:::i;:::-;;;;;;;;;;:38;13402:3;;;;:::i;:::-;;;;13360:88;;;;13458:19;13493:8;:19;;;13480:10;:32;;;;:::i;:::-;13458:54;;13528:6;13523:132;13544:14;13540:1;:18;:45;;;;;13566:8;:19;;;13562:1;:23;13540:45;13523:132;;;13634:8;:16;;;13651:1;13634:19;;;;;;;;:::i;:::-;;;;;;;13593:8;:13;;;13629:1;13607:8;:19;;;:23;;;;:::i;:::-;13593:38;;;;;;;;:::i;:::-;;;;;;;;;;:60;13587:3;;;;:::i;:::-;;;;13523:132;;;;12624:1038;;;12526:1136;;;:::o;22944:109::-;22983:4;23025:14;;23042:7;23025:24;;;;:::i;:::-;23001:49;;23005:15;23001:49;:::i;26762:74::-;5500:13;:11;:13::i;:::-;26816:10:::1;:18:::0;26762:74::o;12197:97::-;5500:13;:11;:13::i;:::-;-1:-1:-1;;;;;12260:24:0::1;12287:5;12260:24:::0;;;:16:::1;:24;::::0;;;;:32;;-1:-1:-1;;12260:32:0::1;::::0;;12197:97::o;19029:333::-;19120:4;2521:19;:17;:19::i;:::-;19183:7:::1;;19173:4;19156:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;19146:33;;;;;;:44;19138:72;;;;-1:-1:-1::0;;;19138:72:0::1;;;;;;;:::i;:::-;19221:40;19264:14;19271:6;19264;:14::i;:::-;19289:11;::::0;:43:::1;::::0;-1:-1:-1;;;19289:43:0;;19221:57;;-1:-1:-1;;;;;;19289:11:0::1;::::0;:23:::1;::::0;:43:::1;::::0;19313:6;;19221:57;;19289:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19350:4:0::1;::::0;19029:333;-1:-1:-1;;;;19029:333:0:o;25542:79::-;5500:13;:11;:13::i;:::-;25603:8:::1;:16:::0;;-1:-1:-1;;;;;;25603:16:0::1;-1:-1:-1::0;;;;;25603:16:0;;;::::1;::::0;;;::::1;::::0;;25542:79::o;20385:187::-;-1:-1:-1;;;;;20487:24:0;;20463:4;20487:24;;;:16;:24;;;;;;;;:31;;;;;;;;;;;;:77;;-1:-1:-1;20522:9:0;;:42;;-1:-1:-1;;;20522:42:0;;-1:-1:-1;;;;;36122:32:1;;;20522:42:0;;;36104:51:1;36171:18;;;36164:34;;;20522:9:0;;;;:28;;36077:18:1;;20522:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20480:84;20385:187;-1:-1:-1;;;20385:187:0:o;6289:103::-;5500:13;:11;:13::i;:::-;6354:30:::1;6381:1;6354:18;:30::i;24768:122::-:0;24857:31;;24835:12;36382:15:1;;;-1:-1:-1;;36378:53:1;24857:31:0;;;36366:66:1;36448:12;;;36441:28;;;24835:12:0;36485::1;;24857:31:0;;;;;;;;;;;;24850:38;;24768:122;;;;:::o;8926:235::-;8094:13;;775:10;;-1:-1:-1;;;;;8094:13:0;9023:24;;9019:98;;9071:34;;-1:-1:-1;;;9071:34:0;;-1:-1:-1;;;;;560:32:1;;9071:34:0;;;542:51:1;515:18;;9071:34:0;381:218:1;9019:98:0;9127:26;9146:6;9127:18;:26::i;:::-;8968:193;8926:235::o;26682:74::-;5500:13;:11;:13::i;:::-;26734:15:::1;:20:::0;;-1:-1:-1;;26734:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26682:74::o;11906:45::-;5500:13;:11;:13::i;:::-;11941:8:::1;:6;:8::i;26204:83::-:0;5500:13;:11;:13::i;:::-;26263:7:::1;:22:::0;;-1:-1:-1;;;;;;26263:22:0::1;-1:-1:-1::0;;;;;26263:22:0;;;::::1;::::0;;;::::1;::::0;;26204:83::o;23896:866::-;23946:16;23975:22;24008:41;24052:11;;;;;;;;;-1:-1:-1;;;;;24052:11:0;-1:-1:-1;;;;;24052:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24052:31:0;;;;;;;;;;;;:::i;:::-;24008:75;;24099:6;24094:638;24115:4;:11;24111:1;:15;24094:638;;;24191:11;;24216:7;;24148:11;;-1:-1:-1;;;;;24191:11:0;;:24;;24216:4;;24221:1;;24216:7;;;;;;:::i;:::-;;;;;;;;;;;:13;24191:39;;-1:-1:-1;;;;;;24191:39:0;;;;;;;-1:-1:-1;;;;;560:32:1;;;24191:39:0;;;542:51:1;515:18;;24191:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24191:39:0;;;;;;;;;;;;:::i;:::-;24174:56;-1:-1:-1;;24245:476:0;;;-1:-1:-1;24245:476:0;;-1:-1:-1;;;;24245:476:0;24280:5;:12;24296:1;24280:17;24276:372;;24330:16;;;24344:1;24330:16;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24330:16:0;24322:24;;24276:372;;;24395:25;24437:5;:12;24452:1;24437:16;;;;:::i;:::-;-1:-1:-1;;;;;24423:31:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24423:31:0;;24395:59;;24482:6;24477:113;24498:5;:12;24494:1;:16;24477:113;;;24558:5;24564:1;24558:8;;;;;;;;:::i;:::-;;;;;;;24544;24553:1;24544:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24544:22:0;;;:11;;;;;;;;;;;:22;24512:3;;;;:::i;:::-;;;;24477:113;;;-1:-1:-1;24620:8:0;-1:-1:-1;24276:372:0;24692:4;24697:1;24692:7;;;;;;;;:::i;:::-;;;;;;;:13;;;24666:5;24687:1;24672:5;:12;:16;;;;:::i;:::-;24666:23;;;;;;;;:::i;:::-;;;;;;:39;-1:-1:-1;;;;;24666:39:0;;;-1:-1:-1;;;;;24666:39:0;;;;;24245:476;-1:-1:-1;24128:3:0;;;;:::i;:::-;;;;24094:638;;;-1:-1:-1;24749:5:0;;23896:866;-1:-1:-1;;23896:866:0:o;25177:93::-;25241:7;;:27;;;-1:-1:-1;;;25241:27:0;;;;25228:4;;-1:-1:-1;;;;;25241:7:0;;:25;;:27;;;;;;;;;;;;;;:7;:27;;;;;;;;;;;;;;13668:1152;13740:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13740:28:0;13810:7;;:26;;-1:-1:-1;;;13810:26:0;;-1:-1:-1;;;;;560:32:1;;;13810:26:0;;;542:51:1;13781:26:0;;13810:7;;:19;;515:18:1;;13810:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13810:26:0;;;;;;;;;;;;:::i;:::-;13869:15;;13847:37;;13914:14;;;;13895:16;;;:33;13954:8;;13781:55;;-1:-1:-1;;;;;;13954:8:0;13946:31;13942:134;;13999:8;;:34;;-1:-1:-1;;;13999:34:0;;-1:-1:-1;;;;;560:32:1;;;13999:34:0;;;542:51:1;13999:8:0;;;;:27;;515:18:1;;13999:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13999:34:0;;;;;;;;;;;;:::i;:::-;13980:16;;;:53;13942:134;;;14061:13;;;14072:1;14061:13;;;;;;;;14042:16;;;:32;13942:134;14108:16;;;;:23;14086:19;;;:45;;;14164:16;;;;:23;14142:19;;;:45;14239:19;;-1:-1:-1;;;14239:91:0;;14329:1;14239:91;;;14306:19;;;;14284;;:41;;14306:19;14284:41;:::i;:::-;14216:8;:19;;;:115;;;;:::i;:::-;14198:133;;14381:8;:19;;;14359:8;:19;;;:41;;;;:::i;:::-;14346:10;:54;14342:117;;;14438:8;:19;;;14416:8;:19;;;:41;;;;:::i;:::-;14403:54;;14342:117;14496:10;-1:-1:-1;;;;;14485:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14485:22:0;-1:-1:-1;14469:13:0;;;:38;14523:6;14518:88;14539:8;:19;;;14535:1;:23;14518:88;;;14585:8;:16;;;14602:1;14585:19;;;;;;;;:::i;:::-;;;;;;;14566:8;:13;;;14580:1;14566:16;;;;;;;;:::i;:::-;;;;;;;;;;:38;14560:3;;;;:::i;:::-;;;;14518:88;;;;14616:19;14651:8;:19;;;14638:10;:32;;;;:::i;:::-;14616:54;;14686:6;14681:132;14702:14;14698:1;:18;:45;;;;;14724:8;:19;;;14720:1;:23;14698:45;14681:132;;;14792:8;:16;;;14809:1;14792:19;;;;;;;;:::i;:::-;;;;;;;14751:8;:13;;;14787:1;14765:8;:19;;;:23;;;;:::i;:::-;14751:38;;;;;;;;:::i;:::-;;;;;;;;;;:60;14745:3;;;;:::i;:::-;;;;14681:132;;22500:174;22574:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22574:16:0;22603;22622:22;22630:6;22638:5;22622:22;;:7;:22::i;:::-;22603:41;;22652:9;22662:3;22652:14;;;;;;:::i;21333:784::-;21460:9;;:34;;-1:-1:-1;;;21460:34:0;;-1:-1:-1;;;;;560:32:1;;;21460:34:0;;;542:51:1;21396:22:0;;21431:26;;21460:9;;;:26;;515:18:1;;21460:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21460:34:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21538:23:0;;21505:30;21538:23;;;:15;:23;;;;;;;;21505:56;;;;;;;;;;;;;;;;;21431:63;;-1:-1:-1;21505:30:0;;:56;;21538:23;21505:30;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21572:35;21643:7;:14;21630:3;:10;:27;;;;:::i;:::-;-1:-1:-1;;;;;21610:48:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;21610:48:0;;;;;;;;;;;;;;;;21572:86;;21669:10;21699:6;21694:111;21715:3;:10;21711:1;:14;21694:111;;;-1:-1:-1;;;;;21738:18:0;;;;;;:10;:18;;;;;21757:6;;21738:18;;;21757:3;;21761:1;;21757:6;;;;;;:::i;:::-;;;;;;;;;;;;:11;;;21738:31;;;;;;;;;;-1:-1:-1;21738:31:0;;;;21733:71;;21796:3;21800:1;21796:6;;;;;;;;:::i;:::-;;;;;;;21772:12;21785:7;;;;;:::i;:::-;;;21772:21;;;;;;;;:::i;:::-;;;;;;:30;;;;21733:71;21727:3;;;;:::i;:::-;;;;21694:111;;;;21820:6;21815:123;21836:7;:14;21832:1;:18;21815:123;;;-1:-1:-1;;;;;21863:18:0;;;;;;:10;:18;;;;;21882:10;;21863:18;;;21882:7;;21890:1;;21882:10;;;;;;:::i;:::-;;;;;;;;;;;;:15;;;21863:35;;;;;;;;;;-1:-1:-1;21863:35:0;;;;21858:79;;21925:7;21933:1;21925:10;;;;;;;;:::i;:::-;;;;;;;21901:12;21914:7;;;;;:::i;:::-;;;21901:21;;;;;;;;:::i;:::-;;;;;;:34;;;;21858:79;21852:3;;;;:::i;:::-;;;;21815:123;;;;21948:31;22002:5;-1:-1:-1;;;;;21982:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;21982:26:0;;;;;;;;;;;;;;;;21948:60;;22024:6;22019:65;22040:5;22036:1;:9;22019:65;;;22067:12;22080:1;22067:15;;;;;;;;:::i;:::-;;;;;;;22053:8;22062:1;22053:11;;;;;;;;:::i;:::-;;;;;;:29;;;;22047:3;;;;;:::i;:::-;;;;22019:65;;;-1:-1:-1;22101:8:0;21333:784;-1:-1:-1;;;;;;21333:784:0:o;9525:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9525:62:0;-1:-1:-1;9525:62:0;:::o;12325:195::-;5500:13;:11;:13::i;:::-;12426:6;12413:100:::1;12438:4;12434:1;:8;12413:100;;12482:9;::::0;:29:::1;::::0;-1:-1:-1;;;12482:29:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;12482:9:0;;::::1;::::0;:26:::1;::::0;133:18:1;;12482:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12460:19;::::0;;;:16:::1;:19;::::0;;;;:51;12477:1;12444:3:::1;12477:1:::0;12444:3:::1;:::i;:::-;;;;12413:100;;26026:83:::0;5500:13;:11;:13::i;:::-;26085:7:::1;:22:::0;;-1:-1:-1;;;;;;26085:22:0::1;-1:-1:-1::0;;;;;26085:22:0;;;::::1;::::0;;;::::1;::::0;;26026:83::o;26488:104::-;5500:13;:11;:13::i;:::-;26584:4:::1;26567:22;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;26567:22:0;;::::1;::::0;;;;;;26557:33;;26567:22:::1;26557:33:::0;;::::1;::::0;26547:7:::1;:43:::0;-1:-1:-1;26488:104:0:o;25718:101::-;5500:13;:11;:13::i;:::-;25779:15:::1;:38:::0;;-1:-1:-1;;;;;;25779:38:0::1;-1:-1:-1::0;;;;;25779:38:0;;;::::1;::::0;;;::::1;::::0;;25718:101::o;19822:140::-;12069:10;12052:28;;;;:16;:28;;;;;;;;:36;;:28;:36;12044:45;;;;;;19928:22:::1;::::0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;:32:::1;::::0;19953:7;;19928:32:::1;:::i;:::-;19903:22;::::0;;::::1;;::::0;;;:16:::1;:22;::::0;;;;:57;;;;-1:-1:-1;19822:140:0:o;23566:188::-;23627:4;23645:9;:7;:9::i;:::-;23637:5;:17;23634:34;;;-1:-1:-1;23663:5:0;;23566:188;-1:-1:-1;23566:188:0:o;23634:34::-;23680:12;;23672:5;:20;23669:37;;;-1:-1:-1;23701:5:0;;23566:188;-1:-1:-1;23566:188:0:o;23669:37::-;23750:1;23737:10;;:14;;;;:::i;:::-;23727:5;23715:9;:7;:9::i;:::-;:17;;;;:::i;:::-;23714:38;;23566:188;-1:-1:-1;;23566:188:0:o;19368:448::-;19495:4;2521:19;:17;:19::i;:::-;19558:7:::1;;19548:4;19531:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;19521:33;;;;;;:44;19513:72;;;;-1:-1:-1::0;;;19513:72:0::1;;;;;;;:::i;:::-;19596:40;19639:14;19646:6;19639;:14::i;:::-;19596:57:::0;-1:-1:-1;19667:15:0;;19664:123:::1;;19684:11;::::0;:51:::1;::::0;-1:-1:-1;;;19684:51:0;;-1:-1:-1;;;;;19684:11:0;;::::1;::::0;:23:::1;::::0;:51:::1;::::0;19708:6;;19716:10;;19728:6;;;;19684:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19664:123;;;19742:11;::::0;:43:::1;::::0;-1:-1:-1;;;19742:43:0;;-1:-1:-1;;;;;19742:11:0;;::::1;::::0;:23:::1;::::0;:43:::1;::::0;19766:6;;19774:10;;19742:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19664:123;-1:-1:-1::0;19804:4:0::1;::::0;19368:448;-1:-1:-1;;;;;19368:448:0:o;23449:111::-;23512:4;23548:10;;23539:5;23527:9;:7;:9::i;:::-;:17;;;;:::i;:::-;23526:32;;23449:111;-1:-1:-1;;23449:111:0:o;24896:167::-;25000:12;25039:5;25046:4;;25052:8;;25022:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25015:46;;24896:167;;;;;;;:::o;26385:95::-;5500:13;:11;:13::i;:::-;26448:11:::1;:30:::0;;-1:-1:-1;;;;;;26448:30:0::1;-1:-1:-1::0;;;;;26448:30:0;;;::::1;::::0;;;::::1;::::0;;26385:95::o;26293:86::-;5500:13;:11;:13::i;:::-;26353:8:::1;:24:::0;;-1:-1:-1;;;;;;26353:24:0::1;-1:-1:-1::0;;;;;26353:24:0;;;::::1;::::0;;;::::1;::::0;;26293:86::o;23059:82::-;5500:13;:11;:13::i;:::-;23116:14:::1;:23:::0;23059:82::o;20578:153::-;20657:4;20681:22;;;:16;:22;;;;;;;;:28;;;;;;;;;-1:-1:-1;;;;;20681:28:0;:42;;;20578:153::o;26598:78::-;5500:13;:11;:13::i;:::-;26654:12:::1;:20:::0;26598:78::o;8314:181::-;5500:13;:11;:13::i;:::-;8404::::1;:24:::0;;-1:-1:-1;;;;;8404:24:0;::::1;-1:-1:-1::0;;;;;;8404:24:0;;::::1;::::0;::::1;::::0;;;8469:7:::1;5660::::0;5687:6;-1:-1:-1;;;;;5687:6:0;;;;;;5614:87;8469:7:::1;-1:-1:-1::0;;;;;8444:43:0::1;;;;;;;;;;;8314:181:::0;:::o;27329:208::-;27429:7;5500:13;:11;:13::i;:::-;27439:43:::1;::::0;-1:-1:-1;;;27439:43:0;;-1:-1:-1;;;;;36122:32:1;;;27439:43:0::1;::::0;::::1;36104:51:1::0;36171:18;;;36164:34;;;27439:29:0;::::1;::::0;::::1;::::0;36077:18:1;;27439:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27490:45:0::1;::::0;-1:-1:-1;;;27490:45:0;;27529:4:::1;27490:45;::::0;::::1;542:51:1::0;-1:-1:-1;;;;;27490:30:0;::::1;::::0;::::1;::::0;515:18:1;;27490:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27483:52:::0;27329:208;-1:-1:-1;;;;27329:208:0:o;12099:92::-;5500:13;:11;:13::i;:::-;-1:-1:-1;;;;;12158:24:0::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;12158:31:0::1;12185:4;12158:31;::::0;;12099:92::o;25627:85::-;5500:13;:11;:13::i;:::-;25691:11:::1;:19:::0;;-1:-1:-1;;;;;;25691:19:0::1;-1:-1:-1::0;;;;;25691:19:0;;;::::1;::::0;;;::::1;::::0;;25627:85::o;25825:88::-;5500:13;:11;:13::i;:::-;25886:9:::1;:25:::0;;-1:-1:-1;;;;;;25886:25:0::1;-1:-1:-1::0;;;;;25886:25:0;;;::::1;::::0;;;::::1;::::0;;25825:88::o;25919:101::-;5500:13;:11;:13::i;:::-;25984::::1;:34:::0;;-1:-1:-1;;;;;;25984:34:0::1;-1:-1:-1::0;;;;;25984:34:0;;;::::1;::::0;;;::::1;::::0;;25919:101::o;5779:166::-;5660:7;5687:6;-1:-1:-1;;;;;5687:6:0;;;;;775:10;5839:23;5835:103;;5886:40;;-1:-1:-1;;;5886:40:0;;775:10;5886:40;;;542:51:1;515:18;;5886:40:0;381:218:1;3075:132:0;2963:4;2987:7;;;3137:63;;;3173:15;;-1:-1:-1;;;3173:15:0;;;;;;;;;;;3817:120;2780:16;:14;:16::i;:::-;3886:5:::1;3876:15:::0;;-1:-1:-1;;3876:15:0::1;::::0;;3907:22:::1;775:10:::0;3916:12:::1;3907:22;::::0;-1:-1:-1;;;;;560:32:1;;;542:51;;530:2;515:18;3907:22:0::1;;;;;;;3817:120::o:0;17009:2010::-;17114:8;;17060:29;;-1:-1:-1;;;;;17114:8:0;17106:31;17103:73;;17139:8;;:35;;-1:-1:-1;;;17139:35:0;;-1:-1:-1;;;;;560:32:1;;;17139:35:0;;;542:51:1;17139:8:0;;;;:27;;515:18:1;;17139:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17139:35:0;;;;;;;;;;;;:::i;:::-;;17103:73;17186:32;17221:24;17238:6;17221:16;:24::i;:::-;17265:16;;17186:59;;-1:-1:-1;17300:17:0;:15;:17::i;:::-;17296:1;:21;17292:48;;;17323:17;:15;:17::i;:::-;17319:21;;17292:48;17351:14;;;17461:1;17443:158;17464:6;;17443:158;;17493:10;17506:6;17511:1;17506:2;:6;:::i;:::-;17493:19;;17531:40;17549:9;17559:5;17549:16;;;;;;;;:::i;:::-;;;;;;;:21;;;17531:17;:40::i;:::-;17527:63;;;17574:14;17587:1;17574:14;;:::i;:::-;;;17527:63;-1:-1:-1;17472:4:0;;;;:::i;:::-;;;;17443:158;;;;17614:10;17628:23;17641:9;17628:12;:23::i;:::-;17611:40;;;17683:5;17670:9;:18;;17662:65;;;;-1:-1:-1;;;17662:65:0;;40835:2:1;17662:65:0;;;40817:21:1;40874:2;40854:18;;;40847:30;40913:34;40893:18;;;40886:62;-1:-1:-1;;;40964:18:1;;;40957:32;41006:19;;17662:65:0;40633:398:1;17662:65:0;17764:7;17738:23;17847:1;-1:-1:-1;;;;;17820:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;17820:29:0;;;;;;;;;;;;;;;-1:-1:-1;17782:67:0;-1:-1:-1;17886:6:0;17921:1;17903:792;17924:6;;17903:792;;17953:10;17966:6;17971:1;17966:2;:6;:::i;:::-;17953:19;;17991:40;18009:9;18019:5;18009:16;;;;;;;;:::i;17991:40::-;17987:697;;;18067:9;18077:5;18067:16;;;;;;;;:::i;:::-;;;;;;;:23;;;18052:38;;;;;:::i;:::-;;;18109:12;18178:16;:39;18195:9;18205:5;18195:16;;;;;;;;:::i;:::-;;;;;;;:21;;;18178:39;;;;;;;;;;;;18158:16;18132:42;;:9;18142:5;18132:16;;;;;;;;:::i;:::-;;;;;;;:23;;;:42;;;;:::i;:::-;18131:86;;;;:::i;:::-;18109:109;-1:-1:-1;18250:18:0;18109:109;18250:10;:18;:::i;:::-;18237:31;;18302:50;;;;;;;;18323:5;18302:50;;;;;;18330:9;18340:5;18330:16;;;;;;;;:::i;:::-;;;;;;;:21;;;18302:50;;;18287:5;18293;18287:12;;;;;;;;:::i;:::-;;;;;;:65;;;;18371:18;18392:39;18400:7;18409:9;18419:5;18409:16;;;;;;;;:::i;:::-;;;;;;;:21;;;18392:7;:39::i;:::-;18371:60;;18467:9;18477:5;18467:16;;;;;;:::i;:::-;;;;;;;;;;;;;18450:7;18458:5;18450:14;;;;;;:::i;:::-;;;;;;;;;;;;;;:33;;;;-1:-1:-1;;;;;;18450:33:0;-1:-1:-1;;;;;18450:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;18509:9;;:16;;18519:5;;18509:16;:::i;:::-;;;;;;;;;;;;;;18502:23;;-1:-1:-1;;;;;;18502:23:0;;;18509:16;18502:23;;;;;;;;;;;18578:16;;18544:56;;18569:7;;18578:9;;18588:5;;18578:16;;;;;;:::i;:::-;;;;;;;:21;;;18544:24;:56::i;:::-;18664:4;18619:10;:19;18630:7;-1:-1:-1;;;;;18619:19:0;-1:-1:-1;;;;;18619:19:0;;;;;;;;;;;;:42;18639:9;18649:5;18639:16;;;;;;;;:::i;:::-;;;;;;;:21;;;18619:42;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;18033:651;;17987:697;-1:-1:-1;17932:4:0;;;;:::i;:::-;;;;17903:792;;;-1:-1:-1;18716:7:0;;-1:-1:-1;;;;;18716:7:0;18708:30;18705:226;;18778:13;;;18789:1;18778:13;;;;;;;;18754:21;;18778:13;;;;;;;;;;-1:-1:-1;18778:13:0;18754:37;;18819:9;18806:7;18814:1;18806:10;;;;;;;;:::i;:::-;;;;;;:22;;;;;18856:11;18843:7;18851:1;18843:10;;;;;;;;:::i;:::-;;;;;;;;;;:24;18882:7;;:37;;-1:-1:-1;;;18882:37:0;;-1:-1:-1;;;;;18882:7:0;;;;:17;;:37;;18900:6;;18908:1;;18911:7;;18882:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18739:192;18705:226;18946:42;;;-1:-1:-1;;;;;18415:32:1;;18397:51;;18479:2;18464:18;;18457:34;;;18507:18;;;18500:34;;;18946:42:0;;18385:2:1;18370:18;18946:42:0;;;;;;;-1:-1:-1;19006:5:0;17009:2010;-1:-1:-1;;;;;;;;;17009:2010:0:o;8685:156::-;8775:13;8768:20;;-1:-1:-1;;;;;;8768:20:0;;;8799:34;8824:8;8799:24;:34::i;3558:118::-;2521:19;:17;:19::i;:::-;3618:7:::1;:14:::0;;-1:-1:-1;;3618:14:0::1;3628:4;3618:14;::::0;;3648:20:::1;3655:12;775:10:::0;;695:98;3284:130;2963:4;2987:7;;;3343:64;;3380:15;;-1:-1:-1;;;3380:15:0;;;;;;;;;;;19968:411;-1:-1:-1;;;;;20086:23:0;;20048:35;20086:23;;;:15;:23;;;;;;20120:252;20141:18;;20137:22;;20120:252;;;20208:4;20185:11;20197:1;20185:14;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;;:27;20181:180;;20262:18;;20250:11;;20262:22;;20283:1;;20262:22;:::i;:::-;20250:35;;;;;;;;:::i;:::-;;;;;;;;;;;20233:11;20245:1;20233:14;;;;;;;;:::i;:::-;;;;;;;;;:52;;:14;;;;;:52;;;;;;;;;;;20304:17;;:11;;:17;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;20304:17:0;;;;;;;;;;;;;;;20340:5;;20181:180;20161:3;;;;:::i;:::-;;;;20120:252;;;;20037:342;19968:411;;:::o;6927:191::-;7001:16;7020:6;;-1:-1:-1;;;;;7037:17:0;;;7020:6;7037:17;;;-1:-1:-1;;;;;;7037:17:0;;;;;7070:40;;7020:6;;;;;;;7037:17;;7020:6;;7070:40;;;6990:128;6927:191;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;604:131::-;-1:-1:-1;;;;;679:31:1;;669:42;;659:70;;725:1;722;715:12;740:134;808:20;;837:31;808:20;837:31;:::i;:::-;740:134;;;:::o;879:247::-;938:6;991:2;979:9;970:7;966:23;962:32;959:52;;;1007:1;1004;997:12;959:52;1046:9;1033:23;1065:31;1090:5;1065:31;:::i;1131:127::-;1192:10;1187:3;1183:20;1180:1;1173:31;1223:4;1220:1;1213:15;1247:4;1244:1;1237:15;1263:253;1335:2;1329:9;1377:4;1365:17;;-1:-1:-1;;;;;1397:34:1;;1433:22;;;1394:62;1391:88;;;1459:18;;:::i;:::-;1495:2;1488:22;1263:253;:::o;1521:257::-;1593:4;1587:11;;;1625:17;;-1:-1:-1;;;;;1657:34:1;;1693:22;;;1654:62;1651:88;;;1719:18;;:::i;1783:275::-;1854:2;1848:9;1919:2;1900:13;;-1:-1:-1;;1896:27:1;1884:40;;-1:-1:-1;;;;;1939:34:1;;1975:22;;;1936:62;1933:88;;;2001:18;;:::i;:::-;2037:2;2030:22;1783:275;;-1:-1:-1;1783:275:1:o;2063:187::-;2112:4;-1:-1:-1;;;;;2137:6:1;2134:30;2131:56;;;2167:18;;:::i;:::-;-1:-1:-1;2233:2:1;2212:15;-1:-1:-1;;2208:29:1;2239:4;2204:40;;2063:187::o;2255:338::-;2320:5;2349:53;2365:36;2394:6;2365:36;:::i;:::-;2349:53;:::i;:::-;2340:62;;2425:6;2418:5;2411:21;2465:3;2456:6;2451:3;2447:16;2444:25;2441:45;;;2482:1;2479;2472:12;2441:45;2531:6;2526:3;2519:4;2512:5;2508:16;2495:43;2585:1;2578:4;2569:6;2562:5;2558:18;2554:29;2547:40;2255:338;;;;;:::o;2598:222::-;2641:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:55;;2712:1;2709;2702:12;2661:55;2734:80;2810:3;2801:6;2788:20;2781:4;2773:6;2769:17;2734:80;:::i;2825:367::-;2888:8;2898:6;2952:3;2945:4;2937:6;2933:17;2929:27;2919:55;;2970:1;2967;2960:12;2919:55;-1:-1:-1;2993:20:1;;-1:-1:-1;;;;;3025:30:1;;3022:50;;;3068:1;3065;3058:12;3022:50;3105:4;3097:6;3093:17;3081:29;;3165:3;3158:4;3148:6;3145:1;3141:14;3133:6;3129:27;3125:38;3122:47;3119:67;;;3182:1;3179;3172:12;3197:1433;3392:6;3400;3408;3416;3424;3432;3440;3448;3456;3509:3;3497:9;3488:7;3484:23;3480:33;3477:53;;;3526:1;3523;3516:12;3477:53;3566:9;3553:23;-1:-1:-1;;;;;3636:2:1;3628:6;3625:14;3622:34;;;3652:1;3649;3642:12;3622:34;3675:50;3717:7;3708:6;3697:9;3693:22;3675:50;:::i;:::-;3665:60;;3744:38;3778:2;3767:9;3763:18;3744:38;:::i;:::-;3734:48;;3835:2;3824:9;3820:18;3807:32;3791:48;;3864:2;3854:8;3851:16;3848:36;;;3880:1;3877;3870:12;3848:36;3919:72;3983:7;3972:8;3961:9;3957:24;3919:72;:::i;:::-;4010:8;;-1:-1:-1;3893:98:1;-1:-1:-1;4098:2:1;4083:18;;4070:32;;-1:-1:-1;4114:16:1;;;4111:36;;;4143:1;4140;4133:12;4111:36;4182:72;4246:7;4235:8;4224:9;4220:24;4182:72;:::i;:::-;4273:8;;-1:-1:-1;4156:98:1;-1:-1:-1;4361:3:1;4346:19;;4333:33;;-1:-1:-1;4378:16:1;;;4375:36;;;4407:1;4404;4397:12;4375:36;;4446:72;4510:7;4499:8;4488:9;4484:24;4446:72;:::i;:::-;3197:1433;;;;-1:-1:-1;3197:1433:1;;;;;;;;4537:8;4619:3;4604:19;4591:33;;3197:1433;-1:-1:-1;;;;3197:1433:1:o;4827:248::-;4895:6;4903;4956:2;4944:9;4935:7;4931:23;4927:32;4924:52;;;4972:1;4969;4962:12;4924:52;-1:-1:-1;;4995:23:1;;;5065:2;5050:18;;;5037:32;;-1:-1:-1;4827:248:1:o;5080:857::-;5315:2;5367:21;;;5437:13;;5340:18;;;5459:22;;;5286:4;;5315:2;5500;;5518:18;;;;5559:15;;;5286:4;5602:309;5616:6;5613:1;5610:13;5602:309;;;5675:13;;5713:9;;5701:22;;5763:11;;;5757:18;5743:12;;;5736:40;5816:11;;5810:18;5796:12;;;5789:40;5858:4;5849:14;;;;5886:15;;;;5638:1;5631:9;5602:309;;;-1:-1:-1;5928:3:1;;5080:857;-1:-1:-1;;;;;;;5080:857:1:o;5942:437::-;6028:6;6036;6089:2;6077:9;6068:7;6064:23;6060:32;6057:52;;;6105:1;6102;6095:12;6057:52;6145:9;6132:23;-1:-1:-1;;;;;6170:6:1;6167:30;6164:50;;;6210:1;6207;6200:12;6164:50;6249:70;6311:7;6302:6;6291:9;6287:22;6249:70;:::i;:::-;6338:8;;6223:96;;-1:-1:-1;5942:437:1;-1:-1:-1;;;;5942:437:1:o;6637:250::-;6722:1;6732:113;6746:6;6743:1;6740:13;6732:113;;;6822:11;;;6816:18;6803:11;;;6796:39;6768:2;6761:10;6732:113;;;-1:-1:-1;;6879:1:1;6861:16;;6854:27;6637:250::o;6892:271::-;6934:3;6972:5;6966:12;6999:6;6994:3;6987:19;7015:76;7084:6;7077:4;7072:3;7068:14;7061:4;7054:5;7050:16;7015:76;:::i;:::-;7145:2;7124:15;-1:-1:-1;;7120:29:1;7111:39;;;;7152:4;7107:50;;6892:271;-1:-1:-1;;6892:271:1:o;7168:1272::-;7380:4;7409:2;7449;7438:9;7434:18;7479:2;7468:9;7461:21;7502:6;7537;7531:13;7568:6;7560;7553:22;7594:2;7584:12;;7627:2;7616:9;7612:18;7605:25;;7689:2;7679:6;7676:1;7672:14;7661:9;7657:30;7653:39;7727:2;7719:6;7715:15;7748:1;7758:653;7772:6;7769:1;7766:13;7758:653;;;7837:22;;;-1:-1:-1;;7833:36:1;7821:49;;7893:13;;7965:9;;-1:-1:-1;;;;;7961:35:1;7946:51;;8036:11;;;8030:18;7929:4;8068:15;;;8061:27;;;7929:4;8115:48;8147:15;;;8030:18;8115:48;:::i;:::-;8206:11;;;8200:18;8183:15;;;8176:43;8242:4;8289:11;;;8283:18;8266:15;;;;8259:43;;;;-1:-1:-1;;8389:12:1;;;;8354:15;;;;7794:1;7787:9;7758:653;;;-1:-1:-1;8428:6:1;;7168:1272;-1:-1:-1;;;;;;;;7168:1272:1:o;8445:315::-;8513:6;8521;8574:2;8562:9;8553:7;8549:23;8545:32;8542:52;;;8590:1;8587;8580:12;8542:52;8629:9;8616:23;8648:31;8673:5;8648:31;:::i;:::-;8698:5;8750:2;8735:18;;;;8722:32;;-1:-1:-1;;;8445:315:1:o;8765:183::-;8825:4;-1:-1:-1;;;;;8850:6:1;8847:30;8844:56;;;8880:18;;:::i;:::-;-1:-1:-1;8925:1:1;8921:14;8937:4;8917:25;;8765:183::o;8953:961::-;9046:6;9054;9107:2;9095:9;9086:7;9082:23;9078:32;9075:52;;;9123:1;9120;9113:12;9075:52;9163:9;9150:23;-1:-1:-1;;;;;9188:6:1;9185:30;9182:50;;;9228:1;9225;9218:12;9182:50;9251:22;;9304:4;9296:13;;9292:27;-1:-1:-1;9282:55:1;;9333:1;9330;9323:12;9282:55;9369:2;9356:16;9391:4;9415:60;9431:43;9471:2;9431:43;:::i;9415:60::-;9509:15;;;9591:1;9587:10;;;;9579:19;;9575:28;;;9540:12;;;;9615:19;;;9612:39;;;9647:1;9644;9637:12;9612:39;9671:11;;;;9691:142;9707:6;9702:3;9699:15;9691:142;;;9773:17;;9761:30;;9724:12;;;;9811;;;;9691:142;;;9852:5;9889:18;;;;9876:32;;-1:-1:-1;;;;;;8953:961:1:o;9919:435::-;9972:3;10010:5;10004:12;10037:6;10032:3;10025:19;10063:4;10092:2;10087:3;10083:12;10076:19;;10129:2;10122:5;10118:14;10150:1;10160:169;10174:6;10171:1;10168:13;10160:169;;;10235:13;;10223:26;;10269:12;;;;10304:15;;;;10196:1;10189:9;10160:169;;;-1:-1:-1;10345:3:1;;9919:435;-1:-1:-1;;;;;9919:435:1:o;10359:261::-;10538:2;10527:9;10520:21;10501:4;10558:56;10610:2;10599:9;10595:18;10587:6;10558:56;:::i;10625:163::-;10692:20;;10752:10;10741:22;;10731:33;;10721:61;;10778:1;10775;10768:12;10793:319;10860:6;10868;10921:2;10909:9;10900:7;10896:23;10892:32;10889:52;;;10937:1;10934;10927:12;10889:52;10976:9;10963:23;10995:31;11020:5;10995:31;:::i;:::-;11045:5;-1:-1:-1;11069:37:1;11102:2;11087:18;;11069:37;:::i;:::-;11059:47;;10793:319;;;;;:::o;11718:1088::-;11876:6;11884;11892;11900;11908;11916;11969:2;11957:9;11948:7;11944:23;11940:32;11937:52;;;11985:1;11982;11975:12;11937:52;12025:9;12012:23;-1:-1:-1;;;;;12095:2:1;12087:6;12084:14;12081:34;;;12111:1;12108;12101:12;12081:34;12150:70;12212:7;12203:6;12192:9;12188:22;12150:70;:::i;:::-;12239:8;;-1:-1:-1;12124:96:1;-1:-1:-1;12327:2:1;12312:18;;12299:32;;-1:-1:-1;12343:16:1;;;12340:36;;;12372:1;12369;12362:12;12340:36;12411:72;12475:7;12464:8;12453:9;12449:24;12411:72;:::i;:::-;12502:8;;-1:-1:-1;12385:98:1;-1:-1:-1;12590:2:1;12575:18;;12562:32;;-1:-1:-1;12606:16:1;;;12603:36;;;12635:1;12632;12625:12;12603:36;;12674:72;12738:7;12727:8;12716:9;12712:24;12674:72;:::i;:::-;11718:1088;;;;-1:-1:-1;11718:1088:1;;-1:-1:-1;11718:1088:1;;12765:8;;11718:1088;-1:-1:-1;;;11718:1088:1:o;13033:960::-;13220:2;13209:9;13202:21;13265:6;13259:13;13254:2;13243:9;13239:18;13232:41;13327:2;13319:6;13315:15;13309:22;13304:2;13293:9;13289:18;13282:50;13183:4;13379:2;13371:6;13367:15;13361:22;13419:4;13414:2;13403:9;13399:18;13392:32;13447:63;13505:3;13494:9;13490:19;13476:12;13447:63;:::i;:::-;13433:77;;13565:2;13557:6;13553:15;13547:22;13541:3;13530:9;13526:19;13519:51;13619:3;13611:6;13607:16;13601:23;13647:2;13643:7;13715:2;13703:9;13695:6;13691:22;13687:31;13681:3;13670:9;13666:19;13659:60;13742:52;13787:6;13771:14;13742:52;:::i;:::-;13728:66;;13843:3;13835:6;13831:16;13825:23;13803:45;;13914:2;13902:9;13894:6;13890:22;13886:31;13879:4;13868:9;13864:20;13857:61;;13935:52;13980:6;13964:14;13935:52;:::i;:::-;13927:60;13033:960;-1:-1:-1;;;;;13033:960:1:o;13998:450::-;14066:6;14119:2;14107:9;14098:7;14094:23;14090:32;14087:52;;;14135:1;14132;14125:12;14087:52;14175:9;14162:23;-1:-1:-1;;;;;14200:6:1;14197:30;14194:50;;;14240:1;14237;14230:12;14194:50;14263:22;;14316:4;14308:13;;14304:27;-1:-1:-1;14294:55:1;;14345:1;14342;14335:12;14294:55;14368:74;14434:7;14429:2;14416:16;14411:2;14407;14403:11;14368:74;:::i;14453:457::-;14531:6;14539;14592:2;14580:9;14571:7;14567:23;14563:32;14560:52;;;14608:1;14605;14598:12;14560:52;14648:9;14635:23;-1:-1:-1;;;;;14673:6:1;14670:30;14667:50;;;14713:1;14710;14703:12;14667:50;14736;14778:7;14769:6;14758:9;14754:22;14736:50;:::i;:::-;14726:60;;;14836:2;14825:9;14821:18;14808:32;14849:31;14874:5;14849:31;:::i;:::-;14899:5;14889:15;;;14453:457;;;;;:::o;15095:218::-;15242:2;15231:9;15224:21;15205:4;15262:45;15303:2;15292:9;15288:18;15280:6;15262:45;:::i;15548:118::-;15634:5;15627:13;15620:21;15613:5;15610:32;15600:60;;15656:1;15653;15646:12;15671:241;15727:6;15780:2;15768:9;15759:7;15755:23;15751:32;15748:52;;;15796:1;15793;15786:12;15748:52;15835:9;15822:23;15854:28;15876:5;15854:28;:::i;15917:658::-;16088:2;16140:21;;;16210:13;;16113:18;;;16232:22;;;16059:4;;16088:2;16311:15;;;;16285:2;16270:18;;;16059:4;16354:195;16368:6;16365:1;16362:13;16354:195;;;16433:13;;-1:-1:-1;;;;;16429:39:1;16417:52;;16524:15;;;;16489:12;;;;16465:1;16383:9;16354:195;;;-1:-1:-1;16566:3:1;;15917:658;-1:-1:-1;;;;;;15917:658:1:o;16580:798::-;16811:2;16863:21;;;16933:13;;16836:18;;;16955:22;;;16782:4;;16811:2;16996;;17014:18;;;;17055:15;;;16782:4;17098:254;17112:6;17109:1;17106:13;17098:254;;;17171:13;;17209:9;;17197:22;;17259:11;;17253:18;17239:12;;;17232:40;17292:12;;;;17327:15;;;;17134:1;17127:9;17098:254;;17383:322;17452:6;17505:2;17493:9;17484:7;17480:23;17476:32;17473:52;;;17521:1;17518;17511:12;17473:52;17561:9;17548:23;-1:-1:-1;;;;;17586:6:1;17583:30;17580:50;;;17626:1;17623;17616:12;17580:50;17649;17691:7;17682:6;17671:9;17667:22;17649:50;:::i;17938:252::-;18005:6;18013;18066:2;18054:9;18045:7;18041:23;18037:32;18034:52;;;18082:1;18079;18072:12;18034:52;18105:28;18123:9;18105:28;:::i;18771:793::-;18885:6;18893;18901;18909;18962:2;18950:9;18941:7;18937:23;18933:32;18930:52;;;18978:1;18975;18968:12;18930:52;19018:9;19005:23;-1:-1:-1;;;;;19088:2:1;19080:6;19077:14;19074:34;;;19104:1;19101;19094:12;19074:34;19127:50;19169:7;19160:6;19149:9;19145:22;19127:50;:::i;:::-;19117:60;;19227:2;19216:9;19212:18;19199:32;19186:45;;19240:31;19265:5;19240:31;:::i;:::-;19290:5;;-1:-1:-1;19348:2:1;19333:18;;19320:32;;19364:16;;;19361:36;;;19393:1;19390;19383:12;19361:36;;19432:72;19496:7;19485:8;19474:9;19470:24;19432:72;:::i;:::-;18771:793;;;;-1:-1:-1;19523:8:1;-1:-1:-1;;;;18771:793:1:o;19569:841::-;19700:6;19708;19716;19724;19732;19785:2;19773:9;19764:7;19760:23;19756:32;19753:52;;;19801:1;19798;19791:12;19753:52;19837:9;19824:23;19814:33;;19898:2;19887:9;19883:18;19870:32;-1:-1:-1;;;;;19962:2:1;19954:6;19951:14;19948:34;;;19978:1;19975;19968:12;19948:34;20017:70;20079:7;20070:6;20059:9;20055:22;20017:70;:::i;:::-;20106:8;;-1:-1:-1;19991:96:1;-1:-1:-1;20194:2:1;20179:18;;20166:32;;-1:-1:-1;20210:16:1;;;20207:36;;;20239:1;20236;20229:12;20207:36;;20278:72;20342:7;20331:8;20320:9;20316:24;20278:72;:::i;:::-;19569:841;;;;-1:-1:-1;19569:841:1;;-1:-1:-1;20369:8:1;;20252:98;19569:841;-1:-1:-1;;;19569:841:1:o;21044:456::-;21121:6;21129;21137;21190:2;21178:9;21169:7;21165:23;21161:32;21158:52;;;21206:1;21203;21196:12;21158:52;21245:9;21232:23;21264:31;21289:5;21264:31;:::i;:::-;21314:5;-1:-1:-1;21371:2:1;21356:18;;21343:32;21384:33;21343:32;21384:33;:::i;:::-;21044:456;;21436:7;;-1:-1:-1;;;21490:2:1;21475:18;;;;21462:32;;21044:456::o;22426:245::-;22505:6;22513;22566:2;22554:9;22545:7;22541:23;22537:32;22534:52;;;22582:1;22579;22572:12;22534:52;-1:-1:-1;;22605:16:1;;22661:2;22646:18;;;22640:25;22605:16;;22640:25;;-1:-1:-1;22426:245:1:o;23026:289::-;23157:3;23195:6;23189:13;23211:66;23270:6;23265:3;23258:4;23250:6;23246:17;23211:66;:::i;:::-;23293:16;;;;;23026:289;-1:-1:-1;;23026:289:1:o;23320:339::-;23522:2;23504:21;;;23561:2;23541:18;;;23534:30;-1:-1:-1;;;23595:2:1;23580:18;;23573:45;23650:2;23635:18;;23320:339::o;23664:315::-;23756:19;;;23738:3;-1:-1:-1;;;;;23787:31:1;;23784:51;;;23831:1;23828;23821:12;23784:51;23867:6;23864:1;23860:14;23919:8;23912:5;23905:4;23900:3;23896:14;23883:45;23948:18;;;;23968:4;23944:29;;23664:315;-1:-1:-1;;;23664:315:1:o;23984:389::-;-1:-1:-1;;;;;24201:32:1;;24183:51;;24270:2;24265;24250:18;;24243:30;;;-1:-1:-1;;24290:77:1;;24348:18;;24340:6;24332;24290:77;:::i;24378:245::-;24445:6;24498:2;24486:9;24477:7;24473:23;24469:32;24466:52;;;24514:1;24511;24504:12;24466:52;24546:9;24540:16;24565:28;24587:5;24565:28;:::i;25963:731::-;26318:2;26307:9;26300:21;26281:4;26344:56;26396:2;26385:9;26381:18;26373:6;26344:56;:::i;:::-;26448:9;26440:6;26436:22;26431:2;26420:9;26416:18;26409:50;26482:65;26540:6;26532;26524;26482:65;:::i;:::-;26468:79;;26595:9;26587:6;26583:22;26578:2;26567:9;26563:18;26556:50;26623:65;26681:6;26673;26665;26623:65;:::i;:::-;26615:73;25963:731;-1:-1:-1;;;;;;;;25963:731:1:o;26699:184::-;26769:6;26822:2;26810:9;26801:7;26797:23;26793:32;26790:52;;;26838:1;26835;26828:12;26790:52;-1:-1:-1;26861:16:1;;26699:184;-1:-1:-1;26699:184:1:o;27247:127::-;27308:10;27303:3;27299:20;27296:1;27289:31;27339:4;27336:1;27329:15;27363:4;27360:1;27353:15;27784:127;27845:10;27840:3;27836:20;27833:1;27826:31;27876:4;27873:1;27866:15;27900:4;27897:1;27890:15;27916:135;27955:3;27976:17;;;27973:43;;27996:18;;:::i;:::-;-1:-1:-1;28043:1:1;28032:13;;27916:135::o;28056:125::-;28121:9;;;28142:10;;;28139:36;;;28155:18;;:::i;28186:437::-;28458:1;28454;28449:3;28445:11;28441:19;28433:6;28429:32;28418:9;28411:51;28498:6;28493:2;28482:9;28478:18;28471:34;28541:2;28536;28525:9;28521:18;28514:30;28392:4;28561:56;28613:2;28602:9;28598:18;28590:6;28561:56;:::i;28978:128::-;29045:9;;;29066:11;;;29063:37;;;29080:18;;:::i;29111:292::-;29300:2;29289:9;29282:21;29263:4;29320:77;29393:2;29382:9;29378:18;29370:6;29362;29320:77;:::i;29408:443::-;29462:5;29515:3;29508:4;29500:6;29496:17;29492:27;29482:55;;29533:1;29530;29523:12;29482:55;29562:6;29556:13;29593:49;29609:32;29638:2;29609:32;:::i;29593:49::-;29667:2;29658:7;29651:19;29713:3;29706:4;29701:2;29693:6;29689:15;29685:26;29682:35;29679:55;;;29730:1;29727;29720:12;29679:55;29743:77;29817:2;29810:4;29801:7;29797:18;29790:4;29782:6;29778:17;29743:77;:::i;29856:1917::-;29986:6;30017:2;30060;30048:9;30039:7;30035:23;30031:32;30028:52;;;30076:1;30073;30066:12;30028:52;30109:9;30103:16;-1:-1:-1;;;;;30179:2:1;30171:6;30168:14;30165:34;;;30195:1;30192;30185:12;30165:34;30233:6;30222:9;30218:22;30208:32;;30278:7;30271:4;30267:2;30263:13;30259:27;30249:55;;30300:1;30297;30290:12;30249:55;30329:2;30323:9;30352:60;30368:43;30408:2;30368:43;:::i;30352:60::-;30446:15;;;30528:1;30524:10;;;;30516:19;;30512:28;;;30477:12;;;;30552:19;;;30549:39;;;30584:1;30581;30574:12;30549:39;30616:2;30612;30608:11;30628:1115;30644:6;30639:3;30636:15;30628:1115;;;30723:3;30717:10;30759:2;30746:11;30743:19;30740:109;;;30803:1;30832:2;30828;30821:14;30740:109;30872:20;;30915:4;30943:16;;;-1:-1:-1;;30939:30:1;30935:39;-1:-1:-1;30932:129:1;;;31015:1;31044:2;31040;31033:14;30932:129;31087:22;;:::i;:::-;31151:2;31147;31143:11;31137:18;31168:33;31193:7;31168:33;:::i;:::-;31214:22;;31259:2;31296:11;;;31290:18;31324:16;;;31321:109;;;31382:1;31412:3;31407;31400:16;31321:109;31466:65;31523:7;31518:2;31507:8;31503:2;31499:17;31495:26;31466:65;:::i;:::-;31450:14;;;31443:89;-1:-1:-1;31556:2:1;31600:12;;;31594:19;31578:14;;;31571:43;;;;31657:11;;;;31651:18;31634:15;;;31627:43;31683:18;;31721:12;;;;30661;;30628:1115;;;-1:-1:-1;31762:5:1;29856:1917;-1:-1:-1;;;;;;;;29856:1917:1:o;31778:762::-;32143:2;32132:9;32125:21;32106:4;32169:77;32242:2;32231:9;32227:18;32219:6;32211;32169:77;:::i;:::-;32294:9;32286:6;32282:22;32277:2;32266:9;32262:18;32255:50;32328:65;32386:6;32378;32370;32328:65;:::i;:::-;32314:79;;32441:9;32433:6;32429:22;32424:2;32413:9;32409:18;32402:50;32469:65;32527:6;32519;32511;32469:65;:::i;:::-;32461:73;31778:762;-1:-1:-1;;;;;;;;;31778:762:1:o;32545:217::-;32585:1;32611;32601:132;;32655:10;32650:3;32646:20;32643:1;32636:31;32690:4;32687:1;32680:15;32718:4;32715:1;32708:15;32601:132;-1:-1:-1;32747:9:1;;32545:217::o;32767:659::-;32832:5;32885:3;32878:4;32870:6;32866:17;32862:27;32852:55;;32903:1;32900;32893:12;32852:55;32932:6;32926:13;32958:4;32982:60;32998:43;33038:2;32998:43;:::i;32982:60::-;33076:15;;;33162:1;33158:10;;;;33146:23;;33142:32;;;33107:12;;;;33186:15;;;33183:35;;;33214:1;33211;33204:12;33183:35;33250:2;33242:6;33238:15;33262:135;33278:6;33273:3;33270:15;33262:135;;;33344:10;;33332:23;;33375:12;;;;33295;;33262:135;;33431:680;33527:6;33580:2;33568:9;33559:7;33555:23;33551:32;33548:52;;;33596:1;33593;33586:12;33548:52;33629:9;33623:16;-1:-1:-1;;;;;33699:2:1;33691:6;33688:14;33685:34;;;33715:1;33712;33705:12;33685:34;33738:22;;;;33794:4;33776:16;;;33772:27;33769:47;;;33812:1;33809;33802:12;33769:47;33838:22;;:::i;:::-;33889:2;33883:9;33876:5;33869:24;33932:2;33928;33924:11;33918:18;33961:2;33951:8;33948:16;33945:36;;;33977:1;33974;33967:12;33945:36;34013:67;34072:7;34061:8;34057:2;34053:17;34013:67;:::i;:::-;34008:2;33997:14;;33990:91;-1:-1:-1;34001:5:1;33431:680;-1:-1:-1;;;;;33431:680:1:o;34116:363::-;34211:6;34264:2;34252:9;34243:7;34239:23;34235:32;34232:52;;;34280:1;34277;34270:12;34232:52;34313:9;34307:16;-1:-1:-1;;;;;34338:6:1;34335:30;34332:50;;;34378:1;34375;34368:12;34332:50;34401:72;34465:7;34456:6;34445:9;34441:22;34401:72;:::i;34484:237::-;34556:9;;;34523:7;34581:9;;-1:-1:-1;;;34592:18:1;;34577:34;34574:60;;;34614:18;;:::i;:::-;34687:1;34678:7;34673:16;34670:1;34667:23;34663:1;34656:9;34653:38;34643:72;;34695:18;;:::i;34726:216::-;34790:9;;;34818:11;;;34765:3;34848:9;;34876:10;;34872:19;;34901:10;;34893:19;;34869:44;34866:70;;;34916:18;;:::i;:::-;34866:70;;34726:216;;;;:::o;34947:549::-;35010:3;35048:5;35042:12;35075:6;35070:3;35063:19;35101:4;35130:2;35125:3;35121:12;35114:19;;35167:2;35160:5;35156:14;35188:1;35198:273;35212:6;35209:1;35206:13;35198:273;;;35271:13;;35313:9;;35324:10;35309:26;35297:39;;35376:11;;35370:18;35356:12;;;35349:40;35418:4;35409:14;;;;35446:15;;;;35234:1;35227:9;35198:273;;35501:424;-1:-1:-1;;;;;35764:32:1;;35746:51;;35833:2;35828;35813:18;;35806:30;;;-1:-1:-1;;35853:66:1;;35900:18;;35892:6;35853:66;:::i;36508:1005::-;36649:6;36657;36665;36673;36681;36689;36697;36750:3;36738:9;36729:7;36725:23;36721:33;36718:53;;;36767:1;36764;36757:12;36718:53;36799:9;36793:16;36818:31;36843:5;36818:31;:::i;:::-;36917:2;36902:18;;36896:25;36868:5;;-1:-1:-1;;;;;;36970:14:1;;;36967:34;;;36997:1;36994;36987:12;36967:34;37020:61;37073:7;37064:6;37053:9;37049:22;37020:61;:::i;:::-;37010:71;;37127:2;37116:9;37112:18;37106:25;37090:41;;37156:2;37146:8;37143:16;37140:36;;;37172:1;37169;37162:12;37140:36;;37195:63;37250:7;37239:8;37228:9;37224:24;37195:63;:::i;:::-;37185:73;;;37298:2;37287:9;37283:18;37277:25;37267:35;;37342:3;37331:9;37327:19;37321:26;37311:36;;37387:3;37376:9;37372:19;37366:26;37356:36;;37437:3;37426:9;37422:19;37416:26;37451:30;37473:7;37451:30;:::i;:::-;37500:7;37490:17;;;36508:1005;;;;;;;;;;:::o;37518:1181::-;37643:6;37674:2;37717;37705:9;37696:7;37692:23;37688:32;37685:52;;;37733:1;37730;37723:12;37685:52;37766:9;37760:16;-1:-1:-1;;;;;37791:6:1;37788:30;37785:50;;;37831:1;37828;37821:12;37785:50;37854:22;;37907:4;37899:13;;37895:27;-1:-1:-1;37885:55:1;;37936:1;37933;37926:12;37885:55;37965:2;37959:9;37988:60;38004:43;38044:2;38004:43;:::i;37988:60::-;38082:15;;;38164:1;38160:10;;;;38152:19;;38148:28;;;38113:12;;;;38188:19;;;38185:39;;;38220:1;38217;38210:12;38185:39;38244:11;;;;38264:405;38280:6;38275:3;38272:15;38264:405;;;38362:4;38356:3;38347:7;38343:17;38339:28;38336:118;;;38408:1;38437:2;38433;38426:14;38336:118;38480:22;;:::i;:::-;38529:10;;38515:25;;38582:12;;;38576:19;38560:14;;;38553:43;38609:18;;38306:4;38297:14;;;;38647:12;;;;38264:405;;38704:1044;39018:4;39064:1;39060;39055:3;39051:11;39047:19;39105:2;39097:6;39093:15;39082:9;39075:34;39128:2;39166;39161;39150:9;39146:18;39139:30;39192:66;39254:2;39243:9;39239:18;39231:6;39192:66;:::i;:::-;39294:22;;;39289:2;39274:18;;39267:50;39352:22;;;39428:6;;39390:15;;39452:1;39462:260;39476:6;39473:1;39470:13;39462:260;;;39551:6;39538:20;39571:31;39596:5;39571:31;:::i;:::-;39627:14;;39615:27;;39697:15;;;;39662:12;;;;39498:1;39491:9;39462:260;;;-1:-1:-1;39739:3:1;38704:1044;-1:-1:-1;;;;;;;;;38704:1044:1:o;39753:261::-;39823:3;-1:-1:-1;;;;;39844:31:1;;39841:51;;;39888:1;39885;39878:12;39841:51;39924:6;39921:1;39917:14;39965:8;39958:5;39953:3;39940:34;39990:18;;;;;39753:261;-1:-1:-1;;;39753:261:1:o;40019:468::-;40336:6;40331:3;40324:19;40306:3;40359:122;40413:67;40476:2;40471:3;40467:12;40459:6;40451;40413:67;:::i;:::-;40405:6;40397;40359:122;:::i;40492:136::-;40531:3;40559:5;40549:39;;40568:18;;:::i;:::-;-1:-1:-1;;;40604:18:1;;40492:136::o;41036:168::-;41109:9;;;41140;;41157:15;;;41151:22;;41137:37;41127:71;;41178:18;;:::i;41209:172::-;41276:10;41306;;;41318;;;41302:27;;41341:11;;;41338:37;;;41355:18;;:::i;:::-;41338:37;41209:172;;;;:::o;41828:127::-;41889:10;41884:3;41880:20;41877:1;41870:31;41920:4;41917:1;41910:15;41944:4;41941:1;41934:15

Swarm Source

ipfs://b2d8e7e1ed2126defb28a04a260c24a753558eacd14b346029732c5a3e041e2b

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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