ETH Price: $2,531.51 (+3.70%)

Contract

0xe82997fCef23255e483DeEAA2bc89C39440831F4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Accept Ownership183634292023-10-16 14:07:23317 days ago1697465243IN
0xe82997fC...9440831F4
0 ETH0.0013675647.2175283
Transfer Ownersh...183634282023-10-16 14:07:11317 days ago1697465231IN
0xe82997fC...9440831F4
0 ETH0.0011816744.52279553
Transfer Ownersh...183634172023-10-16 14:04:59317 days ago1697465099IN
0xe82997fC...9440831F4
0 ETH0.0013055249.18903179
Transfer Ownersh...183633952023-10-16 14:00:23317 days ago1697464823IN
0xe82997fC...9440831F4
0 ETH0.0023316150.20600461
0x60806040170870342023-04-20 10:10:47496 days ago1681985447IN
 Create: AssetLocking
0 ETH0.13937845.91115627

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AssetLocking

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-20
*/

// File: contracts/interfaces/IERC721Receiver.sol



pragma solidity >= 0.8.0 <0.9.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
// File: contracts/standards/ERC721Holder.sol


pragma solidity ^0.8.0;


contract ERC721Holder is IERC721Receiver {
    function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}
// File: contracts/interfaces/IERC20.sol



pragma solidity >= 0.8.0 <0.9.0;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
// File: contracts/interfaces/IERC165.sol



pragma solidity >= 0.8.0 <0.9.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: contracts/standards/ERC165.sol



pragma solidity >=0.8.0 <0.9.0;


abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
// File: contracts/interfaces/IERC1155Receiver.sol



pragma solidity >= 0.8.0 <0.9.0;



interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}
// File: contracts/standards/ERC1155Receiver.sol


pragma solidity ^0.8.0;



abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}
// File: contracts/standards/ERC1155Holder.sol



pragma solidity ^0.8.0;


contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}
// File: contracts/interfaces/IERC721.sol



pragma solidity >= 0.8.0 <0.9.0;


interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: contracts/interfaces/IERC1155.sol



pragma solidity >= 0.8.0 <0.9.0;


interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}
// File: contracts/utils/TokenAccessControl.sol


pragma solidity >=0.7.0 <0.9.0;

contract TokenAccessControl {
    bool public paused = false;
    address public owner;
    address public newContractOwner;
    mapping(address => bool) public authorizedContracts;

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

    constructor() {
        owner = msg.sender;
    }

    modifier ifNotPaused() {
        require(!paused, "contract is paused");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "caller is not an owner");
        _;
    }

    modifier onlyAuthorizedUser() {
        require(
            authorizedContracts[msg.sender],
            "caller is not an authorized user"
        );
        _;
    }

    modifier onlyOwnerOrAuthorizedUser() {
        require(
            authorizedContracts[msg.sender] || msg.sender == owner,
            "caller is not an authorized user or an owner"
        );
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        newContractOwner = address(0);
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != address(0));
        newContractOwner = _newOwner;
    }

    function acceptOwnership() public ifNotPaused {
        require(msg.sender == newContractOwner);
        emit OwnershipTransferred(owner, newContractOwner);
        owner = newContractOwner;
        newContractOwner = address(0);
    }

    function setAuthorizedUser(
        address _operator,
        bool _approve
    ) public onlyOwner {
        if (_approve) {
            authorizedContracts[_operator] = true;
        } else {
            delete authorizedContracts[_operator];
        }
    }

    function setPause(bool _paused) public onlyOwner {
        paused = _paused;
        if (paused) {
            emit Pause();
        }
    }
}

// File: contracts/asset_locking.sol


pragma solidity >=0.7.0 <0.9.0;







contract AssetLocking is TokenAccessControl, ERC1155Holder, ERC721Holder {

    uint256 lockingPeriod = 86400;

    mapping(address => mapping(address => mapping(uint256 => uint256))) private _lockedAssets;
    mapping(address => uint256) private _lockedAssetsCount;
    mapping(address => uint256) private _lockedUntil;
    mapping(address => bool) private _isErc721;

    bytes4 constant private IERC165_ID = 0x01ffc9a7;
    bytes4 constant private IERC1155_ID = 0xd9b67a26;
    bytes4 constant private IERC721_ID = 0x80ac58cd;

    event LockAsset(address indexed owner, address contractAddress, uint256 tokenId);
    event LockBatchAssets(address indexed owner, address contractAddress, uint256[] tokenIds, uint256[] amounts);
    event RelockAsset(address indexed owner);
    event UnlockAsset(address indexed owner, address contractAddress, uint256 tokenId);
    event UnlockBatchAssets(address indexed owner, address contractAddress, uint256[] tokenIds, uint256[] amounts);


    function setLockingPeriod(uint256 _lockingPeriod) onlyOwner external returns (bool) {
        lockingPeriod = _lockingPeriod;
        return true;
    }

    function lock(address contractAddress, uint256 tokenId) external returns (uint256) {
        uint16 contractType = determineContractType(contractAddress);
        if(contractType==1155){
            IERC1155(contractAddress).safeTransferFrom(msg.sender, address(this), tokenId, 1, "");
        }
        else if(contractType==721){
            IERC721(contractAddress).transferFrom(msg.sender, address(this), tokenId);
            _isErc721[contractAddress] = true;
        }
        else{
            revert("AssetLocking: Not valid NFT standard");
        }

        _lockedAssets[msg.sender][contractAddress][tokenId]++;
        _lockedAssetsCount[msg.sender]++;
        _lockedUntil[msg.sender] = block.timestamp + lockingPeriod;

        // return new timestamp the asset is locked until
        emit LockAsset(msg.sender, contractAddress, tokenId);
        return _lockedUntil[msg.sender];
    }

    function lockBatch(address contractAddress, uint256[] memory tokenIds, uint256[] memory amounts) external returns (uint256) {
        uint16 contractType = determineContractType(contractAddress);
        if(contractType==1155){
            IERC1155(contractAddress).safeBatchTransferFrom(msg.sender, address(this), tokenIds, amounts, "");
        }
        else{
            revert("AssetLocking: Not valid NFT standard");
        }

        for (uint256 j = 0; j < amounts.length ; j++) {
            _lockedAssets[msg.sender][contractAddress][tokenIds[j]] += amounts[j];
            _lockedAssetsCount[msg.sender] += amounts[j];
        }
        _lockedUntil[msg.sender] = block.timestamp + lockingPeriod;

        // return new timestamp the asset is locked until
        emit LockBatchAssets(msg.sender,contractAddress,tokenIds,amounts);
        return _lockedUntil[msg.sender];
    }

    function relock() external returns (uint256) {
        _lockedUntil[msg.sender] = block.timestamp + lockingPeriod;

        // return new timestamp the asset is locked until
        emit RelockAsset(msg.sender);
        return _lockedUntil[msg.sender];
    }

    function unlock(address contractAddress, uint256 tokenId) external returns (uint256) {
        require(_lockedAssets[msg.sender][contractAddress][tokenId] > 0, "AssetLocking: Insufficient assets locked");
        require(_lockedUntil[msg.sender] < block.timestamp, "AssetLocking: Assets are still locked");

        _lockedAssets[msg.sender][contractAddress][tokenId]--;
        _lockedAssetsCount[msg.sender]--;

        if (_isErc721[contractAddress]) {
            IERC721(contractAddress).transferFrom(address(this), msg.sender, tokenId);
        } else {
            IERC1155(contractAddress).safeTransferFrom(address(this), msg.sender, tokenId, 1, "");
        }

        // return remaining locked count
        emit UnlockAsset(msg.sender,contractAddress,tokenId);
        return _lockedAssets[msg.sender][contractAddress][tokenId];
    }

    function unlockBatch(address contractAddress, uint256[] memory tokenIds, uint256[] memory amounts) external returns (uint256) {
        require(tokenIds.length==amounts.length, "AssetLocking: Length of tokenIds and amounts does not match");
        require(_lockedUntil[msg.sender] < block.timestamp, "AssetLocking: Assets are still locked");
        require(_isErc721[contractAddress] == false, "AssetLocking: Batch transfers are only supported for ERC1155");

        for (uint256 j = 0; j < amounts.length ; j++) {
            require(_lockedAssets[msg.sender][contractAddress][tokenIds[j]] >= amounts[j], "AssetLocking: Insufficient assets locked");

            _lockedAssets[msg.sender][contractAddress][tokenIds[j]] -= amounts[j];
            _lockedAssetsCount[msg.sender] -= amounts[j];
        }

        IERC1155(contractAddress).safeBatchTransferFrom(address(this), msg.sender, tokenIds, amounts, "");

        // return remaining locked total count
        emit UnlockBatchAssets(msg.sender,contractAddress,tokenIds,amounts);
        return _lockedAssetsCount[owner];
    }

    function checkCount(address owner, address contractAddress, uint256 tokenId) external view returns (uint256) {
        return _lockedAssets[owner][contractAddress][tokenId];
    }

    function checkTotalCount(address owner) external view returns (uint256) {
        return _lockedAssetsCount[owner];
    }

    function checkUntil(address owner) external view returns (uint256) {
        return _lockedUntil[owner];
    }

    function determineContractType(address contractAddress) internal view returns(uint16){
        (bool isSuccess, bytes memory response) = contractAddress.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)",IERC1155_ID));
        if(isSuccess){
            if(abi.decode(response, (bool))) return 1155;
            (isSuccess,response) = contractAddress.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)",IERC721_ID));
            if(isSuccess && abi.decode(response, (bool))) return 721;
        }
        (isSuccess,) = contractAddress.staticcall(abi.encodeWithSignature("balanceOf(address,uint256)",msg.sender, 1));
        if(isSuccess) return 1155;
        (isSuccess,) = contractAddress.staticcall(abi.encodeWithSignature("balanceOf(address)",msg.sender));
        if(isSuccess){
            (isSuccess,) = contractAddress.staticcall(abi.encodeWithSignature("decimals()"));
            if(isSuccess) return 20;
            return 721;
        }
        return 0;
    } 

}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"LockAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"LockBatchAssets","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"RelockAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"UnlockAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"UnlockBatchAssets","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"checkTotalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"checkUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"lockBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newContractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockingPeriod","type":"uint256"}],"name":"setLockingPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"unlockBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

608060405260008060006101000a81548160ff0219169083151502179055506201518060035534801561003157600080fd5b5033600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061354a806100826000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806378ba58d9116100b8578063bc197c811161007c578063bc197c81146103b1578063bedb86fb146103e1578063c53b573d146103fd578063d5b9221b1461041b578063f23a6e611461044b578063f2fde38b1461047b57610142565b806378ba58d91461030d57806379ba50971461033d5780637eee288d146103475780638da5cb5b14610377578063a249225e1461039557610142565b806326b321d11161010a57806326b321d114610225578063282d3fdf146102555780635bd09acd146102855780635c975abb146102b557806361f554bd146102d3578063715018a61461030357610142565b806301ffc9a71461014757806308b98211146101775780630de959cc146101a7578063150b7a02146101c557806322f44f0f146101f5575b600080fd5b610161600480360381019061015c91906124cf565b610497565b60405161016e9190612517565b60405180910390f35b610191600480360381019061018c919061271f565b610511565b60405161019e91906127b9565b60405180910390f35b6101af610a04565b6040516101bc91906127e3565b60405180910390f35b6101df60048036038101906101da91906128b3565b610a2a565b6040516101ec9190612945565b60405180910390f35b61020f600480360381019061020a9190612960565b610a3e565b60405161021c91906127b9565b60405180910390f35b61023f600480360381019061023a91906129b3565b610ad7565b60405161024c9190612517565b60405180910390f35b61026f600480360381019061026a91906129e0565b610b78565b60405161027c91906127b9565b60405180910390f35b61029f600480360381019061029a919061271f565b610f01565b6040516102ac91906127b9565b60405180910390f35b6102bd611222565b6040516102ca9190612517565b60405180910390f35b6102ed60048036038101906102e89190612a20565b611233565b6040516102fa91906127b9565b60405180910390f35b61030b61127c565b005b61032760048036038101906103229190612a20565b611350565b60405161033491906127b9565b60405180910390f35b610345611399565b005b610361600480360381019061035c91906129e0565b611586565b60405161036e91906127b9565b60405180910390f35b61037f6119ef565b60405161038c91906127e3565b60405180910390f35b6103af60048036038101906103aa9190612a79565b611a15565b005b6103cb60048036038101906103c69190612ab9565b611b5c565b6040516103d89190612945565b60405180910390f35b6103fb60048036038101906103f69190612b88565b611b71565b005b610405611c5d565b60405161041291906127b9565b60405180910390f35b61043560048036038101906104309190612a20565b611d38565b6040516104429190612517565b60405180910390f35b61046560048036038101906104609190612bb5565b611d58565b6040516104729190612945565b60405180910390f35b61049560048036038101906104909190612a20565b611d6d565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050a575061050982611e7a565b5b9050919050565b60008151835114610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612ccf565b60405180910390fd5b42600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf90612d61565b60405180910390fd5b60001515600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290612df3565b60405180910390fd5b60005b82518110156108d65782818151811061068a57610689612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086848151811061072357610722612e13565b5b6020026020010151815260200190815260200160002054101561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612eb4565b60405180910390fd5b82818151811061078e5761078d612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086848151811061082757610826612e13565b5b60200260200101518152602001908152602001600020600082825461084c9190612f03565b9250508190555082818151811061086657610865612e13565b5b6020026020010151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108bc9190612f03565b9250508190555080806108ce90612f37565b91505061066e565b508373ffffffffffffffffffffffffffffffffffffffff16632eb2c2d6303386866040518563ffffffff1660e01b81526004016109169493929190613074565b600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5f11ec36fc8b1a9dcbe9018c026075c1eb72774097ad7bc7a4cb26cba0dedcd9858585604051610992939291906130da565b60405180910390a2600560008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063150b7a0260e01b9050949350505050565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490509392505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061316b565b60405180910390fd5b8160038190555060019050919050565b600080610b8484611ee4565b90506104838161ffff1603610c0a578373ffffffffffffffffffffffffffffffffffffffff1663f242432a33308660016040518563ffffffff1660e01b8152600401610bd394939291906131d0565b600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b50505050610d1f565b6102d18161ffff1603610ce3578373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610c5493929190613228565b600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d1e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d15906132d1565b60405180910390fd5b5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000815480929190610dbd90612f37565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1290612f37565b919050555060035442610e2591906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fad398dcf0c58711bc43a86b47cab6a6acab501cc85a6f975a09bbff31e1ce0b38585604051610eb0929190613325565b60405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505092915050565b600080610f0d85611ee4565b90506104838161ffff1603610f92578473ffffffffffffffffffffffffffffffffffffffff16632eb2c2d6333087876040518563ffffffff1660e01b8152600401610f5b9493929190613074565b600060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b50505050610fcd565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906132d1565b60405180910390fd5b60005b835181101561113457838181518110610fec57610feb612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087848151811061108557611084612e13565b5b6020026020010151815260200190815260200160002060008282546110aa91906132f1565b925050819055508381815181106110c4576110c3612e13565b5b6020026020010151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461111a91906132f1565b92505081905550808061112c90612f37565b915050610fd0565b506003544261114391906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fa5301c1c2b0c718bd3893bbf1b0795b6394416a3ffad88397d7454263f906b6d8686866040516111d0939291906130da565b60405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150509392505050565b60008054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461130c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113039061316b565b60405180910390fd5b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900460ff16156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061339a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461144157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205411611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90612eb4565b60405180910390fd5b42600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90612d61565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000815480929190611776906133ba565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906117cb906133ba565b9190505550600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611896578273ffffffffffffffffffffffffffffffffffffffff166323b872dd3033856040518463ffffffff1660e01b815260040161185f93929190613228565b600060405180830381600087803b15801561187957600080fd5b505af115801561188d573d6000803e3d6000fd5b50505050611909565b8273ffffffffffffffffffffffffffffffffffffffff1663f242432a30338560016040518563ffffffff1660e01b81526004016118d694939291906131d0565b600060405180830381600087803b1580156118f057600080fd5b505af1158015611904573d6000803e3d6000fd5b505050505b3373ffffffffffffffffffffffffffffffffffffffff167f17506b27d0ce5b421da107d8213f84cd3a8a4c6728c616483dde3054bad54c8d8484604051611951929190613325565b60405180910390a2600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9061316b565b60405180910390fd5b8015611b08576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b58565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600063bc197c8160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061316b565b60405180910390fd5b806000806101000a81548160ff02191690831515021790555060008054906101000a900460ff1615611c5a577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b600060035442611c6d91906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f73068aba7476b3fcc0ef014f049a4c4236fc30cea2ea262788ce9e2dee9e213760405160405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60026020528060005260406000206000915054906101000a900460ff1681565b600063f23a6e6160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df49061316b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e3657600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9b67a2660e01b604051602401611f189190612945565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611fa29190613454565b600060405180830381855afa9150503d8060008114611fdd576040519150601f19603f3d011682016040523d82523d6000602084013e611fe2565b606091505b5091509150811561214357808060200190518101906120019190613480565b15612012576104839250505061245e565b8373ffffffffffffffffffffffffffffffffffffffff166380ac58cd60e01b6040516024016120419190612945565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120cb9190613454565b600060405180830381855afa9150503d8060008114612106576040519150601f19603f3d011682016040523d82523d6000602084013e61210b565b606091505b5080925081935050508180156121315750808060200190518101906121309190613480565b5b15612142576102d19250505061245e565b5b8373ffffffffffffffffffffffffffffffffffffffff1633600160405160240161216e9291906134eb565b6040516020818303038152906040527efdd58e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516121f79190613454565b600060405180830381855afa9150503d8060008114612232576040519150601f19603f3d011682016040523d82523d6000602084013e612237565b606091505b505080925050811561224f576104839250505061245e565b8373ffffffffffffffffffffffffffffffffffffffff163360405160240161227791906127e3565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123019190613454565b600060405180830381855afa9150503d806000811461233c576040519150601f19603f3d011682016040523d82523d6000602084013e612341565b606091505b5050809250508115612457578373ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123f49190613454565b600060405180830381855afa9150503d806000811461242f576040519150601f19603f3d011682016040523d82523d6000602084013e612434565b606091505b505080925050811561244b5760149250505061245e565b6102d19250505061245e565b6000925050505b919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124ac81612477565b81146124b757600080fd5b50565b6000813590506124c9816124a3565b92915050565b6000602082840312156124e5576124e461246d565b5b60006124f3848285016124ba565b91505092915050565b60008115159050919050565b612511816124fc565b82525050565b600060208201905061252c6000830184612508565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061255d82612532565b9050919050565b61256d81612552565b811461257857600080fd5b50565b60008135905061258a81612564565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125de82612595565b810181811067ffffffffffffffff821117156125fd576125fc6125a6565b5b80604052505050565b6000612610612463565b905061261c82826125d5565b919050565b600067ffffffffffffffff82111561263c5761263b6125a6565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61266581612652565b811461267057600080fd5b50565b6000813590506126828161265c565b92915050565b600061269b61269684612621565b612606565b905080838252602082019050602084028301858111156126be576126bd61264d565b5b835b818110156126e757806126d38882612673565b8452602084019350506020810190506126c0565b5050509392505050565b600082601f83011261270657612705612590565b5b8135612716848260208601612688565b91505092915050565b6000806000606084860312156127385761273761246d565b5b60006127468682870161257b565b935050602084013567ffffffffffffffff81111561276757612766612472565b5b612773868287016126f1565b925050604084013567ffffffffffffffff81111561279457612793612472565b5b6127a0868287016126f1565b9150509250925092565b6127b381612652565b82525050565b60006020820190506127ce60008301846127aa565b92915050565b6127dd81612552565b82525050565b60006020820190506127f860008301846127d4565b92915050565b600080fd5b600067ffffffffffffffff82111561281e5761281d6125a6565b5b61282782612595565b9050602081019050919050565b82818337600083830152505050565b600061285661285184612803565b612606565b905082815260208101848484011115612872576128716127fe565b5b61287d848285612834565b509392505050565b600082601f83011261289a57612899612590565b5b81356128aa848260208601612843565b91505092915050565b600080600080608085870312156128cd576128cc61246d565b5b60006128db8782880161257b565b94505060206128ec8782880161257b565b93505060406128fd87828801612673565b925050606085013567ffffffffffffffff81111561291e5761291d612472565b5b61292a87828801612885565b91505092959194509250565b61293f81612477565b82525050565b600060208201905061295a6000830184612936565b92915050565b6000806000606084860312156129795761297861246d565b5b60006129878682870161257b565b93505060206129988682870161257b565b92505060406129a986828701612673565b9150509250925092565b6000602082840312156129c9576129c861246d565b5b60006129d784828501612673565b91505092915050565b600080604083850312156129f7576129f661246d565b5b6000612a058582860161257b565b9250506020612a1685828601612673565b9150509250929050565b600060208284031215612a3657612a3561246d565b5b6000612a448482850161257b565b91505092915050565b612a56816124fc565b8114612a6157600080fd5b50565b600081359050612a7381612a4d565b92915050565b60008060408385031215612a9057612a8f61246d565b5b6000612a9e8582860161257b565b9250506020612aaf85828601612a64565b9150509250929050565b600080600080600060a08688031215612ad557612ad461246d565b5b6000612ae38882890161257b565b9550506020612af48882890161257b565b945050604086013567ffffffffffffffff811115612b1557612b14612472565b5b612b21888289016126f1565b935050606086013567ffffffffffffffff811115612b4257612b41612472565b5b612b4e888289016126f1565b925050608086013567ffffffffffffffff811115612b6f57612b6e612472565b5b612b7b88828901612885565b9150509295509295909350565b600060208284031215612b9e57612b9d61246d565b5b6000612bac84828501612a64565b91505092915050565b600080600080600060a08688031215612bd157612bd061246d565b5b6000612bdf8882890161257b565b9550506020612bf08882890161257b565b9450506040612c0188828901612673565b9350506060612c1288828901612673565b925050608086013567ffffffffffffffff811115612c3357612c32612472565b5b612c3f88828901612885565b9150509295509295909350565b600082825260208201905092915050565b7f41737365744c6f636b696e673a204c656e677468206f6620746f6b656e49647360008201527f20616e6420616d6f756e747320646f6573206e6f74206d617463680000000000602082015250565b6000612cb9603b83612c4c565b9150612cc482612c5d565b604082019050919050565b60006020820190508181036000830152612ce881612cac565b9050919050565b7f41737365744c6f636b696e673a2041737365747320617265207374696c6c206c60008201527f6f636b6564000000000000000000000000000000000000000000000000000000602082015250565b6000612d4b602583612c4c565b9150612d5682612cef565b604082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f41737365744c6f636b696e673a204261746368207472616e736665727320617260008201527f65206f6e6c7920737570706f7274656420666f72204552433131353500000000602082015250565b6000612ddd603c83612c4c565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f41737365744c6f636b696e673a20496e73756666696369656e7420617373657460008201527f73206c6f636b6564000000000000000000000000000000000000000000000000602082015250565b6000612e9e602883612c4c565b9150612ea982612e42565b604082019050919050565b60006020820190508181036000830152612ecd81612e91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f0e82612652565b9150612f1983612652565b9250828203905081811115612f3157612f30612ed4565b5b92915050565b6000612f4282612652565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f7457612f73612ed4565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612fb481612652565b82525050565b6000612fc68383612fab565b60208301905092915050565b6000602082019050919050565b6000612fea82612f7f565b612ff48185612f8a565b9350612fff83612f9b565b8060005b838110156130305781516130178882612fba565b975061302283612fd2565b925050600181019050613003565b5085935050505092915050565b600082825260208201905092915050565b50565b600061305e60008361303d565b91506130698261304e565b600082019050919050565b600060a08201905061308960008301876127d4565b61309660208301866127d4565b81810360408301526130a88185612fdf565b905081810360608301526130bc8184612fdf565b905081810360808301526130cf81613051565b905095945050505050565b60006060820190506130ef60008301866127d4565b81810360208301526131018185612fdf565b905081810360408301526131158184612fdf565b9050949350505050565b7f63616c6c6572206973206e6f7420616e206f776e657200000000000000000000600082015250565b6000613155601683612c4c565b91506131608261311f565b602082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b6000819050919050565b6000819050919050565b60006131ba6131b56131b08461318b565b613195565b612652565b9050919050565b6131ca8161319f565b82525050565b600060a0820190506131e560008301876127d4565b6131f260208301866127d4565b6131ff60408301856127aa565b61320c60608301846131c1565b818103608083015261321d81613051565b905095945050505050565b600060608201905061323d60008301866127d4565b61324a60208301856127d4565b61325760408301846127aa565b949350505050565b7f41737365744c6f636b696e673a204e6f742076616c6964204e4654207374616e60008201527f6461726400000000000000000000000000000000000000000000000000000000602082015250565b60006132bb602483612c4c565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b60006132fc82612652565b915061330783612652565b925082820190508082111561331f5761331e612ed4565b5b92915050565b600060408201905061333a60008301856127d4565b61334760208301846127aa565b9392505050565b7f636f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000613384601283612c4c565b915061338f8261334e565b602082019050919050565b600060208201905081810360008301526133b381613377565b9050919050565b60006133c582612652565b9150600082036133d8576133d7612ed4565b5b600182039050919050565b600081519050919050565b600081905092915050565b60005b838110156134175780820151818401526020810190506133fc565b60008484015250505050565b600061342e826133e3565b61343881856133ee565b93506134488185602086016133f9565b80840191505092915050565b60006134608284613423565b915081905092915050565b60008151905061347a81612a4d565b92915050565b6000602082840312156134965761349561246d565b5b60006134a48482850161346b565b91505092915050565b600060ff82169050919050565b60006134d56134d06134cb8461318b565b613195565b6134ad565b9050919050565b6134e5816134ba565b82525050565b600060408201905061350060008301856127d4565b61350d60208301846134dc565b939250505056fea2646970667358221220f23e5fae990e22f6dc852b9dbe22a565b80ec49614d338eb81089a125c8daaeb64736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806378ba58d9116100b8578063bc197c811161007c578063bc197c81146103b1578063bedb86fb146103e1578063c53b573d146103fd578063d5b9221b1461041b578063f23a6e611461044b578063f2fde38b1461047b57610142565b806378ba58d91461030d57806379ba50971461033d5780637eee288d146103475780638da5cb5b14610377578063a249225e1461039557610142565b806326b321d11161010a57806326b321d114610225578063282d3fdf146102555780635bd09acd146102855780635c975abb146102b557806361f554bd146102d3578063715018a61461030357610142565b806301ffc9a71461014757806308b98211146101775780630de959cc146101a7578063150b7a02146101c557806322f44f0f146101f5575b600080fd5b610161600480360381019061015c91906124cf565b610497565b60405161016e9190612517565b60405180910390f35b610191600480360381019061018c919061271f565b610511565b60405161019e91906127b9565b60405180910390f35b6101af610a04565b6040516101bc91906127e3565b60405180910390f35b6101df60048036038101906101da91906128b3565b610a2a565b6040516101ec9190612945565b60405180910390f35b61020f600480360381019061020a9190612960565b610a3e565b60405161021c91906127b9565b60405180910390f35b61023f600480360381019061023a91906129b3565b610ad7565b60405161024c9190612517565b60405180910390f35b61026f600480360381019061026a91906129e0565b610b78565b60405161027c91906127b9565b60405180910390f35b61029f600480360381019061029a919061271f565b610f01565b6040516102ac91906127b9565b60405180910390f35b6102bd611222565b6040516102ca9190612517565b60405180910390f35b6102ed60048036038101906102e89190612a20565b611233565b6040516102fa91906127b9565b60405180910390f35b61030b61127c565b005b61032760048036038101906103229190612a20565b611350565b60405161033491906127b9565b60405180910390f35b610345611399565b005b610361600480360381019061035c91906129e0565b611586565b60405161036e91906127b9565b60405180910390f35b61037f6119ef565b60405161038c91906127e3565b60405180910390f35b6103af60048036038101906103aa9190612a79565b611a15565b005b6103cb60048036038101906103c69190612ab9565b611b5c565b6040516103d89190612945565b60405180910390f35b6103fb60048036038101906103f69190612b88565b611b71565b005b610405611c5d565b60405161041291906127b9565b60405180910390f35b61043560048036038101906104309190612a20565b611d38565b6040516104429190612517565b60405180910390f35b61046560048036038101906104609190612bb5565b611d58565b6040516104729190612945565b60405180910390f35b61049560048036038101906104909190612a20565b611d6d565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050a575061050982611e7a565b5b9050919050565b60008151835114610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612ccf565b60405180910390fd5b42600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf90612d61565b60405180910390fd5b60001515600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290612df3565b60405180910390fd5b60005b82518110156108d65782818151811061068a57610689612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086848151811061072357610722612e13565b5b6020026020010151815260200190815260200160002054101561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612eb4565b60405180910390fd5b82818151811061078e5761078d612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086848151811061082757610826612e13565b5b60200260200101518152602001908152602001600020600082825461084c9190612f03565b9250508190555082818151811061086657610865612e13565b5b6020026020010151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108bc9190612f03565b9250508190555080806108ce90612f37565b91505061066e565b508373ffffffffffffffffffffffffffffffffffffffff16632eb2c2d6303386866040518563ffffffff1660e01b81526004016109169493929190613074565b600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f5f11ec36fc8b1a9dcbe9018c026075c1eb72774097ad7bc7a4cb26cba0dedcd9858585604051610992939291906130da565b60405180910390a2600560008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063150b7a0260e01b9050949350505050565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205490509392505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061316b565b60405180910390fd5b8160038190555060019050919050565b600080610b8484611ee4565b90506104838161ffff1603610c0a578373ffffffffffffffffffffffffffffffffffffffff1663f242432a33308660016040518563ffffffff1660e01b8152600401610bd394939291906131d0565b600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b50505050610d1f565b6102d18161ffff1603610ce3578373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610c5493929190613228565b600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d1e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d15906132d1565b60405180910390fd5b5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206000815480929190610dbd90612f37565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610e1290612f37565b919050555060035442610e2591906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fad398dcf0c58711bc43a86b47cab6a6acab501cc85a6f975a09bbff31e1ce0b38585604051610eb0929190613325565b60405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505092915050565b600080610f0d85611ee4565b90506104838161ffff1603610f92578473ffffffffffffffffffffffffffffffffffffffff16632eb2c2d6333087876040518563ffffffff1660e01b8152600401610f5b9493929190613074565b600060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b50505050610fcd565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906132d1565b60405180910390fd5b60005b835181101561113457838181518110610fec57610feb612e13565b5b6020026020010151600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087848151811061108557611084612e13565b5b6020026020010151815260200190815260200160002060008282546110aa91906132f1565b925050819055508381815181106110c4576110c3612e13565b5b6020026020010151600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461111a91906132f1565b92505081905550808061112c90612f37565b915050610fd0565b506003544261114391906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fa5301c1c2b0c718bd3893bbf1b0795b6394416a3ffad88397d7454263f906b6d8686866040516111d0939291906130da565b60405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150509392505050565b60008054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461130c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113039061316b565b60405180910390fd5b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900460ff16156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de9061339a565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461144157600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205411611657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164e90612eb4565b60405180910390fd5b42600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90612d61565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000815480929190611776906133ba565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906117cb906133ba565b9190505550600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611896578273ffffffffffffffffffffffffffffffffffffffff166323b872dd3033856040518463ffffffff1660e01b815260040161185f93929190613228565b600060405180830381600087803b15801561187957600080fd5b505af115801561188d573d6000803e3d6000fd5b50505050611909565b8273ffffffffffffffffffffffffffffffffffffffff1663f242432a30338560016040518563ffffffff1660e01b81526004016118d694939291906131d0565b600060405180830381600087803b1580156118f057600080fd5b505af1158015611904573d6000803e3d6000fd5b505050505b3373ffffffffffffffffffffffffffffffffffffffff167f17506b27d0ce5b421da107d8213f84cd3a8a4c6728c616483dde3054bad54c8d8484604051611951929190613325565b60405180910390a2600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9061316b565b60405180910390fd5b8015611b08576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b58565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600063bc197c8160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061316b565b60405180910390fd5b806000806101000a81548160ff02191690831515021790555060008054906101000a900460ff1615611c5a577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b600060035442611c6d91906132f1565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f73068aba7476b3fcc0ef014f049a4c4236fc30cea2ea262788ce9e2dee9e213760405160405180910390a2600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60026020528060005260406000206000915054906101000a900460ff1681565b600063f23a6e6160e01b905095945050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df49061316b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e3657600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9b67a2660e01b604051602401611f189190612945565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611fa29190613454565b600060405180830381855afa9150503d8060008114611fdd576040519150601f19603f3d011682016040523d82523d6000602084013e611fe2565b606091505b5091509150811561214357808060200190518101906120019190613480565b15612012576104839250505061245e565b8373ffffffffffffffffffffffffffffffffffffffff166380ac58cd60e01b6040516024016120419190612945565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120cb9190613454565b600060405180830381855afa9150503d8060008114612106576040519150601f19603f3d011682016040523d82523d6000602084013e61210b565b606091505b5080925081935050508180156121315750808060200190518101906121309190613480565b5b15612142576102d19250505061245e565b5b8373ffffffffffffffffffffffffffffffffffffffff1633600160405160240161216e9291906134eb565b6040516020818303038152906040527efdd58e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516121f79190613454565b600060405180830381855afa9150503d8060008114612232576040519150601f19603f3d011682016040523d82523d6000602084013e612237565b606091505b505080925050811561224f576104839250505061245e565b8373ffffffffffffffffffffffffffffffffffffffff163360405160240161227791906127e3565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123019190613454565b600060405180830381855afa9150503d806000811461233c576040519150601f19603f3d011682016040523d82523d6000602084013e612341565b606091505b5050809250508115612457578373ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123f49190613454565b600060405180830381855afa9150503d806000811461242f576040519150601f19603f3d011682016040523d82523d6000602084013e612434565b606091505b505080925050811561244b5760149250505061245e565b6102d19250505061245e565b6000925050505b919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124ac81612477565b81146124b757600080fd5b50565b6000813590506124c9816124a3565b92915050565b6000602082840312156124e5576124e461246d565b5b60006124f3848285016124ba565b91505092915050565b60008115159050919050565b612511816124fc565b82525050565b600060208201905061252c6000830184612508565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061255d82612532565b9050919050565b61256d81612552565b811461257857600080fd5b50565b60008135905061258a81612564565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125de82612595565b810181811067ffffffffffffffff821117156125fd576125fc6125a6565b5b80604052505050565b6000612610612463565b905061261c82826125d5565b919050565b600067ffffffffffffffff82111561263c5761263b6125a6565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61266581612652565b811461267057600080fd5b50565b6000813590506126828161265c565b92915050565b600061269b61269684612621565b612606565b905080838252602082019050602084028301858111156126be576126bd61264d565b5b835b818110156126e757806126d38882612673565b8452602084019350506020810190506126c0565b5050509392505050565b600082601f83011261270657612705612590565b5b8135612716848260208601612688565b91505092915050565b6000806000606084860312156127385761273761246d565b5b60006127468682870161257b565b935050602084013567ffffffffffffffff81111561276757612766612472565b5b612773868287016126f1565b925050604084013567ffffffffffffffff81111561279457612793612472565b5b6127a0868287016126f1565b9150509250925092565b6127b381612652565b82525050565b60006020820190506127ce60008301846127aa565b92915050565b6127dd81612552565b82525050565b60006020820190506127f860008301846127d4565b92915050565b600080fd5b600067ffffffffffffffff82111561281e5761281d6125a6565b5b61282782612595565b9050602081019050919050565b82818337600083830152505050565b600061285661285184612803565b612606565b905082815260208101848484011115612872576128716127fe565b5b61287d848285612834565b509392505050565b600082601f83011261289a57612899612590565b5b81356128aa848260208601612843565b91505092915050565b600080600080608085870312156128cd576128cc61246d565b5b60006128db8782880161257b565b94505060206128ec8782880161257b565b93505060406128fd87828801612673565b925050606085013567ffffffffffffffff81111561291e5761291d612472565b5b61292a87828801612885565b91505092959194509250565b61293f81612477565b82525050565b600060208201905061295a6000830184612936565b92915050565b6000806000606084860312156129795761297861246d565b5b60006129878682870161257b565b93505060206129988682870161257b565b92505060406129a986828701612673565b9150509250925092565b6000602082840312156129c9576129c861246d565b5b60006129d784828501612673565b91505092915050565b600080604083850312156129f7576129f661246d565b5b6000612a058582860161257b565b9250506020612a1685828601612673565b9150509250929050565b600060208284031215612a3657612a3561246d565b5b6000612a448482850161257b565b91505092915050565b612a56816124fc565b8114612a6157600080fd5b50565b600081359050612a7381612a4d565b92915050565b60008060408385031215612a9057612a8f61246d565b5b6000612a9e8582860161257b565b9250506020612aaf85828601612a64565b9150509250929050565b600080600080600060a08688031215612ad557612ad461246d565b5b6000612ae38882890161257b565b9550506020612af48882890161257b565b945050604086013567ffffffffffffffff811115612b1557612b14612472565b5b612b21888289016126f1565b935050606086013567ffffffffffffffff811115612b4257612b41612472565b5b612b4e888289016126f1565b925050608086013567ffffffffffffffff811115612b6f57612b6e612472565b5b612b7b88828901612885565b9150509295509295909350565b600060208284031215612b9e57612b9d61246d565b5b6000612bac84828501612a64565b91505092915050565b600080600080600060a08688031215612bd157612bd061246d565b5b6000612bdf8882890161257b565b9550506020612bf08882890161257b565b9450506040612c0188828901612673565b9350506060612c1288828901612673565b925050608086013567ffffffffffffffff811115612c3357612c32612472565b5b612c3f88828901612885565b9150509295509295909350565b600082825260208201905092915050565b7f41737365744c6f636b696e673a204c656e677468206f6620746f6b656e49647360008201527f20616e6420616d6f756e747320646f6573206e6f74206d617463680000000000602082015250565b6000612cb9603b83612c4c565b9150612cc482612c5d565b604082019050919050565b60006020820190508181036000830152612ce881612cac565b9050919050565b7f41737365744c6f636b696e673a2041737365747320617265207374696c6c206c60008201527f6f636b6564000000000000000000000000000000000000000000000000000000602082015250565b6000612d4b602583612c4c565b9150612d5682612cef565b604082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f41737365744c6f636b696e673a204261746368207472616e736665727320617260008201527f65206f6e6c7920737570706f7274656420666f72204552433131353500000000602082015250565b6000612ddd603c83612c4c565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f41737365744c6f636b696e673a20496e73756666696369656e7420617373657460008201527f73206c6f636b6564000000000000000000000000000000000000000000000000602082015250565b6000612e9e602883612c4c565b9150612ea982612e42565b604082019050919050565b60006020820190508181036000830152612ecd81612e91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f0e82612652565b9150612f1983612652565b9250828203905081811115612f3157612f30612ed4565b5b92915050565b6000612f4282612652565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f7457612f73612ed4565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612fb481612652565b82525050565b6000612fc68383612fab565b60208301905092915050565b6000602082019050919050565b6000612fea82612f7f565b612ff48185612f8a565b9350612fff83612f9b565b8060005b838110156130305781516130178882612fba565b975061302283612fd2565b925050600181019050613003565b5085935050505092915050565b600082825260208201905092915050565b50565b600061305e60008361303d565b91506130698261304e565b600082019050919050565b600060a08201905061308960008301876127d4565b61309660208301866127d4565b81810360408301526130a88185612fdf565b905081810360608301526130bc8184612fdf565b905081810360808301526130cf81613051565b905095945050505050565b60006060820190506130ef60008301866127d4565b81810360208301526131018185612fdf565b905081810360408301526131158184612fdf565b9050949350505050565b7f63616c6c6572206973206e6f7420616e206f776e657200000000000000000000600082015250565b6000613155601683612c4c565b91506131608261311f565b602082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b6000819050919050565b6000819050919050565b60006131ba6131b56131b08461318b565b613195565b612652565b9050919050565b6131ca8161319f565b82525050565b600060a0820190506131e560008301876127d4565b6131f260208301866127d4565b6131ff60408301856127aa565b61320c60608301846131c1565b818103608083015261321d81613051565b905095945050505050565b600060608201905061323d60008301866127d4565b61324a60208301856127d4565b61325760408301846127aa565b949350505050565b7f41737365744c6f636b696e673a204e6f742076616c6964204e4654207374616e60008201527f6461726400000000000000000000000000000000000000000000000000000000602082015250565b60006132bb602483612c4c565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b60006132fc82612652565b915061330783612652565b925082820190508082111561331f5761331e612ed4565b5b92915050565b600060408201905061333a60008301856127d4565b61334760208301846127aa565b9392505050565b7f636f6e7472616374206973207061757365640000000000000000000000000000600082015250565b6000613384601283612c4c565b915061338f8261334e565b602082019050919050565b600060208201905081810360008301526133b381613377565b9050919050565b60006133c582612652565b9150600082036133d8576133d7612ed4565b5b600182039050919050565b600081519050919050565b600081905092915050565b60005b838110156134175780820151818401526020810190506133fc565b60008484015250505050565b600061342e826133e3565b61343881856133ee565b93506134488185602086016133f9565b80840191505092915050565b60006134608284613423565b915081905092915050565b60008151905061347a81612a4d565b92915050565b6000602082840312156134965761349561246d565b5b60006134a48482850161346b565b91505092915050565b600060ff82169050919050565b60006134d56134d06134cb8461318b565b613195565b6134ad565b9050919050565b6134e5816134ba565b82525050565b600060408201905061350060008301856127d4565b61350d60208301846134dc565b939250505056fea2646970667358221220f23e5fae990e22f6dc852b9dbe22a565b80ec49614d338eb81089a125c8daaeb64736f6c63430008120033

Deployed Bytecode Sourcemap

7939:6724:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2525:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12095:1103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5988:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;424:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13206:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8946:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9109:921;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10038:907;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5928:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13395:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6902:102;;;:::i;:::-;;13526:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7173:240;;;:::i;:::-;;11225:862;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5961:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7421:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3120:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7698:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10953:264;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6026:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2885:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7012:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2525:223;2627:4;2666:34;2651:49;;;:11;:49;;;;:89;;;;2704:36;2728:11;2704:23;:36::i;:::-;2651:89;2644:96;;2525:223;;;:::o;12095:1103::-;12212:7;12257;:14;12240:8;:15;:31;12232:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;12381:15;12354:12;:24;12367:10;12354:24;;;;;;;;;;;;;;;;:42;12346:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;12487:5;12457:35;;:9;:26;12467:15;12457:26;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;12449:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;12575:9;12570:340;12594:7;:14;12590:1;:18;12570:340;;;12698:7;12706:1;12698:10;;;;;;;;:::i;:::-;;;;;;;;12639:13;:25;12653:10;12639:25;;;;;;;;;;;;;;;:42;12665:15;12639:42;;;;;;;;;;;;;;;:55;12682:8;12691:1;12682:11;;;;;;;;:::i;:::-;;;;;;;;12639:55;;;;;;;;;;;;:69;;12631:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:7;12837:1;12829:10;;;;;;;;:::i;:::-;;;;;;;;12770:13;:25;12784:10;12770:25;;;;;;;;;;;;;;;:42;12796:15;12770:42;;;;;;;;;;;;;;;:55;12813:8;12822:1;12813:11;;;;;;;;:::i;:::-;;;;;;;;12770:55;;;;;;;;;;;;:69;;;;;;;:::i;:::-;;;;;;;;12888:7;12896:1;12888:10;;;;;;;;:::i;:::-;;;;;;;;12854:18;:30;12873:10;12854:30;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;12611:3;;;;;:::i;:::-;;;;12570:340;;;;12931:15;12922:47;;;12978:4;12985:10;12997:8;13007:7;12922:97;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13103:10;13085:62;;;13114:15;13130:8;13139:7;13085:62;;;;;;;;:::i;:::-;;;;;;;;13165:18;:25;13184:5;;;;;;;;;;;13165:25;;;;;;;;;;;;;;;;13158:32;;12095:1103;;;;;:::o;5988:31::-;;;;;;;;;;;;;:::o;424:164::-;524:6;550:30;;;543:37;;424:164;;;;;;:::o;13206:181::-;13306:7;13333:13;:20;13347:5;13333:20;;;;;;;;;;;;;;;:37;13354:15;13333:37;;;;;;;;;;;;;;;:46;13371:7;13333:46;;;;;;;;;;;;13326:53;;13206:181;;;;;:::o;8946:155::-;9024:4;6436:5;;;;;;;;;;;6422:19;;:10;:19;;;6414:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;9057:14:::1;9041:13;:30;;;;9089:4;9082:11;;8946:155:::0;;;:::o;9109:921::-;9183:7;9203:19;9225:38;9247:15;9225:21;:38::i;:::-;9203:60;;9291:4;9277:12;:18;;;9274:405;;9320:15;9311:42;;;9354:10;9374:4;9381:7;9390:1;9311:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9274:405;;;9440:3;9426:12;:17;;;9423:256;;9467:15;9459:37;;;9497:10;9517:4;9524:7;9459:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9576:4;9547:9;:26;9557:15;9547:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;9423:256;;;9621:46;;;;;;;;;;:::i;:::-;;;;;;;;9423:256;9274:405;9691:13;:25;9705:10;9691:25;;;;;;;;;;;;;;;:42;9717:15;9691:42;;;;;;;;;;;;;;;:51;9734:7;9691:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;9755:18;:30;9774:10;9755:30;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;9843:13;;9825:15;:31;;;;:::i;:::-;9798:12;:24;9811:10;9798:24;;;;;;;;;;;;;;;:58;;;;9943:10;9933:47;;;9955:15;9972:7;9933:47;;;;;;;:::i;:::-;;;;;;;;9998:12;:24;10011:10;9998:24;;;;;;;;;;;;;;;;9991:31;;;9109:921;;;;:::o;10038:907::-;10153:7;10173:19;10195:38;10217:15;10195:21;:38::i;:::-;10173:60;;10261:4;10247:12;:18;;;10244:233;;10290:15;10281:47;;;10329:10;10349:4;10356:8;10366:7;10281:97;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10244:233;;;10419:46;;;;;;;;;;:::i;:::-;;;;;;;;10244:233;10494:9;10489:201;10513:7;:14;10509:1;:18;10489:201;;;10609:7;10617:1;10609:10;;;;;;;;:::i;:::-;;;;;;;;10550:13;:25;10564:10;10550:25;;;;;;;;;;;;;;;:42;10576:15;10550:42;;;;;;;;;;;;;;;:55;10593:8;10602:1;10593:11;;;;;;;;:::i;:::-;;;;;;;;10550:55;;;;;;;;;;;;:69;;;;;;;:::i;:::-;;;;;;;;10668:7;10676:1;10668:10;;;;;;;;:::i;:::-;;;;;;;;10634:18;:30;10653:10;10634:30;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;10530:3;;;;;:::i;:::-;;;;10489:201;;;;10745:13;;10727:15;:31;;;;:::i;:::-;10700:12;:24;10713:10;10700:24;;;;;;;;;;;;;;;:58;;;;10851:10;10835:60;;;10862:15;10878:8;10887:7;10835:60;;;;;;;;:::i;:::-;;;;;;;;10913:12;:24;10926:10;10913:24;;;;;;;;;;;;;;;;10906:31;;;10038:907;;;;;:::o;5928:26::-;;;;;;;;;;;;:::o;13395:123::-;13458:7;13485:18;:25;13504:5;13485:25;;;;;;;;;;;;;;;;13478:32;;13395:123;;;:::o;6902:102::-;6436:5;;;;;;;;;;;6422:19;;:10;:19;;;6414:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6994:1:::1;6967:16;;:29;;;;;;;;;;;;;;;;;;6902:102::o:0;13526:112::-;13584:7;13611:12;:19;13624:5;13611:19;;;;;;;;;;;;;;;;13604:26;;13526:112;;;:::o;7173:240::-;6325:6;;;;;;;;;;6324:7;6316:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7252:16:::1;;;;;;;;;;;7238:30;;:10;:30;;;7230:39;;;::::0;::::1;;7313:16;;;;;;;;;;;7285:45;;7306:5;;;;;;;;;;;7285:45;;;;;;;;;;;;7349:16;;;;;;;;;;;7341:5;;:24;;;;;;;;;;;;;;;;;;7403:1;7376:16;;:29;;;;;;;;;;;;;;;;;;7173:240::o:0;11225:862::-;11301:7;11383:1;11329:13;:25;11343:10;11329:25;;;;;;;;;;;;;;;:42;11355:15;11329:42;;;;;;;;;;;;;;;:51;11372:7;11329:51;;;;;;;;;;;;:55;11321:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;11475:15;11448:12;:24;11461:10;11448:24;;;;;;;;;;;;;;;;:42;11440:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;11545:13;:25;11559:10;11545:25;;;;;;;;;;;;;;;:42;11571:15;11545:42;;;;;;;;;;;;;;;:51;11588:7;11545:51;;;;;;;;;;;;:53;;;;;;;;;:::i;:::-;;;;;;11609:18;:30;11628:10;11609:30;;;;;;;;;;;;;;;;:32;;;;;;;;;:::i;:::-;;;;;;11658:9;:26;11668:15;11658:26;;;;;;;;;;;;;;;;;;;;;;;;;11654:250;;;11709:15;11701:37;;;11747:4;11754:10;11766:7;11701:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11654:250;;;11816:15;11807:42;;;11858:4;11865:10;11877:7;11886:1;11807:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11654:250;11975:10;11963:47;;;11986:15;12002:7;11963:47;;;;;;;:::i;:::-;;;;;;;;12028:13;:25;12042:10;12028:25;;;;;;;;;;;;;;;:42;12054:15;12028:42;;;;;;;;;;;;;;;:51;12071:7;12028:51;;;;;;;;;;;;12021:58;;11225:862;;;;:::o;5961:20::-;;;;;;;;;;;;;:::o;7421:269::-;6436:5;;;;;;;;;;;6422:19;;:10;:19;;;6414:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7539:8:::1;7535:148;;;7597:4;7564:19;:30;7584:9;7564:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7535:148;;;7641:19;:30;7661:9;7641:30;;;;;;;;;;;;;;;;7634:37;;;;;;;;;;;7535:148;7421:269:::0;;:::o;3120:255::-;3305:6;3331:36;;;3324:43;;3120:255;;;;;;;:::o;7698:145::-;6436:5;;;;;;;;;;;6422:19;;:10;:19;;;6414:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7767:7:::1;7758:6;::::0;:16:::1;;;;;;;;;;;;;;;;;;7789:6;::::0;::::1;;;;;;;;7785:51;;;7817:7;;;;;;;;;;7785:51;7698:145:::0;:::o;10953:264::-;10989:7;11054:13;;11036:15;:31;;;;:::i;:::-;11009:12;:24;11022:10;11009:24;;;;;;;;;;;;;;;:58;;;;11156:10;11144:23;;;;;;;;;;;;11185:12;:24;11198:10;11185:24;;;;;;;;;;;;;;;;11178:31;;10953:264;:::o;6026:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;2885:227::-;3047:6;3073:31;;;3066:38;;2885:227;;;;;;;:::o;7012:153::-;6436:5;;;;;;;;;;;6422:19;;:10;:19;;;6414:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7115:1:::1;7094:23;;:9;:23;;::::0;7086:32:::1;;;::::0;::::1;;7148:9;7129:16;;:28;;;;;;;;;;;;;;;;;;7012:153:::0;:::o;1654:157::-;1739:4;1778:25;1763:40;;;:11;:40;;;;1756:47;;1654:157;;;:::o;13646:1011::-;13724:6;13743:14;13759:21;13784:15;:26;;8414:10;13863:11;;13811:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13784:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13742:134;;;;13890:9;13887:284;;;13929:8;13918:28;;;;;;;;;;;;:::i;:::-;13915:44;;;13955:4;13948:11;;;;;;13915:44;13997:15;:26;;8468:10;14076;;14024:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13997:91;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13974:114;;;;;;;;14106:9;:41;;;;;14130:8;14119:28;;;;;;;;;;;;:::i;:::-;14106:41;14103:56;;;14156:3;14149:10;;;;;;14103:56;13887:284;14196:15;:26;;14276:10;14288:1;14223:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14196:95;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14181:110;;;;;14305:9;14302:25;;;14323:4;14316:11;;;;;;14302:25;14353:15;:26;;14425:10;14380:56;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14353:84;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14338:99;;;;;14451:9;14448:183;;;14491:15;:26;;14518:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14491:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14476:80;;;;;14574:9;14571:23;;;14592:2;14585:9;;;;;;14571:23;14616:3;14609:10;;;;;;14448:183;14648:1;14641:8;;;;13646:1011;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:117::-;2134:1;2131;2124:12;2148:102;2189:6;2240:2;2236:7;2231:2;2224:5;2220:14;2216:28;2206:38;;2148:102;;;:::o;2256:180::-;2304:77;2301:1;2294:88;2401:4;2398:1;2391:15;2425:4;2422:1;2415:15;2442:281;2525:27;2547:4;2525:27;:::i;:::-;2517:6;2513:40;2655:6;2643:10;2640:22;2619:18;2607:10;2604:34;2601:62;2598:88;;;2666:18;;:::i;:::-;2598:88;2706:10;2702:2;2695:22;2485:238;2442:281;;:::o;2729:129::-;2763:6;2790:20;;:::i;:::-;2780:30;;2819:33;2847:4;2839:6;2819:33;:::i;:::-;2729:129;;;:::o;2864:311::-;2941:4;3031:18;3023:6;3020:30;3017:56;;;3053:18;;:::i;:::-;3017:56;3103:4;3095:6;3091:17;3083:25;;3163:4;3157;3153:15;3145:23;;2864:311;;;:::o;3181:117::-;3290:1;3287;3280:12;3304:77;3341:7;3370:5;3359:16;;3304:77;;;:::o;3387:122::-;3460:24;3478:5;3460:24;:::i;:::-;3453:5;3450:35;3440:63;;3499:1;3496;3489:12;3440:63;3387:122;:::o;3515:139::-;3561:5;3599:6;3586:20;3577:29;;3615:33;3642:5;3615:33;:::i;:::-;3515:139;;;;:::o;3677:710::-;3773:5;3798:81;3814:64;3871:6;3814:64;:::i;:::-;3798:81;:::i;:::-;3789:90;;3899:5;3928:6;3921:5;3914:21;3962:4;3955:5;3951:16;3944:23;;4015:4;4007:6;4003:17;3995:6;3991:30;4044:3;4036:6;4033:15;4030:122;;;4063:79;;:::i;:::-;4030:122;4178:6;4161:220;4195:6;4190:3;4187:15;4161:220;;;4270:3;4299:37;4332:3;4320:10;4299:37;:::i;:::-;4294:3;4287:50;4366:4;4361:3;4357:14;4350:21;;4237:144;4221:4;4216:3;4212:14;4205:21;;4161:220;;;4165:21;3779:608;;3677:710;;;;;:::o;4410:370::-;4481:5;4530:3;4523:4;4515:6;4511:17;4507:27;4497:122;;4538:79;;:::i;:::-;4497:122;4655:6;4642:20;4680:94;4770:3;4762:6;4755:4;4747:6;4743:17;4680:94;:::i;:::-;4671:103;;4487:293;4410:370;;;;:::o;4786:1039::-;4913:6;4921;4929;4978:2;4966:9;4957:7;4953:23;4949:32;4946:119;;;4984:79;;:::i;:::-;4946:119;5104:1;5129:53;5174:7;5165:6;5154:9;5150:22;5129:53;:::i;:::-;5119:63;;5075:117;5259:2;5248:9;5244:18;5231:32;5290:18;5282:6;5279:30;5276:117;;;5312:79;;:::i;:::-;5276:117;5417:78;5487:7;5478:6;5467:9;5463:22;5417:78;:::i;:::-;5407:88;;5202:303;5572:2;5561:9;5557:18;5544:32;5603:18;5595:6;5592:30;5589:117;;;5625:79;;:::i;:::-;5589:117;5730:78;5800:7;5791:6;5780:9;5776:22;5730:78;:::i;:::-;5720:88;;5515:303;4786:1039;;;;;:::o;5831:118::-;5918:24;5936:5;5918:24;:::i;:::-;5913:3;5906:37;5831:118;;:::o;5955:222::-;6048:4;6086:2;6075:9;6071:18;6063:26;;6099:71;6167:1;6156:9;6152:17;6143:6;6099:71;:::i;:::-;5955:222;;;;:::o;6183:118::-;6270:24;6288:5;6270:24;:::i;:::-;6265:3;6258:37;6183:118;;:::o;6307:222::-;6400:4;6438:2;6427:9;6423:18;6415:26;;6451:71;6519:1;6508:9;6504:17;6495:6;6451:71;:::i;:::-;6307:222;;;;:::o;6535:117::-;6644:1;6641;6634:12;6658:307;6719:4;6809:18;6801:6;6798:30;6795:56;;;6831:18;;:::i;:::-;6795:56;6869:29;6891:6;6869:29;:::i;:::-;6861:37;;6953:4;6947;6943:15;6935:23;;6658:307;;;:::o;6971:146::-;7068:6;7063:3;7058;7045:30;7109:1;7100:6;7095:3;7091:16;7084:27;6971:146;;;:::o;7123:423::-;7200:5;7225:65;7241:48;7282:6;7241:48;:::i;:::-;7225:65;:::i;:::-;7216:74;;7313:6;7306:5;7299:21;7351:4;7344:5;7340:16;7389:3;7380:6;7375:3;7371:16;7368:25;7365:112;;;7396:79;;:::i;:::-;7365:112;7486:54;7533:6;7528:3;7523;7486:54;:::i;:::-;7206:340;7123:423;;;;;:::o;7565:338::-;7620:5;7669:3;7662:4;7654:6;7650:17;7646:27;7636:122;;7677:79;;:::i;:::-;7636:122;7794:6;7781:20;7819:78;7893:3;7885:6;7878:4;7870:6;7866:17;7819:78;:::i;:::-;7810:87;;7626:277;7565:338;;;;:::o;7909:943::-;8004:6;8012;8020;8028;8077:3;8065:9;8056:7;8052:23;8048:33;8045:120;;;8084:79;;:::i;:::-;8045:120;8204:1;8229:53;8274:7;8265:6;8254:9;8250:22;8229:53;:::i;:::-;8219:63;;8175:117;8331:2;8357:53;8402:7;8393:6;8382:9;8378:22;8357:53;:::i;:::-;8347:63;;8302:118;8459:2;8485:53;8530:7;8521:6;8510:9;8506:22;8485:53;:::i;:::-;8475:63;;8430:118;8615:2;8604:9;8600:18;8587:32;8646:18;8638:6;8635:30;8632:117;;;8668:79;;:::i;:::-;8632:117;8773:62;8827:7;8818:6;8807:9;8803:22;8773:62;:::i;:::-;8763:72;;8558:287;7909:943;;;;;;;:::o;8858:115::-;8943:23;8960:5;8943:23;:::i;:::-;8938:3;8931:36;8858:115;;:::o;8979:218::-;9070:4;9108:2;9097:9;9093:18;9085:26;;9121:69;9187:1;9176:9;9172:17;9163:6;9121:69;:::i;:::-;8979:218;;;;:::o;9203:619::-;9280:6;9288;9296;9345:2;9333:9;9324:7;9320:23;9316:32;9313:119;;;9351:79;;:::i;:::-;9313:119;9471:1;9496:53;9541:7;9532:6;9521:9;9517:22;9496:53;:::i;:::-;9486:63;;9442:117;9598:2;9624:53;9669:7;9660:6;9649:9;9645:22;9624:53;:::i;:::-;9614:63;;9569:118;9726:2;9752:53;9797:7;9788:6;9777:9;9773:22;9752:53;:::i;:::-;9742:63;;9697:118;9203:619;;;;;:::o;9828:329::-;9887:6;9936:2;9924:9;9915:7;9911:23;9907:32;9904:119;;;9942:79;;:::i;:::-;9904:119;10062:1;10087:53;10132:7;10123:6;10112:9;10108:22;10087:53;:::i;:::-;10077:63;;10033:117;9828:329;;;;:::o;10163:474::-;10231:6;10239;10288:2;10276:9;10267:7;10263:23;10259:32;10256:119;;;10294:79;;:::i;:::-;10256:119;10414:1;10439:53;10484:7;10475:6;10464:9;10460:22;10439:53;:::i;:::-;10429:63;;10385:117;10541:2;10567:53;10612:7;10603:6;10592:9;10588:22;10567:53;:::i;:::-;10557:63;;10512:118;10163:474;;;;;:::o;10643:329::-;10702:6;10751:2;10739:9;10730:7;10726:23;10722:32;10719:119;;;10757:79;;:::i;:::-;10719:119;10877:1;10902:53;10947:7;10938:6;10927:9;10923:22;10902:53;:::i;:::-;10892:63;;10848:117;10643:329;;;;:::o;10978:116::-;11048:21;11063:5;11048:21;:::i;:::-;11041:5;11038:32;11028:60;;11084:1;11081;11074:12;11028:60;10978:116;:::o;11100:133::-;11143:5;11181:6;11168:20;11159:29;;11197:30;11221:5;11197:30;:::i;:::-;11100:133;;;;:::o;11239:468::-;11304:6;11312;11361:2;11349:9;11340:7;11336:23;11332:32;11329:119;;;11367:79;;:::i;:::-;11329:119;11487:1;11512:53;11557:7;11548:6;11537:9;11533:22;11512:53;:::i;:::-;11502:63;;11458:117;11614:2;11640:50;11682:7;11673:6;11662:9;11658:22;11640:50;:::i;:::-;11630:60;;11585:115;11239:468;;;;;:::o;11713:1509::-;11867:6;11875;11883;11891;11899;11948:3;11936:9;11927:7;11923:23;11919:33;11916:120;;;11955:79;;:::i;:::-;11916:120;12075:1;12100:53;12145:7;12136:6;12125:9;12121:22;12100:53;:::i;:::-;12090:63;;12046:117;12202:2;12228:53;12273:7;12264:6;12253:9;12249:22;12228:53;:::i;:::-;12218:63;;12173:118;12358:2;12347:9;12343:18;12330:32;12389:18;12381:6;12378:30;12375:117;;;12411:79;;:::i;:::-;12375:117;12516:78;12586:7;12577:6;12566:9;12562:22;12516:78;:::i;:::-;12506:88;;12301:303;12671:2;12660:9;12656:18;12643:32;12702:18;12694:6;12691:30;12688:117;;;12724:79;;:::i;:::-;12688:117;12829:78;12899:7;12890:6;12879:9;12875:22;12829:78;:::i;:::-;12819:88;;12614:303;12984:3;12973:9;12969:19;12956:33;13016:18;13008:6;13005:30;13002:117;;;13038:79;;:::i;:::-;13002:117;13143:62;13197:7;13188:6;13177:9;13173:22;13143:62;:::i;:::-;13133:72;;12927:288;11713:1509;;;;;;;;:::o;13228:323::-;13284:6;13333:2;13321:9;13312:7;13308:23;13304:32;13301:119;;;13339:79;;:::i;:::-;13301:119;13459:1;13484:50;13526:7;13517:6;13506:9;13502:22;13484:50;:::i;:::-;13474:60;;13430:114;13228:323;;;;:::o;13557:1089::-;13661:6;13669;13677;13685;13693;13742:3;13730:9;13721:7;13717:23;13713:33;13710:120;;;13749:79;;:::i;:::-;13710:120;13869:1;13894:53;13939:7;13930:6;13919:9;13915:22;13894:53;:::i;:::-;13884:63;;13840:117;13996:2;14022:53;14067:7;14058:6;14047:9;14043:22;14022:53;:::i;:::-;14012:63;;13967:118;14124:2;14150:53;14195:7;14186:6;14175:9;14171:22;14150:53;:::i;:::-;14140:63;;14095:118;14252:2;14278:53;14323:7;14314:6;14303:9;14299:22;14278:53;:::i;:::-;14268:63;;14223:118;14408:3;14397:9;14393:19;14380:33;14440:18;14432:6;14429:30;14426:117;;;14462:79;;:::i;:::-;14426:117;14567:62;14621:7;14612:6;14601:9;14597:22;14567:62;:::i;:::-;14557:72;;14351:288;13557:1089;;;;;;;;:::o;14652:169::-;14736:11;14770:6;14765:3;14758:19;14810:4;14805:3;14801:14;14786:29;;14652:169;;;;:::o;14827:246::-;14967:34;14963:1;14955:6;14951:14;14944:58;15036:29;15031:2;15023:6;15019:15;15012:54;14827:246;:::o;15079:366::-;15221:3;15242:67;15306:2;15301:3;15242:67;:::i;:::-;15235:74;;15318:93;15407:3;15318:93;:::i;:::-;15436:2;15431:3;15427:12;15420:19;;15079:366;;;:::o;15451:419::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:131;15858:4;15732:131;:::i;:::-;15724:139;;15451:419;;;:::o;15876:224::-;16016:34;16012:1;16004:6;16000:14;15993:58;16085:7;16080:2;16072:6;16068:15;16061:32;15876:224;:::o;16106:366::-;16248:3;16269:67;16333:2;16328:3;16269:67;:::i;:::-;16262:74;;16345:93;16434:3;16345:93;:::i;:::-;16463:2;16458:3;16454:12;16447:19;;16106:366;;;:::o;16478:419::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16731:9;16725:4;16721:20;16717:1;16706:9;16702:17;16695:47;16759:131;16885:4;16759:131;:::i;:::-;16751:139;;16478:419;;;:::o;16903:247::-;17043:34;17039:1;17031:6;17027:14;17020:58;17112:30;17107:2;17099:6;17095:15;17088:55;16903:247;:::o;17156:366::-;17298:3;17319:67;17383:2;17378:3;17319:67;:::i;:::-;17312:74;;17395:93;17484:3;17395:93;:::i;:::-;17513:2;17508:3;17504:12;17497:19;;17156:366;;;:::o;17528:419::-;17694:4;17732:2;17721:9;17717:18;17709:26;;17781:9;17775:4;17771:20;17767:1;17756:9;17752:17;17745:47;17809:131;17935:4;17809:131;:::i;:::-;17801:139;;17528:419;;;:::o;17953:180::-;18001:77;17998:1;17991:88;18098:4;18095:1;18088:15;18122:4;18119:1;18112:15;18139:227;18279:34;18275:1;18267:6;18263:14;18256:58;18348:10;18343:2;18335:6;18331:15;18324:35;18139:227;:::o;18372:366::-;18514:3;18535:67;18599:2;18594:3;18535:67;:::i;:::-;18528:74;;18611:93;18700:3;18611:93;:::i;:::-;18729:2;18724:3;18720:12;18713:19;;18372:366;;;:::o;18744:419::-;18910:4;18948:2;18937:9;18933:18;18925:26;;18997:9;18991:4;18987:20;18983:1;18972:9;18968:17;18961:47;19025:131;19151:4;19025:131;:::i;:::-;19017:139;;18744:419;;;:::o;19169:180::-;19217:77;19214:1;19207:88;19314:4;19311:1;19304:15;19338:4;19335:1;19328:15;19355:194;19395:4;19415:20;19433:1;19415:20;:::i;:::-;19410:25;;19449:20;19467:1;19449:20;:::i;:::-;19444:25;;19493:1;19490;19486:9;19478:17;;19517:1;19511:4;19508:11;19505:37;;;19522:18;;:::i;:::-;19505:37;19355:194;;;;:::o;19555:233::-;19594:3;19617:24;19635:5;19617:24;:::i;:::-;19608:33;;19663:66;19656:5;19653:77;19650:103;;19733:18;;:::i;:::-;19650:103;19780:1;19773:5;19769:13;19762:20;;19555:233;;;:::o;19794:114::-;19861:6;19895:5;19889:12;19879:22;;19794:114;;;:::o;19914:184::-;20013:11;20047:6;20042:3;20035:19;20087:4;20082:3;20078:14;20063:29;;19914:184;;;;:::o;20104:132::-;20171:4;20194:3;20186:11;;20224:4;20219:3;20215:14;20207:22;;20104:132;;;:::o;20242:108::-;20319:24;20337:5;20319:24;:::i;:::-;20314:3;20307:37;20242:108;;:::o;20356:179::-;20425:10;20446:46;20488:3;20480:6;20446:46;:::i;:::-;20524:4;20519:3;20515:14;20501:28;;20356:179;;;;:::o;20541:113::-;20611:4;20643;20638:3;20634:14;20626:22;;20541:113;;;:::o;20690:732::-;20809:3;20838:54;20886:5;20838:54;:::i;:::-;20908:86;20987:6;20982:3;20908:86;:::i;:::-;20901:93;;21018:56;21068:5;21018:56;:::i;:::-;21097:7;21128:1;21113:284;21138:6;21135:1;21132:13;21113:284;;;21214:6;21208:13;21241:63;21300:3;21285:13;21241:63;:::i;:::-;21234:70;;21327:60;21380:6;21327:60;:::i;:::-;21317:70;;21173:224;21160:1;21157;21153:9;21148:14;;21113:284;;;21117:14;21413:3;21406:10;;20814:608;;;20690:732;;;;:::o;21428:168::-;21511:11;21545:6;21540:3;21533:19;21585:4;21580:3;21576:14;21561:29;;21428:168;;;;:::o;21602:114::-;;:::o;21722:362::-;21863:3;21884:65;21947:1;21942:3;21884:65;:::i;:::-;21877:72;;21958:93;22047:3;21958:93;:::i;:::-;22076:1;22071:3;22067:11;22060:18;;21722:362;;;:::o;22090:1161::-;22467:4;22505:3;22494:9;22490:19;22482:27;;22519:71;22587:1;22576:9;22572:17;22563:6;22519:71;:::i;:::-;22600:72;22668:2;22657:9;22653:18;22644:6;22600:72;:::i;:::-;22719:9;22713:4;22709:20;22704:2;22693:9;22689:18;22682:48;22747:108;22850:4;22841:6;22747:108;:::i;:::-;22739:116;;22902:9;22896:4;22892:20;22887:2;22876:9;22872:18;22865:48;22930:108;23033:4;23024:6;22930:108;:::i;:::-;22922:116;;23086:9;23080:4;23076:20;23070:3;23059:9;23055:19;23048:49;23114:130;23239:4;23114:130;:::i;:::-;23106:138;;22090:1161;;;;;;;:::o;23257:744::-;23506:4;23544:2;23533:9;23529:18;23521:26;;23557:71;23625:1;23614:9;23610:17;23601:6;23557:71;:::i;:::-;23675:9;23669:4;23665:20;23660:2;23649:9;23645:18;23638:48;23703:108;23806:4;23797:6;23703:108;:::i;:::-;23695:116;;23858:9;23852:4;23848:20;23843:2;23832:9;23828:18;23821:48;23886:108;23989:4;23980:6;23886:108;:::i;:::-;23878:116;;23257:744;;;;;;:::o;24007:172::-;24147:24;24143:1;24135:6;24131:14;24124:48;24007:172;:::o;24185:366::-;24327:3;24348:67;24412:2;24407:3;24348:67;:::i;:::-;24341:74;;24424:93;24513:3;24424:93;:::i;:::-;24542:2;24537:3;24533:12;24526:19;;24185:366;;;:::o;24557:419::-;24723:4;24761:2;24750:9;24746:18;24738:26;;24810:9;24804:4;24800:20;24796:1;24785:9;24781:17;24774:47;24838:131;24964:4;24838:131;:::i;:::-;24830:139;;24557:419;;;:::o;24982:85::-;25027:7;25056:5;25045:16;;24982:85;;;:::o;25073:60::-;25101:3;25122:5;25115:12;;25073:60;;;:::o;25139:158::-;25197:9;25230:61;25248:42;25257:32;25283:5;25257:32;:::i;:::-;25248:42;:::i;:::-;25230:61;:::i;:::-;25217:74;;25139:158;;;:::o;25303:147::-;25398:45;25437:5;25398:45;:::i;:::-;25393:3;25386:58;25303:147;;:::o;25456:875::-;25741:4;25779:3;25768:9;25764:19;25756:27;;25793:71;25861:1;25850:9;25846:17;25837:6;25793:71;:::i;:::-;25874:72;25942:2;25931:9;25927:18;25918:6;25874:72;:::i;:::-;25956;26024:2;26013:9;26009:18;26000:6;25956:72;:::i;:::-;26038:80;26114:2;26103:9;26099:18;26090:6;26038:80;:::i;:::-;26166:9;26160:4;26156:20;26150:3;26139:9;26135:19;26128:49;26194:130;26319:4;26194:130;:::i;:::-;26186:138;;25456:875;;;;;;;:::o;26337:442::-;26486:4;26524:2;26513:9;26509:18;26501:26;;26537:71;26605:1;26594:9;26590:17;26581:6;26537:71;:::i;:::-;26618:72;26686:2;26675:9;26671:18;26662:6;26618:72;:::i;:::-;26700;26768:2;26757:9;26753:18;26744:6;26700:72;:::i;:::-;26337:442;;;;;;:::o;26785:223::-;26925:34;26921:1;26913:6;26909:14;26902:58;26994:6;26989:2;26981:6;26977:15;26970:31;26785:223;:::o;27014:366::-;27156:3;27177:67;27241:2;27236:3;27177:67;:::i;:::-;27170:74;;27253:93;27342:3;27253:93;:::i;:::-;27371:2;27366:3;27362:12;27355:19;;27014:366;;;:::o;27386:419::-;27552:4;27590:2;27579:9;27575:18;27567:26;;27639:9;27633:4;27629:20;27625:1;27614:9;27610:17;27603:47;27667:131;27793:4;27667:131;:::i;:::-;27659:139;;27386:419;;;:::o;27811:191::-;27851:3;27870:20;27888:1;27870:20;:::i;:::-;27865:25;;27904:20;27922:1;27904:20;:::i;:::-;27899:25;;27947:1;27944;27940:9;27933:16;;27968:3;27965:1;27962:10;27959:36;;;27975:18;;:::i;:::-;27959:36;27811:191;;;;:::o;28008:332::-;28129:4;28167:2;28156:9;28152:18;28144:26;;28180:71;28248:1;28237:9;28233:17;28224:6;28180:71;:::i;:::-;28261:72;28329:2;28318:9;28314:18;28305:6;28261:72;:::i;:::-;28008:332;;;;;:::o;28346:168::-;28486:20;28482:1;28474:6;28470:14;28463:44;28346:168;:::o;28520:366::-;28662:3;28683:67;28747:2;28742:3;28683:67;:::i;:::-;28676:74;;28759:93;28848:3;28759:93;:::i;:::-;28877:2;28872:3;28868:12;28861:19;;28520:366;;;:::o;28892:419::-;29058:4;29096:2;29085:9;29081:18;29073:26;;29145:9;29139:4;29135:20;29131:1;29120:9;29116:17;29109:47;29173:131;29299:4;29173:131;:::i;:::-;29165:139;;28892:419;;;:::o;29317:171::-;29356:3;29379:24;29397:5;29379:24;:::i;:::-;29370:33;;29425:4;29418:5;29415:15;29412:41;;29433:18;;:::i;:::-;29412:41;29480:1;29473:5;29469:13;29462:20;;29317:171;;;:::o;29494:98::-;29545:6;29579:5;29573:12;29563:22;;29494:98;;;:::o;29598:147::-;29699:11;29736:3;29721:18;;29598:147;;;;:::o;29751:246::-;29832:1;29842:113;29856:6;29853:1;29850:13;29842:113;;;29941:1;29936:3;29932:11;29926:18;29922:1;29917:3;29913:11;29906:39;29878:2;29875:1;29871:10;29866:15;;29842:113;;;29989:1;29980:6;29975:3;29971:16;29964:27;29813:184;29751:246;;;:::o;30003:386::-;30107:3;30135:38;30167:5;30135:38;:::i;:::-;30189:88;30270:6;30265:3;30189:88;:::i;:::-;30182:95;;30286:65;30344:6;30339:3;30332:4;30325:5;30321:16;30286:65;:::i;:::-;30376:6;30371:3;30367:16;30360:23;;30111:278;30003:386;;;;:::o;30395:271::-;30525:3;30547:93;30636:3;30627:6;30547:93;:::i;:::-;30540:100;;30657:3;30650:10;;30395:271;;;;:::o;30672:137::-;30726:5;30757:6;30751:13;30742:22;;30773:30;30797:5;30773:30;:::i;:::-;30672:137;;;;:::o;30815:345::-;30882:6;30931:2;30919:9;30910:7;30906:23;30902:32;30899:119;;;30937:79;;:::i;:::-;30899:119;31057:1;31082:61;31135:7;31126:6;31115:9;31111:22;31082:61;:::i;:::-;31072:71;;31028:125;30815:345;;;;:::o;31166:86::-;31201:7;31241:4;31234:5;31230:16;31219:27;;31166:86;;;:::o;31258:154::-;31314:9;31347:59;31363:42;31372:32;31398:5;31372:32;:::i;:::-;31363:42;:::i;:::-;31347:59;:::i;:::-;31334:72;;31258:154;;;:::o;31418:143::-;31511:43;31548:5;31511:43;:::i;:::-;31506:3;31499:56;31418:143;;:::o;31567:344::-;31694:4;31732:2;31721:9;31717:18;31709:26;;31745:71;31813:1;31802:9;31798:17;31789:6;31745:71;:::i;:::-;31826:78;31900:2;31889:9;31885:18;31876:6;31826:78;:::i;:::-;31567:344;;;;;:::o

Swarm Source

ipfs://f23e5fae990e22f6dc852b9dbe22a565b80ec49614d338eb81089a125c8daaeb

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  ]

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.