ETH Price: $3,874.98 (+0.46%)
Gas: 8 Gwei

Contract

0xD476595aa1737F5FdBfE9C8FEa17737679D9f89a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Lock115454472020-12-28 23:36:111247 days ago1609198571IN
0xD476595a...679D9f89a
0 ETH0.0027277874.74
Deposit Locker S...115454212020-12-28 23:29:331247 days ago1609198173IN
0xD476595a...679D9f89a
0.1 ETH0.0279405268
Deposit Locker115454132020-12-28 23:28:031247 days ago1609198083IN
0xD476595a...679D9f89a
0 ETH0.039630682
Update Locker Se...115192222020-12-24 23:13:271251 days ago1608851607IN
0xD476595a...679D9f89a
0 ETH0.0018059335
Add Market Terms115192032020-12-24 23:09:231251 days ago1608851363IN
0xD476595a...679D9f89a
0 ETH0.0279676235.00000145
Withdraw115183532020-12-24 19:59:441251 days ago1608839984IN
0xD476595a...679D9f89a
0 ETH0.0018325132
Deposit Locker S...114858652020-12-19 20:31:401256 days ago1608409900IN
0xD476595a...679D9f89a
0.1 ETH0.0138561535
Release114849472020-12-19 17:04:551256 days ago1608397495IN
0xD476595a...679D9f89a
0 ETH0.0080792884
Deposit Locker114849412020-12-19 17:02:581256 days ago1608397378IN
0xD476595a...679D9f89a
0 ETH0.0351189176
Lock114606932020-12-15 23:46:131260 days ago1608075973IN
0xD476595a...679D9f89a
0 ETH0.0022400861.6
Deposit Locker S...114606812020-12-15 23:44:061260 days ago1608075846IN
0xD476595a...679D9f89a
0.1 ETH0.028619867.2
Request Locker R...114272722020-12-10 20:13:221265 days ago1607631202IN
0xD476595a...679D9f89a
0 ETH0.008279221
Resolve114165612020-12-09 4:40:291267 days ago1607488829IN
0xD476595a...679D9f89a
0 ETH0.0047154724
Deposit Locker114165602020-12-09 4:40:271267 days ago1607488827IN
0xD476595a...679D9f89a
0 ETH0.0116475324.1
Request Locker R...114159352020-12-09 2:21:481267 days ago1607480508IN
0xD476595a...679D9f89a
0 ETH0.0154350240.7
Update Swift Res...114158612020-12-09 2:03:261267 days ago1607479406IN
0xD476595a...679D9f89a
0 ETH0.0013005124.00000156
Resolve114156992020-12-09 1:33:081267 days ago1607477588IN
0xD476595a...679D9f89a
0 ETH0.0202787473
Update Swift Res...114156522020-12-09 1:24:051267 days ago1607477045IN
0xD476595a...679D9f89a
0 ETH0.0024841471
Request Locker R...114149862020-12-08 22:55:461267 days ago1607468146IN
0xD476595a...679D9f89a
0 ETH0.0125144933
Resolve114127422020-12-08 14:41:471267 days ago1607438507IN
0xD476595a...679D9f89a
0 ETH0.0103310955
Request Locker R...114127252020-12-08 14:38:171267 days ago1607438297IN
0xD476595a...679D9f89a
0 ETH0.0179105553
Request Locker R...114096092020-12-08 3:05:541268 days ago1607396754IN
0xD476595a...679D9f89a
0 ETH0.0144878436.75000129
Update Swift Res...114095472020-12-08 2:51:271268 days ago1607395887IN
0xD476595a...679D9f89a
0 ETH0.0018107734
Release113999952020-12-06 15:25:591269 days ago1607268359IN
0xD476595a...679D9f89a
0 ETH0.0009672623.1
Release113999912020-12-06 15:24:521269 days ago1607268292IN
0xD476595a...679D9f89a
0 ETH0.0017947323.1
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
115454212020-12-28 23:29:331247 days ago1609198173
0xD476595a...679D9f89a
0.1 ETH
114858652020-12-19 20:31:401256 days ago1608409900
0xD476595a...679D9f89a
0.1 ETH
114606812020-12-15 23:44:061260 days ago1608075846
0xD476595a...679D9f89a
0.1 ETH
113960142020-12-06 0:58:331270 days ago1607216313
0xD476595a...679D9f89a
0.01 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LexLocker

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-30
*/

/*
██╗     ███████╗██╗  ██╗    
██║     ██╔════╝╚██╗██╔╝    
██║     █████╗   ╚███╔╝     
██║     ██╔══╝   ██╔██╗     
███████╗███████╗██╔╝ ██╗    
╚══════╝╚══════╝╚═╝  ╚═╝                                                                             
██╗      ██████╗  ██████╗██╗  ██╗███████╗██████╗     
██║     ██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗    
██║     ██║   ██║██║     █████╔╝ █████╗  ██████╔╝    
██║     ██║   ██║██║     ██╔═██╗ ██╔══╝  ██╔══██╗    
███████╗╚██████╔╝╚██████╗██║  ██╗███████╗██║  ██║    
╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝
DEAR MSG.SENDER(S):
/ LXL is a project in beta
// Please audit & use at your own risk
/// Entry into LXL shall not create an attorney/client relationship
//// Likewise, LXL should not be construed as legal advice or replacement for professional counsel
///// STEAL THIS C0D3SL4W 
~presented by LexDAO LLC \+|+/ 
*/
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.7.5;

interface IERC20 { // brief interface for erc20 token
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

library Address { // helper for address type - see openzeppelin-contracts/blob/master/contracts/utils/Address.sol
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

library SafeERC20 { // wrapper around erc20 token tx for non-standard contract - see openzeppelin-contracts/blob/master/contracts/token/ERC20/SafeERC20.sol
    using Address for address;
    
    function safeTransfer(IERC20 token, address to, uint256 amount) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, amount));
    }
    
    function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, amount));
    }
    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");
        (bool success, bytes memory returnData) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returnData.length > 0) { // return data is optional
            require(abi.decode(returnData, (bool)), "SafeERC20: erc20 operation did not succeed");
        }
    }
}

library SafeMath { // arithmetic wrapper for under/overflow check
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;
        return c;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;
        return c;
    }
}

contract ReentrancyGuard { // call wrapper for reentrancy check - see https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @title LexLocker.
 * @author LexDAO LLC.
 * @notice Token locker registry with embedded terms and resolution.
 */
contract LexLocker is ReentrancyGuard { 
    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    /*$<⚖️️> LXL <⚔️>$*/
    address public manager; // account managing LXL settings - see 'Manager Functions' - updateable by manager
    address public swiftResolverToken; // token required to participate as swift resolver - updateable by manager
    address public userRewardToken; // token for LXL user rewards - updateable by manager
    address public wETH; // ether token wrapper contract reference - updateable by manager
    uint256 public lockerCount; // lockers counted into LXL registry
    uint256 public resolutionRate; // rate to determine resolution fee for disputed locker (e.g., 20 = 5% of remainder) - updateable by manager
    uint256 public swiftResolverTokenBalance; // balance required in `swiftResolverToken` to participate as swift resolver - updateable by manager
    uint256 public userReward; // reward amount granted to LXL users in `userRewardToken`- updateable by manager
    string public lockerTerms; // general terms wrapping LXL - updateable by manager
    string[] public marketTerms; // embedded market LXL terms - attach to locker `details` (e.g., "MT:1") - updateable by manager
    string[] public resolutions; // locker resolutions stamped by LXL resolvers
    
    mapping(address => uint256[]) private registrations; // tracks registered lockers per account (client/provider)
    mapping(address => bool) public swiftResolverRegistrations; // tracks registered swift resolvers
    mapping(uint256 => ADR) public adrs; // tracks ADR details for registered lockers
    mapping(uint256 => Locker) public lockers; // tracks registered lockers details
    
    event DepositLocker(address indexed client, address clientOracle, address indexed provider, address indexed resolver, address token, uint256[] amount, uint256 registration, uint256 sum, uint256 termination, string details, bool swiftResolver);
    event RegisterLocker(address indexed client, address clientOracle, address indexed provider, address indexed resolver, address token, uint256[] amount, uint256 registration, uint256 sum, uint256 termination, string details, bool swiftResolver);
    event ConfirmLocker(uint256 registration); 
    event RequestLockerResolution(address indexed client, address indexed counterparty, address indexed resolver, address token, uint256 registration, uint256 sum, string details, bool swiftResolver); 
    event Release(uint256 milestone, uint256 payment, uint256 registration); 
    event Withdraw(uint256 registration);
    event AssignClientOracle(address indexed clientOracle, uint256 registration);
    event ClientProposeResolver(address indexed proposedResolver, uint256 registration, string details);
    event ProviderProposeResolver(address indexed proposedResolver, uint256 registration, string details);
    event UpdateSwiftResolverStatus(address indexed swiftResolver, string details, bool registered);
    event Lock(address indexed caller, uint256 registration, string details);
    event Resolve(address indexed resolver, uint256 clientAward, uint256 providerAward, uint256 registration, uint256 resolutionFee, string resolution); 
    event AddMarketTerms(uint256 index, string terms);
    event AmendMarketTerms(uint256 index, string terms);
    event UpdateLockerSettings(address indexed manager, address swiftResolverToken, address userRewardToken, address wETH, uint256 resolutionRate, uint256 swiftResolverTokenBalance, uint256 userReward, string lockerTerms);
    event TributeToManager(address indexed caller, uint256 amount, string details);

    struct ADR {  
        address proposedResolver;
        address resolver;
        uint8 clientProposedResolver;
        uint8 providerProposedResolver;
        uint256 clientAward;
        uint256 providerAward;
	    uint256 resolutionRate;
	    string resolution;
	    bool swiftResolver;
    }
    
    struct Locker {  
        address client; 
        address clientOracle;
        address provider;
        address token;
        uint8 confirmed;
        uint8 locked;
        uint256[] amount;
        uint256 currentMilestone;
        uint256 milestones;
        uint256 released;
        uint256 sum;
        uint256 termination;
        string details; 
    }
    
    constructor(
        address _manager, 
        address _swiftResolverToken,
        address _userRewardToken,
        address _wETH,
        uint256 _resolutionRate, 
        uint256 _swiftResolverTokenBalance, 
        uint256 _userReward,
        string memory _lockerTerms
    ) {
        require(_resolutionRate > 0, "_resolutionRate < 1");
        
        manager = _manager;
        swiftResolverToken = _swiftResolverToken;
        userRewardToken = _userRewardToken;
        wETH = _wETH;
        resolutionRate = _resolutionRate;
        swiftResolverTokenBalance = _swiftResolverTokenBalance;
        userReward = _userReward;
        lockerTerms = _lockerTerms;
    }

    /***************
    LOCKER FUNCTIONS
    ***************/
    // ************
    // REGISTRATION
    // ************
    /**
     * @notice LXL can be registered as deposit from `client` for benefit of `provider`.
     * @dev If LXL `token` is wETH, msg.value can be wrapped into wETH in single call.
     * @param clientOracle Account that can help call `release()` and `withdraw()` (default to `client` if unsure).
     * @param provider Account to receive registered `amount`s.
     * @param resolver Account that can call `resolve()` to award `sum` remainder between LXL parties.
     * @param token Token address for `amount` deposit.
     * @param amount Array of milestone `amount`s to be sent to `provider` on call of `release()`.
     * @param termination Exact `termination` date in seconds since epoch.
     * @param details Context re: LXL.
     * @param swiftResolver If `true`, `sum` remainder can be resolved by holders of `swiftResolverToken`.
     */
    function depositLocker( // CLIENT-TRACK
        address clientOracle, 
        address provider,
        address resolver,
        address token,
        uint256[] calldata amount, 
        uint256 termination, 
        string memory details,
        bool swiftResolver 
    ) external nonReentrant payable returns (uint256) {
        require(msg.sender != resolver && clientOracle != resolver && provider != resolver, "client/clientOracle/provider = resolver");
        
        uint256 sum;
        for (uint256 i = 0; i < amount.length; i++) {
            sum = sum.add(amount[i]);
        }

        if (msg.value > 0) {
            address weth = wETH;
            require(token == weth && msg.value == sum, "!ethBalance");
            (bool success, ) = weth.call{value: msg.value}("");
            require(success, "!ethCall");
            IERC20(weth).transfer(address(this), msg.value);
        } else {
            IERC20(token).safeTransferFrom(msg.sender, address(this), sum);
        }
        
        lockerCount++;
        uint256 registration = lockerCount;
        
        registrations[msg.sender].push(registration);
        registrations[provider].push(registration);
        
        adrs[registration] = ADR( 
            address(0),
            resolver,
            0,
            0,
            0,
            0,
	        resolutionRate, 
	        "",
	        swiftResolver);

        lockers[registration] = Locker( 
            msg.sender, 
            clientOracle,
            provider,
            token,
            1,
            0,
            amount,
            1,
            amount.length,
            0,
            sum,
            termination,
            details);
        
        if (userReward > 0) {IERC20(userRewardToken).transfer(msg.sender, userReward);} // grant LXL user reward

        emit DepositLocker(msg.sender, clientOracle, provider, resolver, token, amount, registration, sum, termination, details, swiftResolver); 
        
	    return registration;
    }
    
    /**
     * @notice LXL can be registered as single deposit (lump sum) from `client` for benefit of `provider`.
     * @dev If LXL `token` is wETH, msg.value can be wrapped into wETH in single call.
     * @param clientOracle Account that can help call `release()` and `withdraw()` (default to `client` if unsure).
     * @param provider Account to receive registered `amount`s.
     * @param resolver Account that can call `resolve()` to award `sum` remainder between LXL parties.
     * @param token Token address for `amount` deposit.
     * @param sum Lump `sum` to be sent to `provider` on call of `release()`.
     * @param termination Exact `termination` date in seconds since epoch.
     * @param details Context re: LXL.
     * @param swiftResolver If `true`, `sum` remainder can be resolved by holders of `swiftResolverToken`.
     */
    function depositLockerSingleMilestone( // CLIENT-TRACK
        address clientOracle, 
        address provider,
        address resolver,
        address token,
        uint256 sum, 
        uint256 termination, 
        string calldata details,
        bool swiftResolver 
    ) external nonReentrant payable returns (uint256) {
        require(msg.sender != resolver && clientOracle != resolver && provider != resolver, "client/clientOracle/provider = resolver");
        
        if (msg.value > 0) {
            address weth = wETH;
            require(token == weth && msg.value == sum, "!ethBalance");
            (bool success, ) = weth.call{value: msg.value}("");
            require(success, "!ethCall");
            IERC20(weth).transfer(address(this), msg.value);
        } else {
            IERC20(token).safeTransferFrom(msg.sender, address(this), sum);
        }
        
        uint256[] memory amount = new uint256[](1);
        amount[0] = sum;
        
        lockerCount++;
        uint256 registration = lockerCount;
        
        registrations[msg.sender].push(registration);
        registrations[provider].push(registration);
        
        adrs[registration] = ADR( 
            address(0),
            resolver,
            0,
            0,
            0,
            0,
	        resolutionRate, 
	        "",
	        swiftResolver);

        lockers[registration] = Locker( 
            msg.sender, 
            clientOracle,
            provider,
            token,
            1,
            0,
            amount,
            1,
            1,
            0,
            sum,
            termination,
            details);
        
        if (userReward > 0) {IERC20(userRewardToken).transfer(msg.sender, userReward);} // grant LXL user reward

        emit DepositLocker(msg.sender, clientOracle, provider, resolver, token, amount, registration, sum, termination, details, swiftResolver); 
        
	    return registration;
    }
    
    /**
     * @notice LXL can be registered as `provider` request for `client` deposit (by calling `confirmLocker()`).
     * @param client Account to provide `sum` deposit and call `release()` of registered `amount`s.
     * @param clientOracle Account that can help call `release()` and `withdraw()` (default to `client` if unsure).
     * @param provider Account to receive registered `amount`s.
     * @param resolver Account that can call `resolve()` to award `sum` remainder between LXL parties.
     * @param token Token address for `amount` deposit.
     * @param amount Array of milestone `amount`s to be sent to `provider` on call of `release()`.
     * @param termination Exact `termination` date in seconds since epoch.
     * @param details Context re: LXL.
     * @param swiftResolver If `true`, `sum` remainder can be resolved by holders of `swiftResolverToken`.
     */
    function registerLocker( // PROVIDER-TRACK
        address client,
        address clientOracle, 
        address provider,
        address resolver,
        address token,
        uint256[] calldata amount, 
        uint256 termination, 
        string memory details,
        bool swiftResolver 
    ) external nonReentrant returns (uint256) {
        require(client != resolver && clientOracle != resolver && provider != resolver, "client/clientOracle/provider = resolver");
        
        uint256 sum;
        for (uint256 i = 0; i < amount.length; i++) {
            sum = sum.add(amount[i]);
        }
 
        lockerCount++;
        uint256 registration = lockerCount;
        
        registrations[client].push(registration);
        registrations[provider].push(registration);
       
        adrs[registration] = ADR( 
            address(0),
            resolver,
            0,
            0,
            0,
            0,
	        resolutionRate, 
	        "",
	        swiftResolver);

        lockers[registration] = Locker( 
            client, 
            clientOracle,
            provider,
            token,
            0,
            0,
            amount,
            1,
            amount.length,
            0,
            sum,
            termination,
            details);
        
        if (userReward > 0) {IERC20(userRewardToken).transfer(msg.sender, userReward);} // grant LXL user reward

        emit RegisterLocker(client, clientOracle, provider, resolver, token, amount, registration, sum, termination, details, swiftResolver); 
        
	    return registration;
    }
    
    /**
     * @notice LXL `client` can confirm after `registerLocker()` is called to deposit `sum` for `provider`.
     * @dev If LXL `token` is wETH, msg.value can be wrapped into wETH in single call.
     * @param registration Registered LXL number.
     */
    function confirmLocker(uint256 registration) external nonReentrant payable { // PROVIDER-TRACK
        Locker storage locker = lockers[registration];
        
        require(msg.sender == locker.client, "!client");
        require(locker.confirmed == 0, "confirmed");
        
        if (msg.value > 0) {
            address weth = wETH;
            require(locker.token == weth && msg.value == locker.sum, "!ethBalance");
            (bool success, ) = weth.call{value: msg.value}("");
            require(success, "!ethCall");
            IERC20(weth).transfer(address(this), msg.value);
        } else {
            IERC20(locker.token).safeTransferFrom(msg.sender, address(this), locker.sum);
        }
        
        locker.confirmed = 1;
        
        emit ConfirmLocker(registration); 
    }
    
    /**
     * @notice LXL depositor (`client`) can request direct resolution between selected `counterparty` over `sum`. E.g., staked wager to benefit charity as `counterparty`.
     * @dev If LXL `token` is wETH, msg.value can be wrapped into wETH in single call. 
     * @param counterparty Other account (`provider`) that can receive award from `resolver`.
     * @param resolver Account that can call `resolve()` to award `sum` between LXL parties.
     * @param token Token address for `sum`.
     * @param sum Lump `sum` amount for resolution.
     * @param details Context re: resolution request.
     * @param swiftResolver If `true`, `sum` can be resolved by holders of `swiftResolverToken`.
     */
    function requestLockerResolution(address counterparty, address resolver, address token, uint256 sum, string calldata details, bool swiftResolver) external nonReentrant payable returns (uint256) {
        require(msg.sender != resolver && counterparty != resolver, "client/counterparty = resolver");
        
        if (msg.value > 0) {
            address weth = wETH;
            require(token == weth && msg.value == sum, "!ethBalance");
            (bool success, ) = weth.call{value: msg.value}("");
            require(success, "!ethCall");
            IERC20(weth).transfer(address(this), msg.value);
        } else {
            IERC20(token).safeTransferFrom(msg.sender, address(this), sum);
        }
        
        uint256[] memory amount = new uint256[](1);
        amount[0] = sum;
        
        lockerCount++;
        uint256 registration = lockerCount;
        
        registrations[msg.sender].push(registration);
        registrations[counterparty].push(registration);
        
        adrs[registration] = ADR( 
            address(0),
            resolver,
            0,
            0,
            0,
            0,
	        resolutionRate, 
	        "",
	        swiftResolver);
     
        lockers[registration] = Locker( 
            msg.sender, 
            address(0),
            counterparty,
            token,
            1,
            1,
            amount,
            0,
            0,
            0,
            sum,
            0,
            details);
        
        if (userReward > 0) {IERC20(userRewardToken).transfer(msg.sender, userReward);} // grant LXL user reward

        emit RequestLockerResolution(msg.sender, counterparty, resolver, token, registration, sum, details, swiftResolver); 
        
	    return registration;
    }
    
    // ***********
    // CLIENT MGMT
    // ***********
    /**
     * @notice LXL `client` can assign account as `clientOracle` to help call `release()` and `withdraw()`.
     * @param clientOracle Account that can help call `release()` and `withdraw()` (default to `client` if unsure).
     * @param registration Registered LXL number.
     */
    function assignClientOracle(address clientOracle, uint256 registration) external nonReentrant {
        ADR storage adr = adrs[registration];
        Locker storage locker = lockers[registration];
        
        require(msg.sender == locker.client, "!client");
        require(clientOracle != adr.resolver, "clientOracle = resolver");
        require(locker.locked == 0, "locked");
	    require(locker.released < locker.sum, "released");
        
        locker.clientOracle = clientOracle;
        
        emit AssignClientOracle(clientOracle, registration);
    }
    
    /**
     * @notice LXL `client` or `clientOracle` can release milestone `amount` to `provider`. 
     * @param registration Registered LXL number.
     */
    function release(uint256 registration) external nonReentrant {
    	Locker storage locker = lockers[registration];
    	
    	uint256 milestone = locker.currentMilestone-1;
        uint256 payment = locker.amount[milestone];
        uint256 released = locker.released;
        uint256 sum = locker.sum;
	    
	    require(msg.sender == locker.client || msg.sender == locker.clientOracle, "!client/oracle");
	    require(locker.confirmed == 1, "!confirmed");
	    require(locker.locked == 0, "locked");
	    require(released < sum, "released");

        IERC20(locker.token).safeTransfer(locker.provider, payment);
        locker.released = released.add(payment);
        
        if (locker.released < sum) {locker.currentMilestone++;}
        
	    emit Release(milestone+1, payment, registration); 
    }
    
    /**
     * @notice LXL `client` or `clientOracle` can withdraw `sum` remainder after `termination`. 
     * @dev `release()` can still be called by `client` or `clientOracle` after `termination` to preserve extension option. 
     * @param registration Registered LXL number.
     */
    function withdraw(uint256 registration) external nonReentrant {
    	Locker storage locker = lockers[registration];
    	
    	address client = locker.client;
    	uint256 released = locker.released;
    	uint256 sum = locker.sum;
        
        require(msg.sender == client || msg.sender == locker.clientOracle, "!client/oracle");
        require(locker.confirmed == 1, "!confirmed");
        require(locker.locked == 0, "locked");
        require(released < sum, "released");
        require(locker.termination < block.timestamp, "!terminated");
        
        IERC20(locker.token).safeTransfer(client, sum.sub(released));
        locker.released = sum; 
        
	    emit Withdraw(registration); 
    }
    
    // **********
    // RESOLUTION
    // **********
    /**
     * @notice LXL `client` or `provider` can lock to freeze release and withdrawal of `sum` remainder until `resolver` calls `resolve()`. 
     * @dev `lock()` can be called repeatedly to allow LXL parties to continue to provide context until resolution. 
     * @param registration Registered LXL number.
     * @param details Context re: lock / dispute.
     */
    function lock(uint256 registration, string calldata details) external nonReentrant {
        Locker storage locker = lockers[registration]; 
        
        require(msg.sender == locker.client || msg.sender == locker.provider, "!party"); 
        require(locker.confirmed == 1, "!confirmed");
        require(locker.released < locker.sum, "released");

	    locker.locked = 1; 
	    
	    emit Lock(msg.sender, registration, details);
    }
    
    /**
     * @notice After LXL is locked, selected `resolver` awards `sum` remainder between `client` and `provider` minus fee.
     * @param clientAward Remainder awarded to `client`.
     * @param providerAward Remainder awarded to `provider`.
     * @param registration Registered LXL number.
     * @param resolution Context re: resolution.
     */
    function resolve(uint256 clientAward, uint256 providerAward, uint256 registration, string calldata resolution) external nonReentrant {
        ADR storage adr = adrs[registration];
        Locker storage locker = lockers[registration];
        
        address token = locker.token;
        uint256 released = locker.released;
	    uint256 sum = locker.sum;
	    // calculate resolution fee as set on registration:
	    uint256 remainder = sum.sub(released); 
	    uint256 resolutionFee = remainder.div(adr.resolutionRate); 
	    
	    require(locker.locked == 1, "!locked"); 
	    require(released < sum, "released");
	    require(clientAward.add(providerAward) == remainder.sub(resolutionFee), "awards != remainder - fee");
	    
	    if (adr.swiftResolver) {
	        require(msg.sender != locker.client && msg.sender != locker.provider, "client/provider = swiftResolver");
	        require(IERC20(swiftResolverToken).balanceOf(msg.sender) >= swiftResolverTokenBalance && swiftResolverRegistrations[msg.sender], "!swiftResolverTokenBalance/registered");
        } else {
            require(msg.sender == adr.resolver, "!resolver");
        }
        
        IERC20(token).safeTransfer(msg.sender, resolutionFee);
        IERC20(token).safeTransfer(locker.client, clientAward);
        IERC20(token).safeTransfer(locker.provider, providerAward);
        
        adr.clientAward = clientAward;
	    adr.providerAward = providerAward;
	    adr.resolution = resolution;
	    locker.released = sum; 
	    resolutions.push(resolution);
	    
	    emit Resolve(msg.sender, clientAward, providerAward, registration, resolutionFee, resolution);
    }
    
    /**
     * @notice Fallback to allow LXL party to suggest new `resolver` to counterparty.
     * @dev LXL `client` calls to update `resolver` selection - if matches `provider` suggestion or confirmed, `resolver` updates. 
     * @param proposedResolver Proposed account to resolve LXL.
     * @param registration Registered LXL number.
     * @param details Context re: proposed `resolver`.
     */
    function clientProposeResolver(address proposedResolver, uint256 registration, string calldata details) external nonReentrant { 
        ADR storage adr = adrs[registration];
        Locker storage locker = lockers[registration]; 
        
        require(msg.sender == locker.client, "!client"); 
        require(msg.sender != proposedResolver && locker.clientOracle != proposedResolver && locker.provider != proposedResolver, "client/clientOracle/provider = proposedResolver");
        require(adr.clientProposedResolver == 0, "pending");
	    require(locker.released < locker.sum, "released");
        
        if (adr.proposedResolver == proposedResolver) {
            adr.resolver = proposedResolver;
        } 

	    adr.proposedResolver = proposedResolver; 
	    adr.clientProposedResolver = 1;
	    adr.providerProposedResolver = 0;
	    
	    emit ClientProposeResolver(proposedResolver, registration, details);
    }
    
    /**
     * @notice Fallback to allow LXL party to suggest new `resolver` to counterparty.
     * @dev LXL `provider` calls to update `resolver` selection - if matches `client` suggestion or confirmed, `resolver` updates. 
     * @param proposedResolver Proposed account to resolve LXL.
     * @param registration Registered LXL number.
     * @param details Context re: proposed `resolver`.
     */
    function providerProposeResolver(address proposedResolver, uint256 registration, string calldata details) external nonReentrant { 
        ADR storage adr = adrs[registration];
        Locker storage locker = lockers[registration]; 
        
        require(msg.sender == locker.provider, "!provider"); 
        require(locker.client != proposedResolver && locker.clientOracle != proposedResolver && msg.sender != proposedResolver, "client/clientOracle/provider = proposedResolver");
        require(adr.providerProposedResolver == 0, "pending");
	    require(locker.released < locker.sum, "released");

	    if (adr.proposedResolver == proposedResolver) {
            adr.resolver = proposedResolver;
        } 
	    
	    adr.proposedResolver = proposedResolver;
	    adr.clientProposedResolver = 0;
	    adr.providerProposedResolver = 1;
	    
	    emit ProviderProposeResolver(proposedResolver, registration, details);
    }
    
    /**
     * @notice Swift resolvers call to update LXL service status.
     * @dev Swift resolvers must first confirm to participate and can continue with details / cancel LXL service.  
     * @param details Context re: status update.
     * @param registered If `true`, swift resolver can participate in LXL resolution.
     */
    function updateSwiftResolverStatus(string calldata details, bool registered) external nonReentrant {
        require(IERC20(swiftResolverToken).balanceOf(msg.sender) >= swiftResolverTokenBalance, "!swiftResolverTokenBalance");
        swiftResolverRegistrations[msg.sender] = registered;
        emit UpdateSwiftResolverStatus(msg.sender, details, registered);
    }
    
    // *******
    // GETTERS
    // *******
    function latestLockerRegistration(address account) external view returns (uint256 latest) { // get latest registered locker per account
        uint256[] memory registered = registrations[account];
        if (registered.length == 0) {return 0;} else {return registered[registered.length-1];}
    }
    
    function lockerRegistrations(address account) external view returns (uint256[] memory registered) { // get registered lockers per account
        return registrations[account];
    }
    
    function marketTermsCount() external view returns (uint256 count) { // get total market terms stamped by `manager`
        return marketTerms.length;
    }
    
    function providerAmounts(uint256 registration) external view returns (address token, uint256[] memory amount) { // get `token` and milestone `amount`s for `provider`
        return (lockers[registration].token, lockers[registration].amount);
    }
    
    function resolutionsCount() external view returns (uint256 count) { // get total resolutions passed by LXL `resolver`s
        return resolutions.length;
    }
   
    /****************
    MANAGER FUNCTIONS
    ****************/
    /**
     * @dev Throws if caller is not LXL `manager`.
     */
    modifier onlyManager {
        require(msg.sender == manager, "!manager");
        _;
    }
    
    /**
     * @notice Updates LXL with new market `terms`. 
     * @param terms New `terms` to add to LXL market. 
     */
    function addMarketTerms(string calldata terms) external nonReentrant onlyManager {
        marketTerms.push(terms);
        emit AddMarketTerms(marketTerms.length-1, terms);
    }
    
    /**
     * @notice Updates LXL with amended market `terms`. 
     * @param index Targeted location in `marketTerms` array.
     * @param terms Amended `terms` to add to LXL market. 
     */
    function amendMarketTerms(uint256 index, string calldata terms) external nonReentrant onlyManager {
        marketTerms[index] = terms;
        emit AmendMarketTerms(index, terms);
    }
    
    /**
     * @notice General ether payment function for `manager` of LXL contract. 
     * @param details Describes context for ether transfer.
     */
    function tributeToManager(string calldata details) external nonReentrant payable { 
        (bool success, ) = manager.call{value: msg.value}("");
        require(success, "!ethCall");
        emit TributeToManager(msg.sender, msg.value, details);
    }
    
    /**
     * @notice Updates LXL management settings.
     * @param _manager Account that governs LXL contract settings.
     * @param _swiftResolverToken Token to mark participants in swift resolution.
     * @param _userRewardToken Token for LXL user rewards.
     * @param _wETH Standard contract reference to wrap ether. 
     * @param _resolutionRate Rate to determine resolution fee for locker (e.g., 20 = 5% of remainder).
     * @param _swiftResolverTokenBalance Token balance required to perform swift resolution. 
     * @param _userReward Reward amount granted to LXL users in `userRewardToken`.
     * @param _lockerTerms General terms wrapping LXL.  
     */
    function updateLockerSettings(
        address _manager, 
        address _swiftResolverToken, 
        address _userRewardToken,
        address _wETH, 
        uint256 _resolutionRate, 
        uint256 _swiftResolverTokenBalance,
        uint256 _userReward,
        string calldata _lockerTerms
    ) external nonReentrant onlyManager { 
        require(_resolutionRate > 0, "_resolutionRate < 1");
        
        manager = _manager;
        swiftResolverToken = _swiftResolverToken;
        userRewardToken = _userRewardToken;
        wETH = _wETH;
        resolutionRate = _resolutionRate;
        swiftResolverTokenBalance = _swiftResolverTokenBalance;
        userReward = _userReward;
        lockerTerms = _lockerTerms;
	    
	    emit UpdateLockerSettings(_manager, _swiftResolverToken, _userRewardToken, _wETH, _resolutionRate, _swiftResolverTokenBalance, _userReward, _lockerTerms);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_swiftResolverToken","type":"address"},{"internalType":"address","name":"_userRewardToken","type":"address"},{"internalType":"address","name":"_wETH","type":"address"},{"internalType":"uint256","name":"_resolutionRate","type":"uint256"},{"internalType":"uint256","name":"_swiftResolverTokenBalance","type":"uint256"},{"internalType":"uint256","name":"_userReward","type":"uint256"},{"internalType":"string","name":"_lockerTerms","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"terms","type":"string"}],"name":"AddMarketTerms","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"terms","type":"string"}],"name":"AmendMarketTerms","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"clientOracle","type":"address"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"}],"name":"AssignClientOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedResolver","type":"address"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"ClientProposeResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"}],"name":"ConfirmLocker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"client","type":"address"},{"indexed":false,"internalType":"address","name":"clientOracle","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":true,"internalType":"address","name":"resolver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"termination","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"},{"indexed":false,"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"DepositLocker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedResolver","type":"address"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"ProviderProposeResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"client","type":"address"},{"indexed":false,"internalType":"address","name":"clientOracle","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":true,"internalType":"address","name":"resolver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"termination","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"},{"indexed":false,"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"RegisterLocker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"milestone","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"}],"name":"Release","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"client","type":"address"},{"indexed":true,"internalType":"address","name":"counterparty","type":"address"},{"indexed":true,"internalType":"address","name":"resolver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sum","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"},{"indexed":false,"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"RequestLockerResolution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"resolver","type":"address"},{"indexed":false,"internalType":"uint256","name":"clientAward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"providerAward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resolutionFee","type":"uint256"},{"indexed":false,"internalType":"string","name":"resolution","type":"string"}],"name":"Resolve","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"details","type":"string"}],"name":"TributeToManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"},{"indexed":false,"internalType":"address","name":"swiftResolverToken","type":"address"},{"indexed":false,"internalType":"address","name":"userRewardToken","type":"address"},{"indexed":false,"internalType":"address","name":"wETH","type":"address"},{"indexed":false,"internalType":"uint256","name":"resolutionRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swiftResolverTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userReward","type":"uint256"},{"indexed":false,"internalType":"string","name":"lockerTerms","type":"string"}],"name":"UpdateLockerSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"swiftResolver","type":"address"},{"indexed":false,"internalType":"string","name":"details","type":"string"},{"indexed":false,"internalType":"bool","name":"registered","type":"bool"}],"name":"UpdateSwiftResolverStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"registration","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"string","name":"terms","type":"string"}],"name":"addMarketTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"adrs","outputs":[{"internalType":"address","name":"proposedResolver","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"uint8","name":"clientProposedResolver","type":"uint8"},{"internalType":"uint8","name":"providerProposedResolver","type":"uint8"},{"internalType":"uint256","name":"clientAward","type":"uint256"},{"internalType":"uint256","name":"providerAward","type":"uint256"},{"internalType":"uint256","name":"resolutionRate","type":"uint256"},{"internalType":"string","name":"resolution","type":"string"},{"internalType":"bool","name":"swiftResolver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"terms","type":"string"}],"name":"amendMarketTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"clientOracle","type":"address"},{"internalType":"uint256","name":"registration","type":"uint256"}],"name":"assignClientOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proposedResolver","type":"address"},{"internalType":"uint256","name":"registration","type":"uint256"},{"internalType":"string","name":"details","type":"string"}],"name":"clientProposeResolver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"registration","type":"uint256"}],"name":"confirmLocker","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"clientOracle","type":"address"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"uint256","name":"termination","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"depositLocker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"clientOracle","type":"address"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"sum","type":"uint256"},{"internalType":"uint256","name":"termination","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"depositLockerSingleMilestone","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"latestLockerRegistration","outputs":[{"internalType":"uint256","name":"latest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"registration","type":"uint256"},{"internalType":"string","name":"details","type":"string"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockerRegistrations","outputs":[{"internalType":"uint256[]","name":"registered","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockerTerms","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockers","outputs":[{"internalType":"address","name":"client","type":"address"},{"internalType":"address","name":"clientOracle","type":"address"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"confirmed","type":"uint8"},{"internalType":"uint8","name":"locked","type":"uint8"},{"internalType":"uint256","name":"currentMilestone","type":"uint256"},{"internalType":"uint256","name":"milestones","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"},{"internalType":"uint256","name":"sum","type":"uint256"},{"internalType":"uint256","name":"termination","type":"uint256"},{"internalType":"string","name":"details","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"marketTerms","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketTermsCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"registration","type":"uint256"}],"name":"providerAmounts","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proposedResolver","type":"address"},{"internalType":"uint256","name":"registration","type":"uint256"},{"internalType":"string","name":"details","type":"string"}],"name":"providerProposeResolver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"client","type":"address"},{"internalType":"address","name":"clientOracle","type":"address"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"uint256","name":"termination","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"registerLocker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"registration","type":"uint256"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"counterparty","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"sum","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"bool","name":"swiftResolver","type":"bool"}],"name":"requestLockerResolution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resolutionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resolutions","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resolutionsCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"clientAward","type":"uint256"},{"internalType":"uint256","name":"providerAward","type":"uint256"},{"internalType":"uint256","name":"registration","type":"uint256"},{"internalType":"string","name":"resolution","type":"string"}],"name":"resolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swiftResolverRegistrations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swiftResolverToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swiftResolverTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"details","type":"string"}],"name":"tributeToManager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_swiftResolverToken","type":"address"},{"internalType":"address","name":"_userRewardToken","type":"address"},{"internalType":"address","name":"_wETH","type":"address"},{"internalType":"uint256","name":"_resolutionRate","type":"uint256"},{"internalType":"uint256","name":"_swiftResolverTokenBalance","type":"uint256"},{"internalType":"uint256","name":"_userReward","type":"uint256"},{"internalType":"string","name":"_lockerTerms","type":"string"}],"name":"updateLockerSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"details","type":"string"},{"internalType":"bool","name":"registered","type":"bool"}],"name":"updateSwiftResolverStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userRewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"registration","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162005a1d38038062005a1d83398181016040526101008110156200003857600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a0180519651989a9799959894979396929591949391820192846401000000008211156200008857600080fd5b9083019060208201858111156200009e57600080fd5b8251640100000000811182820188101715620000b957600080fd5b82525081516020918201929091019080838360005b83811015620000e8578181015183820152602001620000ce565b50505050905090810190601f168015620001165780820380516001836020036101000a031916815260200191505b5060405250506001600055508362000175576040805162461bcd60e51b815260206004820152601360248201527f5f7265736f6c7574696f6e52617465203c203100000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b03808b166001600160a01b031992831617909255600280548a84169083161790556003805489841690831617905560048054928816929091169190911790556006849055600783905560088290558051620001e3906009906020840190620001f2565b5050505050505050506200029e565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200022a576000855562000275565b82601f106200024557805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027557825182559160200191906001019062000258565b506200028392915062000287565b5090565b5b8082111562000283576000815560010162000288565b61576f80620002ae6000396000f3fe60806040526004361061020f5760003560e01c8063809aab9211610118578063ccdf9763116100a0578063e98525a31161006f578063e98525a314610e40578063f242862114610f63578063f643509c14610f78578063fae9878814610ffa578063fb7b79e9146110885761020f565b8063ccdf976314610d5b578063d7a57ce514610d70578063e5a6c28f14610df2578063e5d0cfdf14610e075761020f565b80638f1fefa2116100e75780638f1fefa214610bdf578063946f2e4814610c77578063a4b7f5ce14610c8c578063b3e9339614610cb6578063ccd96eb614610d465761020f565b8063809aab9214610989578063828fe36d14610aa25780638d9dcee014610ab75780638f111ab814610b3a5761020f565b806347dfb09a1161019b578063692e8ae41161016a578063692e8ae4146107b15780636a3cb3001461082e57806370d92eb51461084b57806371190e4b1461087e5780637c20f221146108f95761020f565b806347dfb09a1461066f578063481c6a751461068457806359466d9a146106b55780636066b9fe146107435761020f565b80633757cd87116101e25780633757cd87146104e057806337bdc99b1461052757806339f750411461055157806340a3f6711461064557806343e5f7341461065a5761020f565b80630c2ecfb6146102145780632cd1a18a146102b35780632e1a7d4d1461036b5780632eb9c18914610395575b600080fd5b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b503561109d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610278578181015183820152602001610260565b50505050905090810190601f1680156102a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bf57600080fd5b5061036960048036036101008110156102d757600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c081013591810190610100810160e0820135600160201b81111561032b57600080fd5b82018360208201111561033d57600080fd5b803590602001918460018302840111600160201b8311171561035e57600080fd5b509092509050611146565b005b34801561037757600080fd5b506103696004803603602081101561038e57600080fd5b5035611351565b3480156103a157600080fd5b506104ce60048036036101208110156103b957600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013581169260808101359091169181019060c0810160a0820135600160201b81111561040457600080fd5b82018360208201111561041657600080fd5b803590602001918460208302840111600160201b8311171561043757600080fd5b91939092823592604081019060200135600160201b81111561045857600080fd5b82018360208201111561046a57600080fd5b803590602001918460018302840111600160201b8311171561048b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050505035151590506115a6565b60408051918252519081900360200190f35b3480156104ec57600080fd5b506105136004803603602081101561050357600080fd5b50356001600160a01b0316611cfc565b604080519115158252519081900360200190f35b34801561053357600080fd5b506103696004803603602081101561054a57600080fd5b5035611d11565b34801561055d57600080fd5b5061057b6004803603602081101561057457600080fd5b5035611f77565b604051808a6001600160a01b03168152602001896001600160a01b031681526020018860ff1681526020018760ff168152602001868152602001858152602001848152602001806020018315158152602001828103825284818151815260200191508051906020019080838360005b838110156106025781810151838201526020016105ea565b50505050905090810190601f16801561062f5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561065157600080fd5b506104ce612064565b34801561066657600080fd5b506104ce61206a565b34801561067b57600080fd5b5061023e612070565b34801561069057600080fd5b506106996120cb565b604080516001600160a01b039092168252519081900360200190f35b3480156106c157600080fd5b50610369600480360360808110156106d857600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561070557600080fd5b82018360208201111561071757600080fd5b803590602001918460018302840111600160201b8311171561073857600080fd5b5090925090506120da565b6103696004803603602081101561075957600080fd5b810190602081018135600160201b81111561077357600080fd5b82018360208201111561078557600080fd5b803590602001918460018302840111600160201b831117156107a657600080fd5b50909250905061256a565b3480156107bd57600080fd5b50610369600480360360408110156107d457600080fd5b810190602081018135600160201b8111156107ee57600080fd5b82018360208201111561080057600080fd5b803590602001918460018302840111600160201b8311171561082157600080fd5b91935091503515156126c5565b6103696004803603602081101561084457600080fd5b503561286e565b34801561085757600080fd5b506104ce6004803603602081101561086e57600080fd5b50356001600160a01b0316612b4e565b34801561088a57600080fd5b50610369600480360360208110156108a157600080fd5b810190602081018135600160201b8111156108bb57600080fd5b8201836020820111156108cd57600080fd5b803590602001918460018302840111600160201b831117156108ee57600080fd5b509092509050612be8565b34801561090557600080fd5b506103696004803603606081101561091c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561094b57600080fd5b82018360208201111561095d57600080fd5b803590602001918460018302840111600160201b8311171561097e57600080fd5b509092509050612d34565b34801561099557600080fd5b506109b3600480360360208110156109ac57600080fd5b5035612fd1565b604051808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b031681526020018960ff1681526020018860ff16815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a5c578181015183820152602001610a44565b50505050905090810190601f168015610a895780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b348015610aae57600080fd5b506106996130d7565b348015610ac357600080fd5b50610aea60048036036020811015610ada57600080fd5b50356001600160a01b03166130e6565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b26578181015183820152602001610b0e565b505050509050019250505060405180910390f35b6104ce6004803603610100811015610b5157600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a0820135919081019060e0810160c0820135600160201b811115610b9f57600080fd5b820183602082011115610bb157600080fd5b803590602001918460018302840111600160201b83111715610bd257600080fd5b9193509150351515613152565b6104ce600480360360c0811015610bf557600080fd5b6001600160a01b03823581169260208101358216926040820135909216916060820135919081019060a081016080820135600160201b811115610c3757600080fd5b820183602082011115610c4957600080fd5b803590602001918460018302840111600160201b83111715610c6a57600080fd5b9193509150351515613994565b348015610c8357600080fd5b506104ce614149565b348015610c9857600080fd5b5061023e60048036036020811015610caf57600080fd5b503561414f565b348015610cc257600080fd5b5061036960048036036060811015610cd957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610d0857600080fd5b820183602082011115610d1a57600080fd5b803590602001918460018302840111600160201b83111715610d3b57600080fd5b50909250905061415f565b348015610d5257600080fd5b506104ce6143ff565b348015610d6757600080fd5b506104ce614405565b348015610d7c57600080fd5b5061036960048036036040811015610d9357600080fd5b81359190810190604081016020820135600160201b811115610db457600080fd5b820183602082011115610dc657600080fd5b803590602001918460018302840111600160201b83111715610de757600080fd5b50909250905061440b565b348015610dfe57600080fd5b506104ce614539565b348015610e1357600080fd5b5061036960048036036040811015610e2a57600080fd5b506001600160a01b03813516906020013561453f565b6104ce6004803603610100811015610e5757600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b811115610e9957600080fd5b820183602082011115610eab57600080fd5b803590602001918460208302840111600160201b83111715610ecc57600080fd5b91939092823592604081019060200135600160201b811115610eed57600080fd5b820183602082011115610eff57600080fd5b803590602001918460018302840111600160201b83111715610f2057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050614740565b348015610f6f57600080fd5b50610699614fe3565b348015610f8457600080fd5b5061036960048036036040811015610f9b57600080fd5b81359190810190604081016020820135600160201b811115610fbc57600080fd5b820183602082011115610fce57600080fd5b803590602001918460018302840111600160201b83111715610fef57600080fd5b509092509050614ff2565b34801561100657600080fd5b506110246004803603602081101561101d57600080fd5b50356151ca565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561107357818101518382015260200161105b565b50505050905001935050505060405180910390f35b34801561109457600080fd5b50610699615249565b600a81815481106110ad57600080fd5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529350909183018282801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b505050505081565b6002600054141561118c576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146111db576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b60008511611226576040805162461bcd60e51b81526020600482015260136024820152725f7265736f6c7574696f6e52617465203c203160681b604482015290519081900360640190fd5b600180546001600160a01b03808c166001600160a01b031992831617909255600280548b8416908316179055600380548a8416908316179055600480549289169290911691909117905560068590556007849055600883905561128b6009838361551d565b50886001600160a01b03167f0a3c86164413049d288c20c88f3a3dc9ea7d86dbde935784b7f3cd61315ee0fb898989898989898960405180896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a25050600160005550505050505050565b60026000541415611397576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f602052604090208054600782015460088301546001600160a01b0390921691338314806113dc575060018401546001600160a01b031633145b61141e576040805162461bcd60e51b815260206004820152600e60248201526d21636c69656e742f6f7261636c6560901b604482015290519081900360640190fd5b6003840154600160a01b900460ff1660011461146e576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b6003840154600160a81b900460ff16156114b8576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b8082106114f7576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b4284600901541061153d576040805162461bcd60e51b815260206004820152600b60248201526a085d195c9b5a5b985d195960aa1b604482015290519081900360640190fd5b6115608361154b8385615258565b60038701546001600160a01b0316919061526d565b600784018190556040805186815290517f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d9181900360200190a150506001600055505050565b6000600260005414156115ee576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001600160a01b038b8116908916148015906116215750876001600160a01b03168a6001600160a01b031614155b801561163f5750876001600160a01b0316896001600160a01b031614155b61167a5760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b6000805b868110156116b5576116ab88888381811061169557fe5b90506020020135836152c490919063ffffffff16565b915060010161167e565b5060056000815480929190600101919050555060006005549050600c60008e6001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050190805190602001906118c09291906155a9565b506101008201518160060160006101000a81548160ff021916908315150217905550905050604051806101a001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018a6001600160a01b03168152602001600060ff168152602001600060ff168152602001898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001600181526020018989905081526020016000815260200183815260200187815260200186815250600f600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548160ff021916908360ff16021790555060a08201518160030160156101000a81548160ff021916908360ff16021790555060c0820151816004019080519060200190611ad4929190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051611b2791600a8401916020909101906155a9565b5050600854159050611bb7576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611b8a57600080fd5b505af1158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50505b896001600160a01b03168b6001600160a01b03168e6001600160a01b03167fd07e496cfa7540704deca21058ba098d3ec9dd6e9f3f1e661cd773d0568cc4c18f8d8d8d888a8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200187815260200186815260200185815260200180602001841515815260200183810383528a8a828181526020019250602002808284376000838201819052601f909101601f191690920185810384528751815287516020918201939189019250908190849084905b83811015611ca4578181015183820152602001611c8c565b50505050905090810190601f168015611cd15780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a460016000559c9b505050505050505050505050565b600d6020526000908152604090205460ff1681565b60026000541415611d57576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f60205260408120600581015460048201805492936000199092019283908110611d8857fe5b60009182526020909120015460078401546008850154855492935090916001600160a01b0316331480611dc7575060018501546001600160a01b031633145b611e09576040805162461bcd60e51b815260206004820152600e60248201526d21636c69656e742f6f7261636c6560901b604482015290519081900360640190fd5b6003850154600160a01b900460ff16600114611e59576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b6003850154600160a81b900460ff1615611ea3576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b808210611ee2576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b60028501546003860154611f03916001600160a01b0391821691168561526d565b611f0d82846152c4565b60078601819055811115611f275760058501805460010190555b604080516001860181526020810185905280820188905290517fc01cba126feb82d878b875f887d6f577aafb4f46268f068160aeecfd866f25409181900360600190a15050600160005550505050565b600e602090815260009182526040918290208054600180830154600280850154600386015460048701546005880180548b516101009882161598909802600019011694909404601f81018a90048a0287018a01909a528986526001600160a01b039687169996851698600160a01b860460ff90811699600160a81b90970416979396929591949193908301828280156120515780601f1061202657610100808354040283529160200191612051565b820191906000526020600020905b81548152906001019060200180831161203457829003601f168201915b5050506006909301549192505060ff1689565b600a5490565b600b5490565b6009805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561113e5780601f106111135761010080835404028352916020019161113e565b6001546001600160a01b031681565b60026000541415612120576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600e60209081526040808320600f9092528220600381015460078201546008830154939492936001600160a01b03909216929091906121698284615258565b905060006121848760040154836152dd90919063ffffffff16565b6003870154909150600160a81b900460ff166001146121d4576040805162461bcd60e51b8152602060048201526007602482015266085b1bd8dad95960ca1b604482015290519081900360640190fd5b828410612213576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b61221d8282615258565b6122278d8d6152c4565b14612279576040805162461bcd60e51b815260206004820152601960248201527f61776172647320213d2072656d61696e646572202d2066656500000000000000604482015290519081900360640190fd5b600687015460ff16156123d55785546001600160a01b031633148015906122ad575060028601546001600160a01b03163314155b6122fe576040805162461bcd60e51b815260206004820152601f60248201527f636c69656e742f70726f7669646572203d2073776966745265736f6c76657200604482015290519081900360640190fd5b600754600254604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561234c57600080fd5b505afa158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b5051108015906123955750336000908152600d602052604090205460ff165b6123d05760405162461bcd60e51b81526004018080602001828103825260258152602001806156c46025913960400191505060405180910390fd5b612422565b60018701546001600160a01b03163314612422576040805162461bcd60e51b815260206004820152600960248201526810b932b9b7b63b32b960b91b604482015290519081900360640190fd5b6124366001600160a01b038616338361526d565b855461244f906001600160a01b0387811691168e61526d565b600286015461246b906001600160a01b0387811691168d61526d565b600287018c9055600387018b9055612487600588018a8a61551d565b5060078601839055600b80546001810182556000919091526124cc907f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018a8a61551d565b50336001600160a01b03167f10f832c6bff607aae4ae0b9cf0bee04d9f0f62d6ce77c7f2bab3975808f4e2ae8d8d8d858e8e60405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a25050600160005550505050505050505050565b600260005414156125b0576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b600260009081556001546040516001600160a01b039091169034908381818185875af1925050503d8060008114612603576040519150601f19603f3d011682016040523d82523d6000602084013e612608565b606091505b5050905080612649576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b336001600160a01b03167f7edb331fbf0c1c28d0139c38e373c400efe67d4b3f183135c560947209fc063934858560405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550565b6002600054141561270b576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b600260008190556007549054604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561275f57600080fd5b505afa158015612773573d6000803e3d6000fd5b505050506040513d602081101561278957600080fd5b505110156127de576040805162461bcd60e51b815260206004820152601a60248201527f2173776966745265736f6c766572546f6b656e42616c616e6365000000000000604482015290519081900360640190fd5b336000818152600d6020908152604091829020805460ff19168515159081179091558251918201528181529081018490527f0e2d4a938cd3cb4d41a0920d1232d2718cf05c29405790efc42bb4f5e2f5bb95908590859085908060608101858580828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550565b600260005414156128b4576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f6020526040902080546001600160a01b0316331461290f576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b6003810154600160a01b900460ff161561295c576040805162461bcd60e51b815260206004820152600960248201526818dbdb999a5c9b595960ba1b604482015290519081900360640190fd5b3415612ada5760045460038201546001600160a01b039182169116811480156129885750816008015434145b6129c7576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d8060008114612a12576040519150601f19603f3d011682016040523d82523d6000602084013e612a17565b606091505b5050905080612a58576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b505050506040513d6020811015612ad057600080fd5b50612afd92505050565b60088101546003820154612afd916001600160a01b0390911690339030906152ff565b60038101805460ff60a01b1916600160a01b1790556040805183815290517f2d1a46e21cdbb8eabd35598731137ca710b60713819116238e0fde3f59e511cb9181900360200190a150506001600055565b6001600160a01b0381166000908152600c602090815260408083208054825181850281018501909352808352606093830182828015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b50505050509050805160001415612bc7576000915050612be3565b80600182510381518110612bd757fe5b60200260200101519150505b919050565b60026000541415612c2e576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612c7d576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b600a8054600181018255600091909152612cba907fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801838361551d565b507fcb08c4eb330ef67578d7cb86131f93d0de8d3dbd965167f9a31d3beedc9739216001600a8054905003838360405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a150506001600055565b60026000541415612d7a576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000818155848152600e60209081526040808320600f909252909120918201549091906001600160a01b03163314612de7576040805162461bcd60e51b815260206004820152600960248201526810b83937bb34b232b960b91b604482015290519081900360640190fd5b80546001600160a01b03878116911614801590612e14575060018101546001600160a01b03878116911614155b8015612e295750336001600160a01b03871614155b612e645760405162461bcd60e51b815260040180806020018281038252602f815260200180615675602f913960400191505060405180910390fd5b6001820154600160a81b900460ff1615612eaf576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b8060080154816007015410612ef6576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b81546001600160a01b0387811691161415612f29576001820180546001600160a01b0319166001600160a01b0388161790555b81546001600160a01b0387166001600160a01b03199091168117835560018301805461ffff60a01b1916600160a81b17905560408051878152602081018281529181018690527fcfc3d17d2869bce3d4eeb28ed9eeeb1749f8f4b31f7ba9ead1b594577471ef18918891889188919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550505050565b600f602090815260009182526040918290208054600180830154600280850154600386015460058701546006880154600789015460088a015460098b0154600a8c0180548f516101009c8216159c909c02600019011698909804601f81018e90048e028b018e01909e528d8a526001600160a01b039a8b169d988b169c968b169b9a86169a600160a01b870460ff9081169b600160a81b90980416999598949793969295919490939091908301828280156130cd5780601f106130a2576101008083540402835291602001916130cd565b820191906000526020600020905b8154815290600101906020018083116130b057829003601f168201915b505050505090508c565b6002546001600160a01b031681565b6001600160a01b0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561314657602002820191906000526020600020905b815481526020019060010190808311613132575b50505050509050919050565b60006002600054141561319a576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b038916148015906131ca5750876001600160a01b03168a6001600160a01b031614155b80156131e85750876001600160a01b0316896001600160a01b031614155b6132235760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b3415613399576004546001600160a01b039081169088168114801561324757508634145b613286576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d80600081146132d1576040519150601f19603f3d011682016040523d82523d6000602084013e6132d6565b606091505b5050905080613317576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561336557600080fd5b505af1158015613379573d6000803e3d6000fd5b505050506040513d602081101561338f57600080fd5b506133ae92505050565b6133ae6001600160a01b0388163330896152ff565b6040805160018082528183019092526060916020808301908036833701905050905086816000815181106133de57fe5b60200260200101818152505060056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050190805190602001906135f49291906155a9565b506101008201518160060160006101000a81548160ff021916908315150217905550905050604051806101a00160405280336001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018a6001600160a01b03168152602001600160ff168152602001600060ff16815260200183815260200160018152602001600181526020016000815260200189815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050838152600f6020908152604091829020845181546001600160a01b03199081166001600160a01b039283161783558684015160018401805483169184169190911790559386015160028301805486169183169190911790556060860151600383018054608089015160a08a015191909716929093169190911760ff60a01b1916600160a01b60ff968716021760ff60a81b1916600160a81b95909216949094021790925560c084015180519293506137959260048501929190910190615625565b5060e08201516005820155610100820151600682015561012082015160078201556101408201516008820155610160820151600982015561018082015180516137e891600a8401916020909101906155a9565b5050600854159050613878576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561384b57600080fd5b505af115801561385f573d6000803e3d6000fd5b505050506040513d602081101561387557600080fd5b50505b896001600160a01b03168b6001600160a01b0316336001600160a01b03167ff3a981fb57e5fcdb20463a8ad40ba5c1bc7e2cb58b3bfa72f9f00d2481e9611a8f8d87878f8f8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200188815260200187815260200186815260200180602001841515815260200183810383528a818151815260200191508051906020019060200280838360005b8381101561393c578181015183820152602001613924565b505050509050018381038252868682818152602001925080828437600083820152604051601f909101601f19169092018290039d50909b505050505050505050505050a460016000559b9a5050505050505050505050565b6000600260005414156139dc576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b03881614801590613a0c5750866001600160a01b0316886001600160a01b031614155b613a5d576040805162461bcd60e51b815260206004820152601e60248201527f636c69656e742f636f756e7465727061727479203d207265736f6c7665720000604482015290519081900360640190fd5b3415613bd3576004546001600160a01b0390811690871681148015613a8157508534145b613ac0576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d8060008114613b0b576040519150601f19603f3d011682016040523d82523d6000602084013e613b10565b606091505b5050905080613b51576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015613b9f57600080fd5b505af1158015613bb3573d6000803e3d6000fd5b505050506040513d6020811015613bc957600080fd5b50613be892505050565b613be86001600160a01b0387163330886152ff565b604080516001808252818301909252606091602080830190803683370190505090508581600081518110613c1857fe5b60200260200101818152505060056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008b6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018a6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e0820151816005019080519060200190613e2e9291906155a9565b5061010091820151600691909101805460ff1916911515919091179055604080516101a081018252338152600060208083018290526001600160a01b038f8116848601528d16606084015260016080840181905260a084015260c0830187905260e08301829052938201819052610120820181905261014082018b90526101608201528151601f8901849004840281018401909252878252916101808301919089908990819084018382808284376000920182905250939094525050838152600f6020908152604091829020845181546001600160a01b03199081166001600160a01b039283161783558684015160018401805483169184169190911790559386015160028301805486169183169190911790556060860151600383018054608089015160a08a015191909716929093169190911760ff60a01b1916600160a01b60ff968716021760ff60a81b1916600160a81b95909216949094021790925560c08401518051929350613fab9260048501929190910190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051613ffe91600a8401916020909101906155a9565b505060085415905061408e576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561406157600080fd5b505af1158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b50505b886001600160a01b03168a6001600160a01b0316336001600160a01b03167fe9a72a451e334a0643d3d8a0c879e72fa193f14c8ed86341329f7042db766b808b858c8c8c8c60405180876001600160a01b031681526020018681526020018581526020018060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a460016000559998505050505050505050565b60065481565b600b81815481106110ad57600080fd5b600260005414156141a5576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600e60209081526040808320600f90925290912080546001600160a01b0316331461420b576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b336001600160a01b03871614801590614234575060018101546001600160a01b03878116911614155b8015614250575060028101546001600160a01b03878116911614155b61428b5760405162461bcd60e51b815260040180806020018281038252602f815260200180615675602f913960400191505060405180910390fd5b6001820154600160a01b900460ff16156142d6576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b806008015481600701541061431d576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b81546001600160a01b0387811691161415614350576001820180546001600160a01b0319166001600160a01b0388161790555b81546001600160a01b0319166001600160a01b0387169081178355600183018054600160a01b60ff60a01b199091161760ff60a81b1916905560408051878152602081018281529181018690527fb0ac25ee63110f1c5f39ac12c79eea364c7e06ae7410c10f94b3e008427b2be4918891889188919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550505050565b60055481565b60075481565b60026000541415614451576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146144a0576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b8181600a85815481106144af57fe5b9060005260206000200191906144c692919061551d565b507f63eeabb7a8f9739511c604ee8c971ebbc179c3eafeadc687574c1d5afd8699f783838360405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15050600160005550565b60085481565b60026000541415614585576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600e60209081526040808320600f90925290912080546001600160a01b031633146145eb576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b60018201546001600160a01b0385811691161415614650576040805162461bcd60e51b815260206004820152601760248201527f636c69656e744f7261636c65203d207265736f6c766572000000000000000000604482015290519081900360640190fd5b6003810154600160a81b900460ff161561469a576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b80600801548160070154106146e1576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b6001810180546001600160a01b0386166001600160a01b031990911681179091556040805185815290517f234175b2da2ad70b3da936d38ee6454faa86ff3dd8e10d948e145e47b35d75319181900360200190a2505060016000555050565b600060026000541415614788576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b038916148015906147b85750876001600160a01b03168a6001600160a01b031614155b80156147d65750876001600160a01b0316896001600160a01b031614155b6148115760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b6000805b868110156148365761482c88888381811061169557fe5b9150600101614815565b5034156149ad576004546001600160a01b039081169089168114801561485b57508134145b61489a576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d80600081146148e5576040519150601f19603f3d011682016040523d82523d6000602084013e6148ea565b606091505b505090508061492b576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561497957600080fd5b505af115801561498d573d6000803e3d6000fd5b505050506040513d60208110156149a357600080fd5b506149c292505050565b6149c26001600160a01b0389163330846152ff565b60056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e0820151816005019080519060200190614bcc9291906155a9565b5061010091909101516006909101805460ff1916911515919091179055604080516101a0810182523381526001600160a01b038e81166020808401919091528e821683850152908c16606083015260016080830152600060a083015282518a820280820183019094528a8152919260c0840192918c918c91829190850190849080828437600081840152601f19601f820116905080830192505050505050508152602001600181526020018989905081526020016000815260200183815260200187815260200186815250600f600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548160ff021916908360ff16021790555060a08201518160030160156101000a81548160ff021916908360ff16021790555060c0820151816004019080519060200190614dbc929190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051614e0f91600a8401916020909101906155a9565b5050600854159050614e9f576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015614e7257600080fd5b505af1158015614e86573d6000803e3d6000fd5b505050506040513d6020811015614e9c57600080fd5b50505b896001600160a01b03168b6001600160a01b0316336001600160a01b03167ff3a981fb57e5fcdb20463a8ad40ba5c1bc7e2cb58b3bfa72f9f00d2481e9611a8f8d8d8d888a8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200187815260200186815260200185815260200180602001841515815260200183810383528a8a828181526020019250602002808284376000838201819052601f909101601f191690920185810384528751815287516020918201939189019250908190849084905b83811015614f8c578181015183820152602001614f74565b50505050905090810190601f168015614fb95780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a460016000559b9a5050505050505050505050565b6004546001600160a01b031681565b60026000541415615038576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600f6020526040902080546001600160a01b031633148061506f575060028101546001600160a01b031633145b6150a9576040805162461bcd60e51b815260206004820152600660248201526521706172747960d01b604482015290519081900360640190fd5b6003810154600160a01b900460ff166001146150f9576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b8060080154816007015410615140576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b60038101805460ff60a81b1916600160a81b179055604080518581526020810182815291810184905233917ffd726b3c66354a0801cf61e13f1282806917ff4f06bf73781d47043677f64a539187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a2505060016000555050565b6000818152600f602090815260408083206003810154600490910180548351818602810186019094528084526060946001600160a01b0390931693919283919083018282801561523957602002820191906000526020600020905b815481526020019060010190808311615225575b5050505050905091509150915091565b6003546001600160a01b031681565b60008282111561526757600080fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526152bf90849061535f565b505050565b6000828201838110156152d657600080fd5b9392505050565b60008082116152eb57600080fd5b60008284816152f657fe5b04949350505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261535990859061535f565b50505050565b615371826001600160a01b0316615517565b6153c2576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106154005780518252601f1990920191602091820191016153e1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615462576040519150601f19603f3d011682016040523d82523d6000602084013e615467565b606091505b5091509150816154be576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115615359578080602001905160208110156154da57600080fd5b50516153595760405162461bcd60e51b815260040180806020018281038252602a8152602001806156e9602a913960400191505060405180910390fd5b3b151590565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155535760008555615599565b82601f1061556c5782800160ff19823516178555615599565b82800160010185558215615599579182015b8281111561559957823582559160200191906001019061557e565b506155a592915061565f565b5090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155df5760008555615599565b82601f106155f857805160ff1916838001178555615599565b82800160010185558215615599579182015b8281111561559957825182559160200191906001019061560a565b828054828255906000526020600020908101928215615599579160200282018281111561559957825182559160200191906001019061560a565b5b808211156155a5576000815560010161566056fe636c69656e742f636c69656e744f7261636c652f70726f7669646572203d2070726f706f7365645265736f6c7665725265656e7472616e637947756172643a207265656e7472616e742063616c6c002173776966745265736f6c766572546f6b656e42616c616e63652f726567697374657265645361666545524332303a206572633230206f7065726174696f6e20646964206e6f742073756363656564636c69656e742f636c69656e744f7261636c652f70726f7669646572203d207265736f6c766572a2646970667358221220d1435383a3fd57fa980e762d36c6b2766d0185dace2deb40aadf0e4acb71fc0864736f6c634300070500330000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a2000000000000000000000000001b92e2c0d06325089c6fd53c98a214f5c75b2ac00000000000000000000000063125c0d5cd9071de9a1ac84c400982f41c697ae000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001b42455441202d20557365204c584c206174206f776e207269736b210000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c8063809aab9211610118578063ccdf9763116100a0578063e98525a31161006f578063e98525a314610e40578063f242862114610f63578063f643509c14610f78578063fae9878814610ffa578063fb7b79e9146110885761020f565b8063ccdf976314610d5b578063d7a57ce514610d70578063e5a6c28f14610df2578063e5d0cfdf14610e075761020f565b80638f1fefa2116100e75780638f1fefa214610bdf578063946f2e4814610c77578063a4b7f5ce14610c8c578063b3e9339614610cb6578063ccd96eb614610d465761020f565b8063809aab9214610989578063828fe36d14610aa25780638d9dcee014610ab75780638f111ab814610b3a5761020f565b806347dfb09a1161019b578063692e8ae41161016a578063692e8ae4146107b15780636a3cb3001461082e57806370d92eb51461084b57806371190e4b1461087e5780637c20f221146108f95761020f565b806347dfb09a1461066f578063481c6a751461068457806359466d9a146106b55780636066b9fe146107435761020f565b80633757cd87116101e25780633757cd87146104e057806337bdc99b1461052757806339f750411461055157806340a3f6711461064557806343e5f7341461065a5761020f565b80630c2ecfb6146102145780632cd1a18a146102b35780632e1a7d4d1461036b5780632eb9c18914610395575b600080fd5b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b503561109d565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610278578181015183820152602001610260565b50505050905090810190601f1680156102a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bf57600080fd5b5061036960048036036101008110156102d757600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c081013591810190610100810160e0820135600160201b81111561032b57600080fd5b82018360208201111561033d57600080fd5b803590602001918460018302840111600160201b8311171561035e57600080fd5b509092509050611146565b005b34801561037757600080fd5b506103696004803603602081101561038e57600080fd5b5035611351565b3480156103a157600080fd5b506104ce60048036036101208110156103b957600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013581169260808101359091169181019060c0810160a0820135600160201b81111561040457600080fd5b82018360208201111561041657600080fd5b803590602001918460208302840111600160201b8311171561043757600080fd5b91939092823592604081019060200135600160201b81111561045857600080fd5b82018360208201111561046a57600080fd5b803590602001918460018302840111600160201b8311171561048b57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050505035151590506115a6565b60408051918252519081900360200190f35b3480156104ec57600080fd5b506105136004803603602081101561050357600080fd5b50356001600160a01b0316611cfc565b604080519115158252519081900360200190f35b34801561053357600080fd5b506103696004803603602081101561054a57600080fd5b5035611d11565b34801561055d57600080fd5b5061057b6004803603602081101561057457600080fd5b5035611f77565b604051808a6001600160a01b03168152602001896001600160a01b031681526020018860ff1681526020018760ff168152602001868152602001858152602001848152602001806020018315158152602001828103825284818151815260200191508051906020019080838360005b838110156106025781810151838201526020016105ea565b50505050905090810190601f16801561062f5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561065157600080fd5b506104ce612064565b34801561066657600080fd5b506104ce61206a565b34801561067b57600080fd5b5061023e612070565b34801561069057600080fd5b506106996120cb565b604080516001600160a01b039092168252519081900360200190f35b3480156106c157600080fd5b50610369600480360360808110156106d857600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561070557600080fd5b82018360208201111561071757600080fd5b803590602001918460018302840111600160201b8311171561073857600080fd5b5090925090506120da565b6103696004803603602081101561075957600080fd5b810190602081018135600160201b81111561077357600080fd5b82018360208201111561078557600080fd5b803590602001918460018302840111600160201b831117156107a657600080fd5b50909250905061256a565b3480156107bd57600080fd5b50610369600480360360408110156107d457600080fd5b810190602081018135600160201b8111156107ee57600080fd5b82018360208201111561080057600080fd5b803590602001918460018302840111600160201b8311171561082157600080fd5b91935091503515156126c5565b6103696004803603602081101561084457600080fd5b503561286e565b34801561085757600080fd5b506104ce6004803603602081101561086e57600080fd5b50356001600160a01b0316612b4e565b34801561088a57600080fd5b50610369600480360360208110156108a157600080fd5b810190602081018135600160201b8111156108bb57600080fd5b8201836020820111156108cd57600080fd5b803590602001918460018302840111600160201b831117156108ee57600080fd5b509092509050612be8565b34801561090557600080fd5b506103696004803603606081101561091c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561094b57600080fd5b82018360208201111561095d57600080fd5b803590602001918460018302840111600160201b8311171561097e57600080fd5b509092509050612d34565b34801561099557600080fd5b506109b3600480360360208110156109ac57600080fd5b5035612fd1565b604051808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b031681526020018960ff1681526020018860ff16815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a5c578181015183820152602001610a44565b50505050905090810190601f168015610a895780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b348015610aae57600080fd5b506106996130d7565b348015610ac357600080fd5b50610aea60048036036020811015610ada57600080fd5b50356001600160a01b03166130e6565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b26578181015183820152602001610b0e565b505050509050019250505060405180910390f35b6104ce6004803603610100811015610b5157600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a0820135919081019060e0810160c0820135600160201b811115610b9f57600080fd5b820183602082011115610bb157600080fd5b803590602001918460018302840111600160201b83111715610bd257600080fd5b9193509150351515613152565b6104ce600480360360c0811015610bf557600080fd5b6001600160a01b03823581169260208101358216926040820135909216916060820135919081019060a081016080820135600160201b811115610c3757600080fd5b820183602082011115610c4957600080fd5b803590602001918460018302840111600160201b83111715610c6a57600080fd5b9193509150351515613994565b348015610c8357600080fd5b506104ce614149565b348015610c9857600080fd5b5061023e60048036036020811015610caf57600080fd5b503561414f565b348015610cc257600080fd5b5061036960048036036060811015610cd957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610d0857600080fd5b820183602082011115610d1a57600080fd5b803590602001918460018302840111600160201b83111715610d3b57600080fd5b50909250905061415f565b348015610d5257600080fd5b506104ce6143ff565b348015610d6757600080fd5b506104ce614405565b348015610d7c57600080fd5b5061036960048036036040811015610d9357600080fd5b81359190810190604081016020820135600160201b811115610db457600080fd5b820183602082011115610dc657600080fd5b803590602001918460018302840111600160201b83111715610de757600080fd5b50909250905061440b565b348015610dfe57600080fd5b506104ce614539565b348015610e1357600080fd5b5061036960048036036040811015610e2a57600080fd5b506001600160a01b03813516906020013561453f565b6104ce6004803603610100811015610e5757600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b811115610e9957600080fd5b820183602082011115610eab57600080fd5b803590602001918460208302840111600160201b83111715610ecc57600080fd5b91939092823592604081019060200135600160201b811115610eed57600080fd5b820183602082011115610eff57600080fd5b803590602001918460018302840111600160201b83111715610f2057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050503515159050614740565b348015610f6f57600080fd5b50610699614fe3565b348015610f8457600080fd5b5061036960048036036040811015610f9b57600080fd5b81359190810190604081016020820135600160201b811115610fbc57600080fd5b820183602082011115610fce57600080fd5b803590602001918460018302840111600160201b83111715610fef57600080fd5b509092509050614ff2565b34801561100657600080fd5b506110246004803603602081101561101d57600080fd5b50356151ca565b60405180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561107357818101518382015260200161105b565b50505050905001935050505060405180910390f35b34801561109457600080fd5b50610699615249565b600a81815481106110ad57600080fd5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529350909183018282801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b505050505081565b6002600054141561118c576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146111db576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b60008511611226576040805162461bcd60e51b81526020600482015260136024820152725f7265736f6c7574696f6e52617465203c203160681b604482015290519081900360640190fd5b600180546001600160a01b03808c166001600160a01b031992831617909255600280548b8416908316179055600380548a8416908316179055600480549289169290911691909117905560068590556007849055600883905561128b6009838361551d565b50886001600160a01b03167f0a3c86164413049d288c20c88f3a3dc9ea7d86dbde935784b7f3cd61315ee0fb898989898989898960405180896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a25050600160005550505050505050565b60026000541415611397576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f602052604090208054600782015460088301546001600160a01b0390921691338314806113dc575060018401546001600160a01b031633145b61141e576040805162461bcd60e51b815260206004820152600e60248201526d21636c69656e742f6f7261636c6560901b604482015290519081900360640190fd5b6003840154600160a01b900460ff1660011461146e576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b6003840154600160a81b900460ff16156114b8576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b8082106114f7576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b4284600901541061153d576040805162461bcd60e51b815260206004820152600b60248201526a085d195c9b5a5b985d195960aa1b604482015290519081900360640190fd5b6115608361154b8385615258565b60038701546001600160a01b0316919061526d565b600784018190556040805186815290517f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d9181900360200190a150506001600055505050565b6000600260005414156115ee576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001600160a01b038b8116908916148015906116215750876001600160a01b03168a6001600160a01b031614155b801561163f5750876001600160a01b0316896001600160a01b031614155b61167a5760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b6000805b868110156116b5576116ab88888381811061169557fe5b90506020020135836152c490919063ffffffff16565b915060010161167e565b5060056000815480929190600101919050555060006005549050600c60008e6001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050190805190602001906118c09291906155a9565b506101008201518160060160006101000a81548160ff021916908315150217905550905050604051806101a001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018a6001600160a01b03168152602001600060ff168152602001600060ff168152602001898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001600181526020018989905081526020016000815260200183815260200187815260200186815250600f600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548160ff021916908360ff16021790555060a08201518160030160156101000a81548160ff021916908360ff16021790555060c0820151816004019080519060200190611ad4929190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051611b2791600a8401916020909101906155a9565b5050600854159050611bb7576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611b8a57600080fd5b505af1158015611b9e573d6000803e3d6000fd5b505050506040513d6020811015611bb457600080fd5b50505b896001600160a01b03168b6001600160a01b03168e6001600160a01b03167fd07e496cfa7540704deca21058ba098d3ec9dd6e9f3f1e661cd773d0568cc4c18f8d8d8d888a8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200187815260200186815260200185815260200180602001841515815260200183810383528a8a828181526020019250602002808284376000838201819052601f909101601f191690920185810384528751815287516020918201939189019250908190849084905b83811015611ca4578181015183820152602001611c8c565b50505050905090810190601f168015611cd15780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a460016000559c9b505050505050505050505050565b600d6020526000908152604090205460ff1681565b60026000541415611d57576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f60205260408120600581015460048201805492936000199092019283908110611d8857fe5b60009182526020909120015460078401546008850154855492935090916001600160a01b0316331480611dc7575060018501546001600160a01b031633145b611e09576040805162461bcd60e51b815260206004820152600e60248201526d21636c69656e742f6f7261636c6560901b604482015290519081900360640190fd5b6003850154600160a01b900460ff16600114611e59576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b6003850154600160a81b900460ff1615611ea3576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b808210611ee2576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b60028501546003860154611f03916001600160a01b0391821691168561526d565b611f0d82846152c4565b60078601819055811115611f275760058501805460010190555b604080516001860181526020810185905280820188905290517fc01cba126feb82d878b875f887d6f577aafb4f46268f068160aeecfd866f25409181900360600190a15050600160005550505050565b600e602090815260009182526040918290208054600180830154600280850154600386015460048701546005880180548b516101009882161598909802600019011694909404601f81018a90048a0287018a01909a528986526001600160a01b039687169996851698600160a01b860460ff90811699600160a81b90970416979396929591949193908301828280156120515780601f1061202657610100808354040283529160200191612051565b820191906000526020600020905b81548152906001019060200180831161203457829003601f168201915b5050506006909301549192505060ff1689565b600a5490565b600b5490565b6009805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561113e5780601f106111135761010080835404028352916020019161113e565b6001546001600160a01b031681565b60026000541415612120576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600e60209081526040808320600f9092528220600381015460078201546008830154939492936001600160a01b03909216929091906121698284615258565b905060006121848760040154836152dd90919063ffffffff16565b6003870154909150600160a81b900460ff166001146121d4576040805162461bcd60e51b8152602060048201526007602482015266085b1bd8dad95960ca1b604482015290519081900360640190fd5b828410612213576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b61221d8282615258565b6122278d8d6152c4565b14612279576040805162461bcd60e51b815260206004820152601960248201527f61776172647320213d2072656d61696e646572202d2066656500000000000000604482015290519081900360640190fd5b600687015460ff16156123d55785546001600160a01b031633148015906122ad575060028601546001600160a01b03163314155b6122fe576040805162461bcd60e51b815260206004820152601f60248201527f636c69656e742f70726f7669646572203d2073776966745265736f6c76657200604482015290519081900360640190fd5b600754600254604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561234c57600080fd5b505afa158015612360573d6000803e3d6000fd5b505050506040513d602081101561237657600080fd5b5051108015906123955750336000908152600d602052604090205460ff165b6123d05760405162461bcd60e51b81526004018080602001828103825260258152602001806156c46025913960400191505060405180910390fd5b612422565b60018701546001600160a01b03163314612422576040805162461bcd60e51b815260206004820152600960248201526810b932b9b7b63b32b960b91b604482015290519081900360640190fd5b6124366001600160a01b038616338361526d565b855461244f906001600160a01b0387811691168e61526d565b600286015461246b906001600160a01b0387811691168d61526d565b600287018c9055600387018b9055612487600588018a8a61551d565b5060078601839055600b80546001810182556000919091526124cc907f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018a8a61551d565b50336001600160a01b03167f10f832c6bff607aae4ae0b9cf0bee04d9f0f62d6ce77c7f2bab3975808f4e2ae8d8d8d858e8e60405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a25050600160005550505050505050505050565b600260005414156125b0576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b600260009081556001546040516001600160a01b039091169034908381818185875af1925050503d8060008114612603576040519150601f19603f3d011682016040523d82523d6000602084013e612608565b606091505b5050905080612649576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b336001600160a01b03167f7edb331fbf0c1c28d0139c38e373c400efe67d4b3f183135c560947209fc063934858560405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550565b6002600054141561270b576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b600260008190556007549054604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561275f57600080fd5b505afa158015612773573d6000803e3d6000fd5b505050506040513d602081101561278957600080fd5b505110156127de576040805162461bcd60e51b815260206004820152601a60248201527f2173776966745265736f6c766572546f6b656e42616c616e6365000000000000604482015290519081900360640190fd5b336000818152600d6020908152604091829020805460ff19168515159081179091558251918201528181529081018490527f0e2d4a938cd3cb4d41a0920d1232d2718cf05c29405790efc42bb4f5e2f5bb95908590859085908060608101858580828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550565b600260005414156128b4576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600f6020526040902080546001600160a01b0316331461290f576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b6003810154600160a01b900460ff161561295c576040805162461bcd60e51b815260206004820152600960248201526818dbdb999a5c9b595960ba1b604482015290519081900360640190fd5b3415612ada5760045460038201546001600160a01b039182169116811480156129885750816008015434145b6129c7576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d8060008114612a12576040519150601f19603f3d011682016040523d82523d6000602084013e612a17565b606091505b5050905080612a58576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015612aa657600080fd5b505af1158015612aba573d6000803e3d6000fd5b505050506040513d6020811015612ad057600080fd5b50612afd92505050565b60088101546003820154612afd916001600160a01b0390911690339030906152ff565b60038101805460ff60a01b1916600160a01b1790556040805183815290517f2d1a46e21cdbb8eabd35598731137ca710b60713819116238e0fde3f59e511cb9181900360200190a150506001600055565b6001600160a01b0381166000908152600c602090815260408083208054825181850281018501909352808352606093830182828015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b50505050509050805160001415612bc7576000915050612be3565b80600182510381518110612bd757fe5b60200260200101519150505b919050565b60026000541415612c2e576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612c7d576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b600a8054600181018255600091909152612cba907fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801838361551d565b507fcb08c4eb330ef67578d7cb86131f93d0de8d3dbd965167f9a31d3beedc9739216001600a8054905003838360405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a150506001600055565b60026000541415612d7a576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000818155848152600e60209081526040808320600f909252909120918201549091906001600160a01b03163314612de7576040805162461bcd60e51b815260206004820152600960248201526810b83937bb34b232b960b91b604482015290519081900360640190fd5b80546001600160a01b03878116911614801590612e14575060018101546001600160a01b03878116911614155b8015612e295750336001600160a01b03871614155b612e645760405162461bcd60e51b815260040180806020018281038252602f815260200180615675602f913960400191505060405180910390fd5b6001820154600160a81b900460ff1615612eaf576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b8060080154816007015410612ef6576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b81546001600160a01b0387811691161415612f29576001820180546001600160a01b0319166001600160a01b0388161790555b81546001600160a01b0387166001600160a01b03199091168117835560018301805461ffff60a01b1916600160a81b17905560408051878152602081018281529181018690527fcfc3d17d2869bce3d4eeb28ed9eeeb1749f8f4b31f7ba9ead1b594577471ef18918891889188919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550505050565b600f602090815260009182526040918290208054600180830154600280850154600386015460058701546006880154600789015460088a015460098b0154600a8c0180548f516101009c8216159c909c02600019011698909804601f81018e90048e028b018e01909e528d8a526001600160a01b039a8b169d988b169c968b169b9a86169a600160a01b870460ff9081169b600160a81b90980416999598949793969295919490939091908301828280156130cd5780601f106130a2576101008083540402835291602001916130cd565b820191906000526020600020905b8154815290600101906020018083116130b057829003601f168201915b505050505090508c565b6002546001600160a01b031681565b6001600160a01b0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561314657602002820191906000526020600020905b815481526020019060010190808311613132575b50505050509050919050565b60006002600054141561319a576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b038916148015906131ca5750876001600160a01b03168a6001600160a01b031614155b80156131e85750876001600160a01b0316896001600160a01b031614155b6132235760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b3415613399576004546001600160a01b039081169088168114801561324757508634145b613286576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d80600081146132d1576040519150601f19603f3d011682016040523d82523d6000602084013e6132d6565b606091505b5050905080613317576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561336557600080fd5b505af1158015613379573d6000803e3d6000fd5b505050506040513d602081101561338f57600080fd5b506133ae92505050565b6133ae6001600160a01b0388163330896152ff565b6040805160018082528183019092526060916020808301908036833701905050905086816000815181106133de57fe5b60200260200101818152505060056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050190805190602001906135f49291906155a9565b506101008201518160060160006101000a81548160ff021916908315150217905550905050604051806101a00160405280336001600160a01b031681526020018d6001600160a01b031681526020018c6001600160a01b031681526020018a6001600160a01b03168152602001600160ff168152602001600060ff16815260200183815260200160018152602001600181526020016000815260200189815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050838152600f6020908152604091829020845181546001600160a01b03199081166001600160a01b039283161783558684015160018401805483169184169190911790559386015160028301805486169183169190911790556060860151600383018054608089015160a08a015191909716929093169190911760ff60a01b1916600160a01b60ff968716021760ff60a81b1916600160a81b95909216949094021790925560c084015180519293506137959260048501929190910190615625565b5060e08201516005820155610100820151600682015561012082015160078201556101408201516008820155610160820151600982015561018082015180516137e891600a8401916020909101906155a9565b5050600854159050613878576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561384b57600080fd5b505af115801561385f573d6000803e3d6000fd5b505050506040513d602081101561387557600080fd5b50505b896001600160a01b03168b6001600160a01b0316336001600160a01b03167ff3a981fb57e5fcdb20463a8ad40ba5c1bc7e2cb58b3bfa72f9f00d2481e9611a8f8d87878f8f8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200188815260200187815260200186815260200180602001841515815260200183810383528a818151815260200191508051906020019060200280838360005b8381101561393c578181015183820152602001613924565b505050509050018381038252868682818152602001925080828437600083820152604051601f909101601f19169092018290039d50909b505050505050505050505050a460016000559b9a5050505050505050505050565b6000600260005414156139dc576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b03881614801590613a0c5750866001600160a01b0316886001600160a01b031614155b613a5d576040805162461bcd60e51b815260206004820152601e60248201527f636c69656e742f636f756e7465727061727479203d207265736f6c7665720000604482015290519081900360640190fd5b3415613bd3576004546001600160a01b0390811690871681148015613a8157508534145b613ac0576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d8060008114613b0b576040519150601f19603f3d011682016040523d82523d6000602084013e613b10565b606091505b5050905080613b51576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b158015613b9f57600080fd5b505af1158015613bb3573d6000803e3d6000fd5b505050506040513d6020811015613bc957600080fd5b50613be892505050565b613be86001600160a01b0387163330886152ff565b604080516001808252818301909252606091602080830190803683370190505090508581600081518110613c1857fe5b60200260200101818152505060056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008b6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018a6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e0820151816005019080519060200190613e2e9291906155a9565b5061010091820151600691909101805460ff1916911515919091179055604080516101a081018252338152600060208083018290526001600160a01b038f8116848601528d16606084015260016080840181905260a084015260c0830187905260e08301829052938201819052610120820181905261014082018b90526101608201528151601f8901849004840281018401909252878252916101808301919089908990819084018382808284376000920182905250939094525050838152600f6020908152604091829020845181546001600160a01b03199081166001600160a01b039283161783558684015160018401805483169184169190911790559386015160028301805486169183169190911790556060860151600383018054608089015160a08a015191909716929093169190911760ff60a01b1916600160a01b60ff968716021760ff60a81b1916600160a81b95909216949094021790925560c08401518051929350613fab9260048501929190910190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051613ffe91600a8401916020909101906155a9565b505060085415905061408e576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561406157600080fd5b505af1158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b50505b886001600160a01b03168a6001600160a01b0316336001600160a01b03167fe9a72a451e334a0643d3d8a0c879e72fa193f14c8ed86341329f7042db766b808b858c8c8c8c60405180876001600160a01b031681526020018681526020018581526020018060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a460016000559998505050505050505050565b60065481565b600b81815481106110ad57600080fd5b600260005414156141a5576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600e60209081526040808320600f90925290912080546001600160a01b0316331461420b576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b336001600160a01b03871614801590614234575060018101546001600160a01b03878116911614155b8015614250575060028101546001600160a01b03878116911614155b61428b5760405162461bcd60e51b815260040180806020018281038252602f815260200180615675602f913960400191505060405180910390fd5b6001820154600160a01b900460ff16156142d6576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b806008015481600701541061431d576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b81546001600160a01b0387811691161415614350576001820180546001600160a01b0319166001600160a01b0388161790555b81546001600160a01b0319166001600160a01b0387169081178355600183018054600160a01b60ff60a01b199091161760ff60a81b1916905560408051878152602081018281529181018690527fb0ac25ee63110f1c5f39ac12c79eea364c7e06ae7410c10f94b3e008427b2be4918891889188919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a25050600160005550505050565b60055481565b60075481565b60026000541415614451576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146144a0576040805162461bcd60e51b815260206004820152600860248201526710b6b0b730b3b2b960c11b604482015290519081900360640190fd5b8181600a85815481106144af57fe5b9060005260206000200191906144c692919061551d565b507f63eeabb7a8f9739511c604ee8c971ebbc179c3eafeadc687574c1d5afd8699f783838360405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15050600160005550565b60085481565b60026000541415614585576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155818152600e60209081526040808320600f90925290912080546001600160a01b031633146145eb576040805162461bcd60e51b81526020600482015260076024820152660858db1a595b9d60ca1b604482015290519081900360640190fd5b60018201546001600160a01b0385811691161415614650576040805162461bcd60e51b815260206004820152601760248201527f636c69656e744f7261636c65203d207265736f6c766572000000000000000000604482015290519081900360640190fd5b6003810154600160a81b900460ff161561469a576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b80600801548160070154106146e1576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b6001810180546001600160a01b0386166001600160a01b031990911681179091556040805185815290517f234175b2da2ad70b3da936d38ee6454faa86ff3dd8e10d948e145e47b35d75319181900360200190a2505060016000555050565b600060026000541415614788576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b6002600055336001600160a01b038916148015906147b85750876001600160a01b03168a6001600160a01b031614155b80156147d65750876001600160a01b0316896001600160a01b031614155b6148115760405162461bcd60e51b81526004018080602001828103825260278152602001806157136027913960400191505060405180910390fd5b6000805b868110156148365761482c88888381811061169557fe5b9150600101614815565b5034156149ad576004546001600160a01b039081169089168114801561485b57508134145b61489a576040805162461bcd60e51b815260206004820152600b60248201526a2165746842616c616e636560a81b604482015290519081900360640190fd5b6040516000906001600160a01b0383169034908381818185875af1925050503d80600081146148e5576040519150601f19603f3d011682016040523d82523d6000602084013e6148ea565b606091505b505090508061492b576040805162461bcd60e51b815260206004820152600860248201526708595d1a10d85b1b60c21b604482015290519081900360640190fd5b6040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561497957600080fd5b505af115801561498d573d6000803e3d6000fd5b505050506040513d60208110156149a357600080fd5b506149c292505050565b6149c26001600160a01b0389163330846152ff565b60056000815480929190600101919050555060006005549050600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560405180610120016040528060006001600160a01b031681526020018b6001600160a01b03168152602001600060ff168152602001600060ff16815260200160008152602001600081526020016006548152602001604051806020016040528060008152508152602001851515815250600e600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908360ff16021790555060608201518160010160156101000a81548160ff021916908360ff1602179055506080820151816002015560a0820151816003015560c0820151816004015560e0820151816005019080519060200190614bcc9291906155a9565b5061010091909101516006909101805460ff1916911515919091179055604080516101a0810182523381526001600160a01b038e81166020808401919091528e821683850152908c16606083015260016080830152600060a083015282518a820280820183019094528a8152919260c0840192918c918c91829190850190849080828437600081840152601f19601f820116905080830192505050505050508152602001600181526020018989905081526020016000815260200183815260200187815260200186815250600f600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548160ff021916908360ff16021790555060a08201518160030160156101000a81548160ff021916908360ff16021790555060c0820151816004019080519060200190614dbc929190615625565b5060e0820151600582015561010082015160068201556101208201516007820155610140820151600882015561016082015160098201556101808201518051614e0f91600a8401916020909101906155a9565b5050600854159050614e9f576003546008546040805163a9059cbb60e01b81523360048201526024810192909252516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015614e7257600080fd5b505af1158015614e86573d6000803e3d6000fd5b505050506040513d6020811015614e9c57600080fd5b50505b896001600160a01b03168b6001600160a01b0316336001600160a01b03167ff3a981fb57e5fcdb20463a8ad40ba5c1bc7e2cb58b3bfa72f9f00d2481e9611a8f8d8d8d888a8f8f8f604051808a6001600160a01b03168152602001896001600160a01b031681526020018060200187815260200186815260200185815260200180602001841515815260200183810383528a8a828181526020019250602002808284376000838201819052601f909101601f191690920185810384528751815287516020918201939189019250908190849084905b83811015614f8c578181015183820152602001614f74565b50505050905090810190601f168015614fb95780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a460016000559b9a5050505050505050505050565b6004546001600160a01b031681565b60026000541415615038576040805162461bcd60e51b815260206004820152601f60248201526000805160206156a4833981519152604482015290519081900360640190fd5b60026000908155838152600f6020526040902080546001600160a01b031633148061506f575060028101546001600160a01b031633145b6150a9576040805162461bcd60e51b815260206004820152600660248201526521706172747960d01b604482015290519081900360640190fd5b6003810154600160a01b900460ff166001146150f9576040805162461bcd60e51b815260206004820152600a6024820152690858dbdb999a5c9b595960b21b604482015290519081900360640190fd5b8060080154816007015410615140576040805162461bcd60e51b81526020600482015260086024820152671c995b19585cd95960c21b604482015290519081900360640190fd5b60038101805460ff60a81b1916600160a81b179055604080518581526020810182815291810184905233917ffd726b3c66354a0801cf61e13f1282806917ff4f06bf73781d47043677f64a539187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a2505060016000555050565b6000818152600f602090815260408083206003810154600490910180548351818602810186019094528084526060946001600160a01b0390931693919283919083018282801561523957602002820191906000526020600020905b815481526020019060010190808311615225575b5050505050905091509150915091565b6003546001600160a01b031681565b60008282111561526757600080fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526152bf90849061535f565b505050565b6000828201838110156152d657600080fd5b9392505050565b60008082116152eb57600080fd5b60008284816152f657fe5b04949350505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261535990859061535f565b50505050565b615371826001600160a01b0316615517565b6153c2576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106154005780518252601f1990920191602091820191016153e1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615462576040519150601f19603f3d011682016040523d82523d6000602084013e615467565b606091505b5091509150816154be576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115615359578080602001905160208110156154da57600080fd5b50516153595760405162461bcd60e51b815260040180806020018281038252602a8152602001806156e9602a913960400191505060405180910390fd5b3b151590565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155535760008555615599565b82601f1061556c5782800160ff19823516178555615599565b82800160010185558215615599579182015b8281111561559957823582559160200191906001019061557e565b506155a592915061565f565b5090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155df5760008555615599565b82601f106155f857805160ff1916838001178555615599565b82800160010185558215615599579182015b8281111561559957825182559160200191906001019061560a565b828054828255906000526020600020908101928215615599579160200282018281111561559957825182559160200191906001019061560a565b5b808211156155a5576000815560010161566056fe636c69656e742f636c69656e744f7261636c652f70726f7669646572203d2070726f706f7365645265736f6c7665725265656e7472616e637947756172643a207265656e7472616e742063616c6c002173776966745265736f6c766572546f6b656e42616c616e63652f726567697374657265645361666545524332303a206572633230206f7065726174696f6e20646964206e6f742073756363656564636c69656e742f636c69656e744f7261636c652f70726f7669646572203d207265736f6c766572a2646970667358221220d1435383a3fd57fa980e762d36c6b2766d0185dace2deb40aadf0e4acb71fc0864736f6c63430007050033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a2000000000000000000000000001b92e2c0d06325089c6fd53c98a214f5c75b2ac00000000000000000000000063125c0d5cd9071de9a1ac84c400982f41c697ae000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001b42455441202d20557365204c584c206174206f776e207269736b210000000000

-----Decoded View---------------
Arg [0] : _manager (address): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20
Arg [1] : _swiftResolverToken (address): 0x01B92E2C0D06325089c6Fd53C98a214f5C75B2aC
Arg [2] : _userRewardToken (address): 0x63125c0d5Cd9071de9A1ac84c400982f41C697AE
Arg [3] : _wETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : _resolutionRate (uint256): 20
Arg [5] : _swiftResolverTokenBalance (uint256): 10000000000000000000000
Arg [6] : _userReward (uint256): 10000000000000000000
Arg [7] : _lockerTerms (string): BETA - Use LXL at own risk!

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [1] : 00000000000000000000000001b92e2c0d06325089c6fd53c98a214f5c75b2ac
Arg [2] : 00000000000000000000000063125c0d5cd9071de9a1ac84c400982f41c697ae
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [6] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [9] : 42455441202d20557365204c584c206174206f776e207269736b210000000000


Deployed Bytecode Sourcemap

4590:30875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5713:27;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5713:27:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34538:924;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34538:924:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34538:924:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34538:924:0;;;;;;;;;;-1:-1:-1;34538:924:0;;-1:-1:-1;34538:924:0;-1:-1:-1;34538:924:0;:::i;:::-;;24152:727;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24152:727:0;;:::i;16564:1665::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16564:1665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16564:1665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16564:1665:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16564:1665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16564:1665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16564:1665:0;;-1:-1:-1;;;;16564:1665:0;;;;-1:-1:-1;16564:1665:0;:::i;:::-;;;;;;;;;;;;;;;;6048:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6048:58:0;-1:-1:-1;;;;;6048:58:0;;:::i;:::-;;;;;;;;;;;;;;;;;;23022:825;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23022:825:0;;:::i;6150:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6150:35:0;;:::i;:::-;;;;;-1:-1:-1;;;;;6150:35:0;;;;;;-1:-1:-1;;;;;6150:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31857:157;;;;;;;;;;;;;:::i;32287:161::-;;;;;;;;;;;;;:::i;5627:25::-;;;;;;;;;;;;;:::i;4740:22::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4740:22:0;;;;;;;;;;;;;;26152:1680;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26152:1680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26152:1680:0;;;;;;;;;;-1:-1:-1;26152:1680:0;;-1:-1:-1;26152:1680:0;-1:-1:-1;26152:1680:0;:::i;33584:257::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33584:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33584:257:0;;;;;;;;;;-1:-1:-1;33584:257:0;;-1:-1:-1;33584:257:0;-1:-1:-1;33584:257:0;:::i;30918:370::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30918:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30918:370:0;;;;;;;;;;;;-1:-1:-1;30918:370:0;-1:-1:-1;30918:370:0;;;;:::i;18507:824::-;;;;;;;;;;;;;;;;-1:-1:-1;18507:824:0;;:::i;31348:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31348:301:0;-1:-1:-1;;;;;31348:301:0;;:::i;32832:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32832:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32832:182:0;;;;;;;;;;-1:-1:-1;32832:182:0;;-1:-1:-1;32832:182:0;-1:-1:-1;32832:182:0;:::i;29621:946::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29621:946:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29621:946:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29621:946:0;;;;;;;;;;-1:-1:-1;29621:946:0;;-1:-1:-1;29621:946:0;-1:-1:-1;29621:946:0;:::i;6237:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6237:41:0;;:::i;:::-;;;;;-1:-1:-1;;;;;6237:41:0;;;;;;-1:-1:-1;;;;;6237:41:0;;;;;;-1:-1:-1;;;;;6237:41:0;;;;;;-1:-1:-1;;;;;6237:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4852:33;;;;;;;;;;;;;:::i;31661:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31661:184:0;-1:-1:-1;;;;;31661:184:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13620:2033;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13620:2033:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13620:2033:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13620:2033:0;;;;;;;;;;;;-1:-1:-1;13620:2033:0;-1:-1:-1;13620:2033:0;;;;:::i;20063:1837::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20063:1837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20063:1837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20063:1837:0;;;;;;;;;;;;-1:-1:-1;20063:1837:0;-1:-1:-1;20063:1837:0;;;;:::i;5220:29::-;;;;;;;;;;;;;:::i;5844:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5844:27:0;;:::i;28254:945::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28254:945:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28254:945:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28254:945:0;;;;;;;;;;-1:-1:-1;28254:945:0;;-1:-1:-1;28254:945:0;-1:-1:-1;28254:945:0;:::i;5150:26::-;;;;;;;;;;;;;:::i;5365:40::-;;;;;;;;;;;;;:::i;33225:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33225:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33225:189:0;;;;;;;;;;-1:-1:-1;33225:189:0;;-1:-1:-1;33225:189:0;-1:-1:-1;33225:189:0;:::i;5513:25::-;;;;;;;;;;;;;:::i;22267:580::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22267:580:0;;;;;;;;:::i;10666:2082::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10666:2082:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10666:2082:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10666:2082:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10666:2082:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10666:2082:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10666:2082:0;;-1:-1:-1;;;;10666:2082:0;;;;-1:-1:-1;10666:2082:0;:::i;5058:19::-;;;;;;;;;;;;;:::i;25327:451::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25327:451:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25327:451:0;;;;;;;;;;-1:-1:-1;25327:451:0;;-1:-1:-1;25327:451:0;-1:-1:-1;25327:451:0;:::i;32026:249::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32026:249:0;;:::i;:::-;;;;;-1:-1:-1;;;;;32026:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4967:30;;;;;;;;;;;;;:::i;5713:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5713:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5713:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34538:924::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;32652:7:::1;::::0;-1:-1:-1;;;;;32652:7:0::1;32638:10;:21;32630:42;;;::::0;;-1:-1:-1;;;32630:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32630:42:0;;;;;;;;;;;;;::::1;;34923:1:::2;34905:15;:19;34897:51;;;::::0;;-1:-1:-1;;;34897:51:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;34897:51:0;;;;;;;;;;;;;::::2;;34969:7;:18:::0;;-1:-1:-1;;;;;34969:18:0;;::::2;-1:-1:-1::0;;;;;;34969:18:0;;::::2;;::::0;;;34998::::2;:40:::0;;;;::::2;::::0;;::::2;;::::0;;35049:15:::2;:34:::0;;;;::::2;::::0;;::::2;;::::0;;35094:4:::2;:12:::0;;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;35117:14:::2;:32:::0;;;35160:25:::2;:54:::0;;;35225:10:::2;:24:::0;;;35260:26:::2;:11;35274:12:::0;;35260:26:::2;:::i;:::-;;35327:8;-1:-1:-1::0;;;;;35306:148:0::2;;35337:19;35358:16;35376:5;35383:15;35400:26;35428:11;35441:12;;35306:148;;;;-1:-1:-1::0;;;;;35306:148:0::2;;;;;;-1:-1:-1::0;;;;;35306:148:0::2;;;;;;-1:-1:-1::0;;;;;35306:148:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;35306:148:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;35306:148:0;;-1:-1:-1;;;;;;;;;;35306:148:0::2;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;;;;;34538:924:0:o;24152:727::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;24246:21;;;:7:::1;:21;::::0;;;;24299:13;;24339:15:::1;::::0;::::1;::::0;24376:10:::1;::::0;::::1;::::0;-1:-1:-1;;;;;24299:13:0;;::::1;::::0;24415:10:::1;:20:::0;::::1;::::0;:57:::1;;-1:-1:-1::0;24453:19:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;24453:19:0::1;24439:10;:33;24415:57;24407:84;;;::::0;;-1:-1:-1;;;24407:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24407:84:0;;;;;;;;;;;;;::::1;;24510:16;::::0;::::1;::::0;-1:-1:-1;;;24510:16:0;::::1;;;24530:1;24510:21;24502:44;;;::::0;;-1:-1:-1;;;24502:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24502:44:0;;;;;;;;;;;;;::::1;;24565:13;::::0;::::1;::::0;-1:-1:-1;;;24565:13:0;::::1;;;:18:::0;24557:37:::1;;;::::0;;-1:-1:-1;;;24557:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24557:37:0;;;;;;;;;;;;;::::1;;24624:3;24613:8;:14;24605:35;;;::::0;;-1:-1:-1;;;24605:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24605:35:0;;;;;;;;;;;;;::::1;;24680:15;24659:6;:18;;;:36;24651:60;;;::::0;;-1:-1:-1;;;24651:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24651:60:0;;;;;;;;;;;;;::::1;;24732;24766:6:::0;24774:17:::1;:3:::0;24782:8;24774:7:::1;:17::i;:::-;24739:12;::::0;::::1;::::0;-1:-1:-1;;;;;24739:12:0::1;::::0;24732:60;:33:::1;:60::i;:::-;24803:15;::::0;::::1;:21:::0;;;24848:22:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;24152:727:0:o;16564:1665::-;16909:7;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;-1:-1:-1;;;;;16937:18:0;;::::1;::::0;;::::1;;::::0;::::1;::::0;:46:::1;;;16975:8;-1:-1:-1::0;;;;;16959:24:0::1;:12;-1:-1:-1::0;;;;;16959:24:0::1;;;16937:46;:70;;;;;16999:8;-1:-1:-1::0;;;;;16987:20:0::1;:8;-1:-1:-1::0;;;;;16987:20:0::1;;;16937:70;16929:122;;;;-1:-1:-1::0;;;16929:122:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17072:11;::::0;17094:95:::1;17114:17:::0;;::::1;17094:95;;;17159:18;17167:6;;17174:1;17167:9;;;;;;;;;;;;;17159:3;:7;;:18;;;;:::i;:::-;17153:24:::0;-1:-1:-1;17133:3:0::1;;17094:95;;;;17202:11;;:13;;;;;;;;;;;;;17226:20;17249:11;;17226:34;;17281:13;:21;17295:6;-1:-1:-1::0;;;;;17281:21:0::1;-1:-1:-1::0;;;;;17281:21:0::1;;;;;;;;;;;;17308:12;17281:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17332:13;:23;17346:8;-1:-1:-1::0;;;;;17332:23:0::1;-1:-1:-1::0;;;;;17332:23:0::1;;;;;;;;;;;;17361:12;17332:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17415:183;;;;;;;;17442:1;-1:-1:-1::0;;;;;17415:183:0::1;;;;;17459:8;-1:-1:-1::0;;;;;17415:183:0::1;;;;;17482:1;17415:183;;;;;;17498:1;17415:183;;;;;;17514:1;17415:183;;;;17530:1;17415:183;;;;17543:14;;17415:183;;;;;;;;;;;;;;;::::0;::::1;;;;17584:13;17415:183;;;;::::0;17394:4:::1;:18;17399:12;17394:18;;;;;;;;;;;:204;;;;;;;;;;;;;-1:-1:-1::0;;;;;17394:204:0::1;;;;;-1:-1:-1::0;;;;;17394:204:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;17394:204:0::1;;;;;-1:-1:-1::0;;;;;17394:204:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17635:279;;;;;;;;17657:6;-1:-1:-1::0;;;;;17635:279:0::1;;;;;17679:12;-1:-1:-1::0;;;;;17635:279:0::1;;;;;17706:8;-1:-1:-1::0;;;;;17635:279:0::1;;;;;17729:5;-1:-1:-1::0;;;;;17635:279:0::1;;;;;17749:1;17635:279;;;;;;17765:1;17635:279;;;;;;17781:6;;17635:279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17802:1;17635:279;;;;17818:6;;:13;;17635:279;;;;17846:1;17635:279;;;;17862:3;17635:279;;;;17880:11;17635:279;;;;17906:7;17635:279;;::::0;17611:7:::1;:21;17619:12;17611:21;;;;;;;;;;;:303;;;;;;;;;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;-1:-1:-1::0;;;;;17611:303:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17611:303:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;17939:10:0::1;::::0;:14;;-1:-1:-1;17935:79:0::1;;17963:15;::::0;18001:10:::1;::::0;17956:56:::1;::::0;;-1:-1:-1;;;17956:56:0;;17989:10:::1;17956:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;17963:15:0;;::::1;::::0;17956:32:::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;17963:15:::1;::::0;17956:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;17935:79:0::1;18103:8;-1:-1:-1::0;;;;;18056:127:0::1;18093:8;-1:-1:-1::0;;;;;18056:127:0::1;18071:6;-1:-1:-1::0;;;;;18056:127:0::1;;18079:12;18113:5;18120:6;;18128:12;18142:3;18147:11;18160:7;18169:13;18056:127;;;;-1:-1:-1::0;;;;;18056:127:0::1;;;;;;-1:-1:-1::0;;;;;18056:127:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;18056:127:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;-1:-1:-1;18056:127:0;;;;;;;::::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4130:1:::0;4427:7;:22;18209:12;16564:1665;-1:-1:-1;;;;;;;;;;;;16564:1665:0:o;6048:58::-;;;;;;;;;;;;;;;:::o;23022:825::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;23115:21;;;:7:::1;:21;::::0;;;;23171:23:::1;::::0;::::1;::::0;23225:13:::1;::::0;::::1;:24:::0;;23115:21;;-1:-1:-1;;23171:25:0;;;;;;23225:24;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23279:15:::1;::::0;::::1;::::0;23319:10:::1;::::0;::::1;::::0;23366:13;;23225:24;;-1:-1:-1;23279:15:0;;-1:-1:-1;;;;;23366:13:0::1;23352:10;:27;::::0;:64:::1;;-1:-1:-1::0;23397:19:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;23397:19:0::1;23383:10;:33;23352:64;23344:91;;;::::0;;-1:-1:-1;;;23344:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23344:91:0;;;;;;;;;;;;;::::1;;23451:16;::::0;::::1;::::0;-1:-1:-1;;;23451:16:0;::::1;;;23471:1;23451:21;23443:44;;;::::0;;-1:-1:-1;;;23443:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23443:44:0;;;;;;;;;;;;;::::1;;23503:13;::::0;::::1;::::0;-1:-1:-1;;;23503:13:0;::::1;;;:18:::0;23495:37:::1;;;::::0;;-1:-1:-1;;;23495:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23495:37:0;;;;;;;;;;;;;::::1;;23559:3;23548:8;:14;23540:35;;;::::0;;-1:-1:-1;;;23540:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23540:35:0;;;;;;;;;;;;;::::1;;23622:15;::::0;::::1;::::0;23595:12:::1;::::0;::::1;::::0;23588:59:::1;::::0;-1:-1:-1;;;;;23595:12:0;;::::1;::::0;23622:15:::1;23639:7:::0;23588:33:::1;:59::i;:::-;23676:21;:8:::0;23689:7;23676:12:::1;:21::i;:::-;23658:15;::::0;::::1;:39:::0;;;23722:21;-1:-1:-1;23718:55:0::1;;;23746:23;::::0;::::1;:25:::0;;::::1;;::::0;;23718:55:::1;23795:43;::::0;;23813:1:::1;23803:11:::0;::::1;23795:43:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;;23022:825:0:o;6150:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6150:35:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6150:35:0;;;;;;;;-1:-1:-1;;;6150:35:0;;;;;;;-1:-1:-1;;;6150:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6150:35:0;;;;;;;-1:-1:-1;;6150:35:0;;;:::o;31857:157::-;31988:11;:18;31857:157;:::o;32287:161::-;32422:11;:18;32287:161;:::o;5627:25::-;;;;;;;;;;;;;;;-1:-1:-1;;5627:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4740:22;;;-1:-1:-1;;;;;4740:22:0;;:::o;26152:1680::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;26314;;;:4:::1;:18;::::0;;;;;;;26367:7:::1;:21:::0;;;;;26425:12:::1;::::0;::::1;::::0;26467:15:::1;::::0;::::1;::::0;26504:10:::1;::::0;::::1;::::0;26314:18;;26367:21;;-1:-1:-1;;;;;26425:12:0;;::::1;::::0;26467:15;;26504:10;26600:17:::1;26504:10:::0;26467:15;26600:7:::1;:17::i;:::-;26580:37;;26626:21;26650:33;26664:3;:18;;;26650:9;:13;;:33;;;;:::i;:::-;26707:13;::::0;::::1;::::0;26626:57;;-1:-1:-1;;;;26707:13:0;::::1;;;26724:1;26707:18;26699:38;;;::::0;;-1:-1:-1;;;26699:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26699:38:0;;;;;;;;;;;;;::::1;;26765:3;26754:8;:14;26746:35;;;::::0;;-1:-1:-1;;;26746:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26746:35:0;;;;;;;;;;;;;::::1;;26831:28;:9:::0;26845:13;26831::::1;:28::i;:::-;26797:30;:11:::0;26813:13;26797:15:::1;:30::i;:::-;:62;26789:100;;;::::0;;-1:-1:-1;;;26789:100:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26908:17;::::0;::::1;::::0;::::1;;26904:413;;;26961:13:::0;;-1:-1:-1;;;;;26961:13:0::1;26947:10;:27;::::0;::::1;::::0;:60:::1;;-1:-1:-1::0;26992:15:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;26992:15:0::1;26978:10;:29;;26947:60;26939:104;;;::::0;;-1:-1:-1;;;26939:104:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27115:25;::::0;27070:18:::1;::::0;27063:48:::1;::::0;;-1:-1:-1;;;27063:48:0;;27100:10:::1;27063:48;::::0;::::1;::::0;;;-1:-1:-1;;;;;27070:18:0;;::::1;::::0;27063:36:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;27070:18;27063:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27063:48:0;:77:::1;::::0;::::1;::::0;:119:::1;;-1:-1:-1::0;27171:10:0::1;27144:38;::::0;;;:26:::1;:38;::::0;;;;;::::1;;27063:119;27055:169;;;;-1:-1:-1::0;;;27055:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26904:413;;;27279:12;::::0;::::1;::::0;-1:-1:-1;;;;;27279:12:0::1;27265:10;:26;27257:48;;;::::0;;-1:-1:-1;;;27257:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27257:48:0;;;;;;;;;;;;;::::1;;27337:53;-1:-1:-1::0;;;;;27337:26:0;::::1;27364:10;27376:13:::0;27337:26:::1;:53::i;:::-;27428:13:::0;;27401:54:::1;::::0;-1:-1:-1;;;;;27401:26:0;;::::1;::::0;27428:13:::1;27443:11:::0;27401:26:::1;:54::i;:::-;27493:15;::::0;::::1;::::0;27466:58:::1;::::0;-1:-1:-1;;;;;27466:26:0;;::::1;::::0;27493:15:::1;27510:13:::0;27466:26:::1;:58::i;:::-;27545:15;::::0;::::1;:29:::0;;;27582:17:::1;::::0;::::1;:33:::0;;;27623:27:::1;:14;::::0;::::1;27640:10:::0;;27623:27:::1;:::i;:::-;-1:-1:-1::0;27658:15:0::1;::::0;::::1;:21:::0;;;27688:11:::1;:28:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;27688:28:0;;;;::::1;::::0;;::::1;27705:10:::0;;27688:28:::1;:::i;:::-;;27744:10;-1:-1:-1::0;;;;;27736:88:0::1;;27756:11;27769:13;27784:12;27798:13;27813:10;;27736:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;27736:88:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;27736:88:0;;-1:-1:-1;;;;;;;;27736:88:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;;;;;;;;26152:1680:0:o;33584:257::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;33696:7:::1;::::0;:34:::1;::::0;-1:-1:-1;;;;;33696:7:0;;::::1;::::0;33716:9:::1;::::0;4386:7;33696:34;4386:7;33696:34;33716:9;33696:7;:34:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33677:53;;;33749:7;33741:28;;;::::0;;-1:-1:-1;;;33741:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33741:28:0;;;;;;;;;;;;;::::1;;33802:10;-1:-1:-1::0;;;;;33785:48:0::1;;33814:9;33825:7;;33785:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;33785:48:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;33785:48:0;;-1:-1:-1;;;;;33785:48:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;33584:257:0:o;30918:370::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;31088:25:::1;::::0;31043:18;;31036:48:::1;::::0;;-1:-1:-1;;;31036:48:0;;31073:10:::1;31036:48;::::0;::::1;::::0;;;-1:-1:-1;;;;;31043:18:0;;::::1;::::0;31036:36:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;31043:18;31036:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31036:48:0;:77:::1;;31028:116;;;::::0;;-1:-1:-1;;;31028:116:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31182:10;31155:38;::::0;;;:26:::1;:38;::::0;;;;;;;;:51;;-1:-1:-1;;31155:51:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31222:58;;;;::::1;::::0;;;;;;;;;;::::1;::::0;31260:7;;31222:58;;31155:51;;31222:58;;;;31260:7;31222:58;;31260:7;31222:58;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;31222:58:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31222:58:0;;-1:-1:-1;;;;;31222:58:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;30918:370:0:o;18507:824::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;18635:21;;;:7:::1;:21;::::0;;;;18699:13;;-1:-1:-1;;;;;18699:13:0::1;18685:10;:27;18677:47;;;::::0;;-1:-1:-1;;;18677:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18677:47:0;;;;;;;;;;;;;::::1;;18743:16;::::0;::::1;::::0;-1:-1:-1;;;18743:16:0;::::1;;;:21:::0;18735:43:::1;;;::::0;;-1:-1:-1;;;18735:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18735:43:0;;;;;;;;;;;;;::::1;;18803:9;:13:::0;18799:430:::1;;18848:4;::::0;18875:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;18848:4:0;;::::1;::::0;18875:12:::1;:20:::0;::::1;:47:::0;::::1;;;;18912:6;:10;;;18899:9;:23;18875:47;18867:71;;;::::0;;-1:-1:-1;;;18867:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;18867:71:0;;;;;;;;;;;;;::::1;;18972:31;::::0;18954:12:::1;::::0;-1:-1:-1;;;;;18972:9:0;::::1;::::0;18989::::1;::::0;18954:12;18972:31;18954:12;18972:31;18989:9;18972;:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18953:50;;;19026:7;19018:28;;;::::0;;-1:-1:-1;;;19018:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19018:28:0;;;;;;;;;;;;;::::1;;19061:47;::::0;;-1:-1:-1;;;19061:47:0;;19091:4:::1;19061:47;::::0;::::1;::::0;19098:9:::1;19061:47:::0;;;;;;-1:-1:-1;;;;;19061:21:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;-1:-1:-1;19061:21:0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18799:430:0::1;::::0;-1:-1:-1;;;18799:430:0::1;;19206:10;::::0;::::1;::::0;19148:12:::1;::::0;::::1;::::0;19141:76:::1;::::0;-1:-1:-1;;;;;19148:12:0;;::::1;::::0;19179:10:::1;::::0;19199:4:::1;::::0;19141:37:::1;:76::i;:::-;19249:16;::::0;::::1;:20:::0;;-1:-1:-1;;;;19249:20:0::1;-1:-1:-1::0;;;19249:20:0::1;::::0;;19295:27:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;18507:824::o;31348:301::-;-1:-1:-1;;;;;31523:22:0;;31422:14;31523:22;;;:13;:22;;;;;;;;31493:52;;;;;;;;;;;;;;;;;:27;;:52;;31523:22;31493:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31560:10;:17;31581:1;31560:22;31556:86;;;31592:1;31585:8;;;;;31556:86;31609:10;31638:1;31620:10;:17;:19;31609:31;;;;;;;;;;;;;;31602:38;;;31348:301;;;;:::o;32832:182::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;32652:7:::1;::::0;-1:-1:-1;;;;;32652:7:0::1;32638:10;:21;32630:42;;;::::0;;-1:-1:-1;;;32630:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32630:42:0;;;;;;;;;;;;;::::1;;32924:11:::2;:23:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;32924:23:0;;;;::::2;::::0;;::::2;32941:5:::0;;32924:23:::2;:::i;:::-;;32963:43;32997:1;32978:11;:18;;;;:20;33000:5;;32963:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;32963:43:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;32963:43:0;;-1:-1:-1;;;;;32963:43:0::2;-1:-1:-1::0;;4130:1:0;4427:7;:22;32832:182::o;29621:946::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;29779;;;:4:::1;:18;::::0;;;;;;;29832:7:::1;:21:::0;;;;;;29897:15;;::::1;::::0;29779:18;;29832:21;-1:-1:-1;;;;;29897:15:0::1;29883:10;:29;29875:51;;;::::0;;-1:-1:-1;;;29875:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29875:51:0;;;;;;;;;;;;;::::1;;29946:13:::0;;-1:-1:-1;;;;;29946:33:0;;::::1;:13:::0;::::1;:33;::::0;::::1;::::0;:76:::1;;-1:-1:-1::0;29983:19:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;29983:39:0;;::::1;:19:::0;::::1;:39;;29946:76;:110;;;;-1:-1:-1::0;30026:10:0::1;-1:-1:-1::0;;;;;30026:30:0;::::1;;;29946:110;29938:170;;;;-1:-1:-1::0;;;29938:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30127:28;::::0;::::1;::::0;-1:-1:-1;;;30127:28:0;::::1;;;:33:::0;30119:53:::1;;;::::0;;-1:-1:-1;;;30119:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30119:53:0;;;;;;;;;;;;;::::1;;30206:6;:10;;;30188:6;:15;;;:28;30180:49;;;::::0;;-1:-1:-1;;;30180:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30180:49:0;;;;;;;;;;;;;::::1;;30243:20:::0;;-1:-1:-1;;;;;30243:40:0;;::::1;:20:::0;::::1;:40;30239:104;;;30300:12;::::0;::::1;:31:::0;;-1:-1:-1;;;;;;30300:31:0::1;-1:-1:-1::0;;;;;30300:31:0;::::1;;::::0;;30239:104:::1;30358:39:::0;;-1:-1:-1;;;;;30358:39:0;::::1;-1:-1:-1::0;;;;;;30358:39:0;;::::1;::::0;::::1;::::0;;;30405:26;::::1;:30:::0;;-1:-1:-1;;;;30443:32:0;-1:-1:-1;;;30443:32:0::1;::::0;;30495:64:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;30537:12;;30551:7;;;;30495:64;;;;30551:7;;;;30495:64;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;30495:64:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;30495:64:0;;-1:-1:-1;;;;;30495:64:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;;29621:946:0:o;6237:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6237:41:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6237:41:0;;;;;;;;;;;;;;;;-1:-1:-1;;;6237:41:0;;;;;;;-1:-1:-1;;;6237:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4852:33::-;;;-1:-1:-1;;;;;4852:33:0;;:::o;31661:184::-;-1:-1:-1;;;;;31815:22:0;;;;;;:13;:22;;;;;;;;;31808:29;;;;;;;;;;;;;;;;;31730:27;;31808:29;;;31815:22;31808:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31661:184;;;:::o;13620:2033::-;13948:7;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;13976:10:::1;-1:-1:-1::0;;;;;13976:22:0;::::1;;::::0;::::1;::::0;:50:::1;;;14018:8;-1:-1:-1::0;;;;;14002:24:0::1;:12;-1:-1:-1::0;;;;;14002:24:0::1;;;13976:50;:74;;;;;14042:8;-1:-1:-1::0;;;;;14030:20:0::1;:8;-1:-1:-1::0;;;;;14030:20:0::1;;;13976:74;13968:126;;;;-1:-1:-1::0;;;13968:126:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14119:9;:13:::0;14115:402:::1;;14164:4;::::0;-1:-1:-1;;;;;14164:4:0;;::::1;::::0;14191:13;::::1;::::0;::::1;:33:::0;::::1;;;;14221:3;14208:9;:16;14191:33;14183:57;;;::::0;;-1:-1:-1;;;14183:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14183:57:0;;;;;;;;;;;;;::::1;;14274:31;::::0;14256:12:::1;::::0;-1:-1:-1;;;;;14274:9:0;::::1;::::0;14291::::1;::::0;14256:12;14274:31;14256:12;14274:31;14291:9;14274;:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14255:50;;;14328:7;14320:28;;;::::0;;-1:-1:-1;;;14320:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14320:28:0;;;;;;;;;;;;;::::1;;14363:47;::::0;;-1:-1:-1;;;14363:47:0;;14393:4:::1;14363:47;::::0;::::1;::::0;14400:9:::1;14363:47:::0;;;;;;-1:-1:-1;;;;;14363:21:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;-1:-1:-1;14363:21:0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14115:402:0::1;::::0;-1:-1:-1;;;14115:402:0::1;;14443:62;-1:-1:-1::0;;;;;14443:30:0;::::1;14474:10;14494:4;14501:3:::0;14443:30:::1;:62::i;:::-;14563:16;::::0;;14577:1:::1;14563:16:::0;;;;;::::1;::::0;;;14537:23:::1;::::0;14563:16:::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;14563:16:0::1;14537:42;;14602:3;14590:6;14597:1;14590:9;;;;;;;;;;;;;:15;;;::::0;::::1;14626:11;;:13;;;;;;;;;;;;;14650:20;14673:11;;14650:34;;14705:13;:25;14719:10;-1:-1:-1::0;;;;;14705:25:0::1;-1:-1:-1::0;;;;;14705:25:0::1;;;;;;;;;;;;14736:12;14705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14760:13;:23;14774:8;-1:-1:-1::0;;;;;14760:23:0::1;-1:-1:-1::0;;;;;14760:23:0::1;;;;;;;;;;;;14789:12;14760:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14844:183;;;;;;;;14871:1;-1:-1:-1::0;;;;;14844:183:0::1;;;;;14888:8;-1:-1:-1::0;;;;;14844:183:0::1;;;;;14911:1;14844:183;;;;;;14927:1;14844:183;;;;;;14943:1;14844:183;;;;14959:1;14844:183;;;;14972:14;;14844:183;;;;;;;;;;;;;;;::::0;::::1;;;;15013:13;14844:183;;;;::::0;14823:4:::1;:18;14828:12;14823:18;;;;;;;;;;;:204;;;;;;;;;;;;;-1:-1:-1::0;;;;;14823:204:0::1;;;;;-1:-1:-1::0;;;;;14823:204:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;14823:204:0::1;;;;;-1:-1:-1::0;;;;;14823:204:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15064:271;;;;;;;;15086:10;-1:-1:-1::0;;;;;15064:271:0::1;;;;;15112:12;-1:-1:-1::0;;;;;15064:271:0::1;;;;;15139:8;-1:-1:-1::0;;;;;15064:271:0::1;;;;;15162:5;-1:-1:-1::0;;;;;15064:271:0::1;;;;;15182:1;15064:271;;;;;;15198:1;15064:271;;;;;;15214:6;15064:271;;;;15235:1;15064:271;;;;15251:1;15064:271;;;;15267:1;15064:271;;;;15283:3;15064:271;;;;15301:11;15064:271;;;;15327:7;;15064:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;15064:271:0;;;;-1:-1:-1;;15040:21:0;;;:7:::1;:21;::::0;;;;;;;;:295;;;;-1:-1:-1;;;;;;15040:295:0;;::::1;-1:-1:-1::0;;;;;15040:295:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;15040:295:0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;15040:295:0::1;-1:-1:-1::0;;;15040:295:0::1;::::0;;::::1;;;-1:-1:-1::0;;;;15040:295:0::1;-1:-1:-1::0;;;15040:295:0;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;:21;;-1:-1:-1;15040:295:0::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;15040:295:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;15360:10:0::1;::::0;:14;;-1:-1:-1;15356:79:0::1;;15384:15;::::0;15422:10:::1;::::0;15377:56:::1;::::0;;-1:-1:-1;;;15377:56:0;;15410:10:::1;15377:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;15384:15:0;;::::1;::::0;15377:32:::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;15384:15:::1;::::0;15377:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;15356:79:0::1;15527:8;-1:-1:-1::0;;;;;15477:130:0::1;15517:8;-1:-1:-1::0;;;;;15477:130:0::1;15491:10;-1:-1:-1::0;;;;;15477:130:0::1;;15503:12;15537:5;15544:6;15552:12;15566:3;15571:11;15584:7;;15593:13;15477:130;;;;-1:-1:-1::0;;;;;15477:130:0::1;;;;;;-1:-1:-1::0;;;;;15477:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;15477:130:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;15477:130:0;;-1:-1:-1;;;;;;;;;;;;15477:130:0::1;4130:1:::0;4427:7;:22;15633:12;13620:2033;-1:-1:-1;;;;;;;;;;;13620:2033:0:o;20063:1837::-;20248:7;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;20276:10:::1;-1:-1:-1::0;;;;;20276:22:0;::::1;;::::0;::::1;::::0;:50:::1;;;20318:8;-1:-1:-1::0;;;;;20302:24:0::1;:12;-1:-1:-1::0;;;;;20302:24:0::1;;;20276:50;20268:93;;;::::0;;-1:-1:-1;;;20268:93:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20386:9;:13:::0;20382:402:::1;;20431:4;::::0;-1:-1:-1;;;;;20431:4:0;;::::1;::::0;20458:13;::::1;::::0;::::1;:33:::0;::::1;;;;20488:3;20475:9;:16;20458:33;20450:57;;;::::0;;-1:-1:-1;;;20450:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20450:57:0;;;;;;;;;;;;;::::1;;20541:31;::::0;20523:12:::1;::::0;-1:-1:-1;;;;;20541:9:0;::::1;::::0;20558::::1;::::0;20523:12;20541:31;20523:12;20541:31;20558:9;20541;:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20522:50;;;20595:7;20587:28;;;::::0;;-1:-1:-1;;;20587:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20587:28:0;;;;;;;;;;;;;::::1;;20630:47;::::0;;-1:-1:-1;;;20630:47:0;;20660:4:::1;20630:47;::::0;::::1;::::0;20667:9:::1;20630:47:::0;;;;;;-1:-1:-1;;;;;20630:21:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;-1:-1:-1;20630:21:0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20382:402:0::1;::::0;-1:-1:-1;;;20382:402:0::1;;20710:62;-1:-1:-1::0;;;;;20710:30:0;::::1;20741:10;20761:4;20768:3:::0;20710:30:::1;:62::i;:::-;20830:16;::::0;;20844:1:::1;20830:16:::0;;;;;::::1;::::0;;;20804:23:::1;::::0;20830:16:::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20830:16:0::1;20804:42;;20869:3;20857:6;20864:1;20857:9;;;;;;;;;;;;;:15;;;::::0;::::1;20893:11;;:13;;;;;;;;;;;;;20917:20;20940:11;;20917:34;;20972:13;:25;20986:10;-1:-1:-1::0;;;;;20972:25:0::1;-1:-1:-1::0;;;;;20972:25:0::1;;;;;;;;;;;;21003:12;20972:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21027:13;:27;21041:12;-1:-1:-1::0;;;;;21027:27:0::1;-1:-1:-1::0;;;;;21027:27:0::1;;;;;;;;;;;;21060:12;21027:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21115:183;;;;;;;;21142:1;-1:-1:-1::0;;;;;21115:183:0::1;;;;;21159:8;-1:-1:-1::0;;;;;21115:183:0::1;;;;;21182:1;21115:183;;;;;;21198:1;21115:183;;;;;;21214:1;21115:183;;;;21230:1;21115:183;;;;21243:14;;21115:183;;;;;;;;;;;;;;;::::0;::::1;;;;21284:13;21115:183;;;;::::0;21094:4:::1;:18;21099:12;21094:18;;;;;;;;;;;:204;;;;;;;;;;;;;-1:-1:-1::0;;;;;21094:204:0::1;;;;;-1:-1:-1::0;;;;;21094:204:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;21094:204:0::1;;;;;-1:-1:-1::0;;;;;21094:204:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21094:204:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;21094:204:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21340:263:::1;::::0;;::::1;::::0;::::1;::::0;;21362:10:::1;21340:263:::0;;-1:-1:-1;21340:263:0::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;21340:263:0;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;21340:263:0;;;;;;;;;;-1:-1:-1;21340:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;21595:7;;21340:263;;;;;::::1;21595:7:::0;21340:263;;21595:7;21340:263;::::1;;::::0;::::1;::::0;;;-1:-1:-1;21340:263:0;;;;-1:-1:-1;;21316:21:0;;;:7:::1;:21;::::0;;;;;;;;:287;;;;-1:-1:-1;;;;;;21316:287:0;;::::1;-1:-1:-1::0;;;;;21316:287:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;21316:287:0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;21316:287:0::1;-1:-1:-1::0;;;21316:287:0::1;::::0;;::::1;;;-1:-1:-1::0;;;;21316:287:0::1;-1:-1:-1::0;;;21316:287:0;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;::::1;::::0;;;:21;;-1:-1:-1;21316:287:0::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;21316:287:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;21628:10:0::1;::::0;:14;;-1:-1:-1;21624:79:0::1;;21652:15;::::0;21690:10:::1;::::0;21645:56:::1;::::0;;-1:-1:-1;;;21645:56:0;;21678:10:::1;21645:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;21652:15:0;;::::1;::::0;21645:32:::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;21652:15:::1;::::0;21645:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;21624:79:0::1;21795:8;-1:-1:-1::0;;;;;21745:109:0::1;21781:12;-1:-1:-1::0;;;;;21745:109:0::1;21769:10;-1:-1:-1::0;;;;;21745:109:0::1;;21805:5;21812:12;21826:3;21831:7;;21840:13;21745:109;;;;-1:-1:-1::0;;;;;21745:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;21745:109:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;21745:109:0;;-1:-1:-1;;;;;;;;21745:109:0::1;4130:1:::0;4427:7;:22;21880:12;20063:1837;-1:-1:-1;;;;;;;;;20063:1837:0:o;5220:29::-;;;;:::o;5844:27::-;;;;;;;;;;;;28254:945;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;28410;;;:4:::1;:18;::::0;;;;;;;28463:7:::1;:21:::0;;;;;;28528:13;;-1:-1:-1;;;;;28528:13:0::1;28514:10;:27;28506:47;;;::::0;;-1:-1:-1;;;28506:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28506:47:0;;;;;;;;;;;;;::::1;;28573:10;-1:-1:-1::0;;;;;28573:30:0;::::1;;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;28607:19:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;28607:39:0;;::::1;:19:::0;::::1;:39;;28573:73;:112;;;;-1:-1:-1::0;28650:15:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;28650:35:0;;::::1;:15:::0;::::1;:35;;28573:112;28565:172;;;;-1:-1:-1::0;;;28565:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28756:26;::::0;::::1;::::0;-1:-1:-1;;;28756:26:0;::::1;;;:31:::0;28748:51:::1;;;::::0;;-1:-1:-1;;;28748:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28748:51:0;;;;;;;;;;;;;::::1;;28833:6;:10;;;28815:6;:15;;;:28;28807:49;;;::::0;;-1:-1:-1;;;28807:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28807:49:0;;;;;;;;;;;;;::::1;;28881:20:::0;;-1:-1:-1;;;;;28881:40:0;;::::1;:20:::0;::::1;:40;28877:104;;;28938:12;::::0;::::1;:31:::0;;-1:-1:-1;;;;;;28938:31:0::1;-1:-1:-1::0;;;;;28938:31:0;::::1;;::::0;;28877:104:::1;28991:39:::0;;-1:-1:-1;;;;;;28991:39:0::1;-1:-1:-1::0;;;;;28991:39:0;::::1;::::0;;::::1;::::0;;-1:-1:-1;29039:26:0;::::1;:30:::0;;-1:-1:-1;;;;;;;29039:30:0;;::::1;;-1:-1:-1::0;;;;29077:32:0::1;::::0;;29129:62:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;29183:7;;29129:62;;;;;;29183:7;29129:62;;29183:7;29129:62;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;29129:62:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;29129:62:0;;-1:-1:-1;;;;;29129:62:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;;;28254:945:0:o;5150:26::-;;;;:::o;5365:40::-;;;;:::o;33225:189::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;32652:7:::1;::::0;-1:-1:-1;;;;;32652:7:0::1;32638:10;:21;32630:42;;;::::0;;-1:-1:-1;;;32630:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32630:42:0;;;;;;;;;;;;;::::1;;33355:5:::2;;33334:11;33346:5;33334:18;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;33376:30;33393:5;33400;;33376:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;33376:30:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;33376:30:0;;-1:-1:-1;;;;;33376:30:0::2;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;33225:189:0:o;5513:25::-;;;;:::o;22267:580::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;22390;;;:4:::1;:18;::::0;;;;;;;22443:7:::1;:21:::0;;;;;;22507:13;;-1:-1:-1;;;;;22507:13:0::1;22493:10;:27;22485:47;;;::::0;;-1:-1:-1;;;22485:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22485:47:0;;;;;;;;;;;;;::::1;;22567:12;::::0;::::1;::::0;-1:-1:-1;;;;;22551:28:0;;::::1;22567:12:::0;::::1;22551:28;;22543:64;;;::::0;;-1:-1:-1;;;22543:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22626:13;::::0;::::1;::::0;-1:-1:-1;;;22626:13:0;::::1;;;:18:::0;22618:37:::1;;;::::0;;-1:-1:-1;;;22618:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22618:37:0;;;;;;;;;;;;;::::1;;22689:6;:10;;;22671:6;:15;;;:28;22663:49;;;::::0;;-1:-1:-1;;;22663:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22663:49:0;;;;;;;;;;;;;::::1;;22733:19;::::0;::::1;:34:::0;;-1:-1:-1;;;;;22733:34:0;::::1;-1:-1:-1::0;;;;;;22733:34:0;;::::1;::::0;::::1;::::0;;;22793:46:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;22267:580:0:o;10666:2082::-;10991:7;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;11019:10:::1;-1:-1:-1::0;;;;;11019:22:0;::::1;;::::0;::::1;::::0;:50:::1;;;11061:8;-1:-1:-1::0;;;;;11045:24:0::1;:12;-1:-1:-1::0;;;;;11045:24:0::1;;;11019:50;:74;;;;;11085:8;-1:-1:-1::0;;;;;11073:20:0::1;:8;-1:-1:-1::0;;;;;11073:20:0::1;;;11019:74;11011:126;;;;-1:-1:-1::0;;;11011:126:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:11;::::0;11180:95:::1;11200:17:::0;;::::1;11180:95;;;11245:18;11253:6;;11260:1;11253:9;;;;;;11245:18;11239:24:::0;-1:-1:-1;11219:3:0::1;;11180:95;;;-1:-1:-1::0;11291:9:0::1;:13:::0;11287:402:::1;;11336:4;::::0;-1:-1:-1;;;;;11336:4:0;;::::1;::::0;11363:13;::::1;::::0;::::1;:33:::0;::::1;;;;11393:3;11380:9;:16;11363:33;11355:57;;;::::0;;-1:-1:-1;;;11355:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11355:57:0;;;;;;;;;;;;;::::1;;11446:31;::::0;11428:12:::1;::::0;-1:-1:-1;;;;;11446:9:0;::::1;::::0;11463::::1;::::0;11428:12;11446:31;11428:12;11446:31;11463:9;11446;:31:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11427:50;;;11500:7;11492:28;;;::::0;;-1:-1:-1;;;11492:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11492:28:0;;;;;;;;;;;;;::::1;;11535:47;::::0;;-1:-1:-1;;;11535:47:0;;11565:4:::1;11535:47;::::0;::::1;::::0;11572:9:::1;11535:47:::0;;;;;;-1:-1:-1;;;;;11535:21:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;-1:-1:-1;11535:21:0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;11287:402:0::1;::::0;-1:-1:-1;;;11287:402:0::1;;11615:62;-1:-1:-1::0;;;;;11615:30:0;::::1;11646:10;11666:4;11673:3:::0;11615:30:::1;:62::i;:::-;11709:11;;:13;;;;;;;;;;;;;11733:20;11756:11;;11733:34;;11788:13;:25;11802:10;-1:-1:-1::0;;;;;11788:25:0::1;-1:-1:-1::0;;;;;11788:25:0::1;;;;;;;;;;;;11819:12;11788:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11843:13;:23;11857:8;-1:-1:-1::0;;;;;11843:23:0::1;-1:-1:-1::0;;;;;11843:23:0::1;;;;;;;;;;;;11872:12;11843:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11927:183;;;;;;;;11954:1;-1:-1:-1::0;;;;;11927:183:0::1;;;;;11971:8;-1:-1:-1::0;;;;;11927:183:0::1;;;;;11994:1;11927:183;;;;;;12010:1;11927:183;;;;;;12026:1;11927:183;;;;12042:1;11927:183;;;;12055:14;;11927:183;;;;;;;;;;;;;;;::::0;::::1;;;;12096:13;11927:183;;;;::::0;11906:4:::1;:18;11911:12;11906:18;;;;;;;;;;;:204;;;;;;;;;;;;;-1:-1:-1::0;;;;;11906:204:0::1;;;;;-1:-1:-1::0;;;;;11906:204:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11906:204:0::1;;;;;-1:-1:-1::0;;;;;11906:204:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;11906:204:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;11906:204:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12147:283:::1;::::0;;::::1;::::0;::::1;::::0;;12169:10:::1;12147:283:::0;;-1:-1:-1;;;;;12147:283:0;;::::1;;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;-1:-1:-1;12147:283:0;;;;-1:-1:-1;12147:283:0;;;;;;;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;12147:283:0;;;;12297:6;;12147:283;;;;;;::::1;::::0;12297:6;;12147:283;12297:6;12147:283;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12318:1;12147:283;;;;12334:6;;:13;;12147:283;;;;12362:1;12147:283;;;;12378:3;12147:283;;;;12396:11;12147:283;;;;12422:7;12147:283;;::::0;12123:7:::1;:21;12131:12;12123:21;;;;;;;;;;;:307;;;;;;;;;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;-1:-1:-1::0;;;;;12123:307:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12123:307:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;12455:10:0::1;::::0;:14;;-1:-1:-1;12451:79:0::1;;12479:15;::::0;12517:10:::1;::::0;12472:56:::1;::::0;;-1:-1:-1;;;12472:56:0;;12505:10:::1;12472:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;12479:15:0;;::::1;::::0;12472:32:::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;12479:15:::1;::::0;12472:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;12451:79:0::1;12622:8;-1:-1:-1::0;;;;;12572:130:0::1;12612:8;-1:-1:-1::0;;;;;12572:130:0::1;12586:10;-1:-1:-1::0;;;;;12572:130:0::1;;12598:12;12632:5;12639:6;;12647:12;12661:3;12666:11;12679:7;12688:13;12572:130;;;;-1:-1:-1::0;;;;;12572:130:0::1;;;;;;-1:-1:-1::0;;;;;12572:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;12572:130:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;-1:-1:-1;12572:130:0;;;;;;;::::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4130:1:::0;4427:7;:22;12728:12;10666:2082;-1:-1:-1;;;;;;;;;;;10666:2082:0:o;5058:19::-;;;-1:-1:-1;;;;;5058:19:0;;:::o;25327:451::-;4174:1;4320:7;;:19;;4312:63;;;;;-1:-1:-1;;;4312:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4312:63:0;;;;;;;;;;;;;;;4174:1;4386:7;:18;;;25445:21;;;:7:::1;:21;::::0;;;;25510:13;;-1:-1:-1;;;;;25510:13:0::1;25496:10;:27;::::0;:60:::1;;-1:-1:-1::0;25541:15:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;25541:15:0::1;25527:10;:29;25496:60;25488:79;;;::::0;;-1:-1:-1;;;25488:79:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25488:79:0;;;;;;;;;;;;;::::1;;25587:16;::::0;::::1;::::0;-1:-1:-1;;;25587:16:0;::::1;;;25607:1;25587:21;25579:44;;;::::0;;-1:-1:-1;;;25579:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25579:44:0;;;;;;;;;;;;;::::1;;25660:6;:10;;;25642:6;:15;;;:28;25634:49;;;::::0;;-1:-1:-1;;;25634:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25634:49:0;;;;;;;;;;;;;::::1;;25693:13;::::0;::::1;:17:::0;;-1:-1:-1;;;;25693:17:0::1;-1:-1:-1::0;;;25693:17:0::1;::::0;;25731:39:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;25736:10:::1;::::0;25731:39:::1;::::0;25748:12;;25762:7;;;;25731:39;;;25762:7;;;;25731:39;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;25731:39:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;25731:39:0;;-1:-1:-1;;;;;25731:39:0::1;-1:-1:-1::0;;4130:1:0;4427:7;:22;-1:-1:-1;;25327:451:0:o;32026:249::-;32096:13;32209:21;;;:7;:21;;;;;;;;:27;;;;32238:28;;;;32201:66;;;;;;;;;;;;;;;;;32111:23;;-1:-1:-1;;;;;32209:27:0;;;;32238:28;;;;32201:66;;;32238:28;32201:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32026:249;;;:::o;4967:30::-;;;-1:-1:-1;;;;;4967:30:0;;:::o;3598:148::-;3656:7;3689:1;3684;:6;;3676:15;;;;;;-1:-1:-1;3714:5:0;;;3598:148::o;2471:179::-;2582:59;;;-1:-1:-1;;;;;2582:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2582:59:0;-1:-1:-1;;;2582:59:0;;;2555:87;;2575:5;;2555:19;:87::i;:::-;2471:179;;;:::o;3438:148::-;3496:7;3528:5;;;3552:6;;;;3544:15;;;;;;3577:1;3438:148;-1:-1:-1;;;3438:148:0:o;3758:147::-;3816:7;3848:1;3844;:5;3836:14;;;;;;3861:9;3877:1;3873;:5;;;;;;;3758:147;-1:-1:-1;;;;3758:147:0:o;2662:207::-;2791:69;;;-1:-1:-1;;;;;2791:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2791:69:0;-1:-1:-1;;;2791:69:0;;;2764:97;;2784:5;;2764:19;:97::i;:::-;2662:207;;;;:::o;2881:479::-;2970:27;2978:5;-1:-1:-1;;;;;2970:25:0;;:27::i;:::-;2962:71;;;;;-1:-1:-1;;;2962:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:12;3059:23;3094:5;-1:-1:-1;;;;;3086:19:0;3106:4;3086:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3086:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3044:67;;;;3130:7;3122:52;;;;;-1:-1:-1;;;3122:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3191:17;;:21;3187:166;;3275:10;3264:30;;;;;;;;;;;;;;;-1:-1:-1;3264:30:0;3256:85;;;;-1:-1:-1;;;3256:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:174;2210:20;2249:8;;;2091:174::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://d1435383a3fd57fa980e762d36c6b2766d0185dace2deb40aadf0e4acb71fc08

Block Transaction Difficulty 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
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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