ETH Price: $3,264.66 (-0.62%)
 

Overview

Max Total Supply

20 UNA

Holders

16

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x21af0A9117ee420CB26c32a49c59220F38F5991b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xaC4EF9D6...90b634462
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Wrappr

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-22
*/

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.4;

/// @notice A generic interface for a contract which properly accepts ERC-1155 tokens.
/// @author Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external payable virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external payable virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

/// @notice Minimalist and gas efficient standard ERC-1155 implementation with supply tracking.
/// @author Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /// -----------------------------------------------------------------------
    /// EVENTS
    /// -----------------------------------------------------------------------

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /// -----------------------------------------------------------------------
    /// ERC-1155 STORAGE
    /// -----------------------------------------------------------------------
    
    mapping(uint256 => uint256) public totalSupply;

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// -----------------------------------------------------------------------
    /// METADATA LOGIC
    /// -----------------------------------------------------------------------

    function uri(uint256 id) public view virtual returns (string memory);
    
    /// -----------------------------------------------------------------------
    /// ERC-165 LOGIC
    /// -----------------------------------------------------------------------

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC-165 Interface ID for ERC-165
            interfaceId == 0xd9b67a26 || // ERC-165 Interface ID for ERC-1155
            interfaceId == 0x0e89341c; // ERC-165 Interface ID for ERC1155MetadataURI
    }

    /// -----------------------------------------------------------------------
    /// ERC-1155 LOGIC
    /// -----------------------------------------------------------------------
    
    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    function setApprovalForAll(address operator, bool approved) public payable virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public payable virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        
        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to][id] += amount;
        }

        emit TransferSingle(msg.sender, from, to, id, amount);

        if (to.code.length != 0) {
            require(
                ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
                "UNSAFE_RECIPIENT"
            );
        } else require(to != address(0), "INVALID_RECIPIENT");
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public payable virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            
            // Cannot overflow because the sum of all user
            // balances can't exceed the max uint256 value,
            // and an array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                balanceOf[to][id] += amount;
                
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        if (to.code.length != 0) {
            require(
                ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
                "UNSAFE_RECIPIENT"
            );
        } else require(to != address(0), "INVALID_RECIPIENT");
    }

    /// -----------------------------------------------------------------------
    /// INTERNAL MINT/BURN LOGIC
    /// -----------------------------------------------------------------------

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) internal virtual {
        totalSupply[id] += amount;
        
        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value. 
        unchecked {
            balanceOf[to][id] += amount;
        }

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        if (to.code.length != 0) {
            require(
                ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
                "UNSAFE_RECIPIENT"
            );
        } else require(to != address(0), "INVALID_RECIPIENT");
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        balanceOf[from][id] -= amount;
        
        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply[id] -= amount;
        }

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice Compound-like voting extension for ERC-1155.
/// @author KaliCo LLC
/// @custom:coauthor Seed Club Ventures (@seedclubvc)
abstract contract ERC1155Votes is ERC1155 {
    /// -----------------------------------------------------------------------
    /// EVENTS
    /// -----------------------------------------------------------------------

    event DelegateChanged(
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate,
        uint256 id
    );

    event DelegateVotesChanged(
        address indexed delegate,
        uint256 indexed id,
        uint256 previousBalance,
        uint256 newBalance
    );

    /// -----------------------------------------------------------------------
    /// VOTING STORAGE
    /// -----------------------------------------------------------------------
     
    mapping(address => mapping(uint256 => address)) internal _delegates;

    mapping(address => mapping(uint256 => uint256)) public numCheckpoints;

    mapping(address => mapping(uint256 => mapping(uint256 => Checkpoint))) public checkpoints;
    
    struct Checkpoint {
        uint40 fromTimestamp;
        uint216 votes;
    }

    /// -----------------------------------------------------------------------
    /// DELEGATION LOGIC
    /// -----------------------------------------------------------------------

    function delegates(address account, uint256 id) public view virtual returns (address) {
        address current = _delegates[account][id];

        return current == address(0) ? account : current;
    }

    function getCurrentVotes(address account, uint256 id) public view virtual returns (uint256) {
        // Won't underflow because decrement only occurs if positive `nCheckpoints`.
        unchecked {
            uint256 nCheckpoints = numCheckpoints[account][id];

            return
                nCheckpoints != 0
                    ? checkpoints[account][id][nCheckpoints - 1].votes
                    : 0;
        }
    }

    function getPriorVotes(
        address account, 
        uint256 id,
        uint256 timestamp
    )
        public
        view
        virtual
        returns (uint256)
    {
        require(block.timestamp > timestamp, "UNDETERMINED");

        uint256 nCheckpoints = numCheckpoints[account][id];

        if (nCheckpoints == 0) return 0;

        // Won't underflow because decrement only occurs if positive `nCheckpoints`.
        unchecked {
            if (
                checkpoints[account][id][nCheckpoints - 1].fromTimestamp <=
                timestamp
            ) return checkpoints[account][id][nCheckpoints - 1].votes;

            if (checkpoints[account][id][0].fromTimestamp > timestamp) return 0;

            uint256 lower;

            uint256 upper = nCheckpoints - 1;

            while (upper > lower) {
                uint256 center = upper - (upper - lower) / 2;

                Checkpoint memory cp = checkpoints[account][id][center];

                if (cp.fromTimestamp == timestamp) {
                    return cp.votes;
                } else if (cp.fromTimestamp < timestamp) {
                    lower = center;
                } else {
                    upper = center - 1;
                }
            }

            return checkpoints[account][id][lower].votes;
        }
    }

    function delegate(address delegatee, uint256 id) public payable virtual {
        address currentDelegate = delegates(msg.sender, id);

        _delegates[msg.sender][id] = delegatee;

        emit DelegateChanged(msg.sender, currentDelegate, delegatee, id);

        _moveDelegates(currentDelegate, delegatee, id, balanceOf[msg.sender][id]);
    }

    function _moveDelegates(
        address srcRep,
        address dstRep,
        uint256 id,
        uint256 amount
    ) internal virtual {
        if (srcRep != dstRep && amount != 0) {
            if (srcRep != address(0)) {
                uint256 srcRepNum = numCheckpoints[srcRep][id];

                uint256 srcRepOld;

                // Won't underflow because decrement only occurs if positive `srcRepNum`.
                unchecked {
                    srcRepOld = srcRepNum != 0
                        ? checkpoints[srcRep][id][srcRepNum - 1].votes
                        : 0;
                }

                _writeCheckpoint(srcRep, id, srcRepNum, srcRepOld, srcRepOld - amount);
            }

            if (dstRep != address(0)) {
                uint256 dstRepNum = numCheckpoints[dstRep][id];
                
                uint256 dstRepOld;

                // Won't underflow because decrement only occurs if positive `dstRepNum`.
                unchecked {
                    dstRepOld = dstRepNum != 0
                        ? checkpoints[dstRep][id][dstRepNum - 1].votes
                        : 0;
                }
                    
                _writeCheckpoint(dstRep, id, dstRepNum, dstRepOld, dstRepOld + amount);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint256 id,
        uint256 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    ) internal virtual {
        // Won't underflow because decrement only occurs if positive `nCheckpoints`.
        unchecked {
            if (
                nCheckpoints != 0 &&
                checkpoints[delegatee][id][nCheckpoints - 1].fromTimestamp ==
                block.timestamp
            ) {
                checkpoints[delegatee][id][nCheckpoints - 1].votes = _safeCastTo216(
                    newVotes
                );
            } else {
                checkpoints[delegatee][id][nCheckpoints] = Checkpoint(
                    _safeCastTo40(block.timestamp),
                    _safeCastTo216(newVotes)
                );

                // Won't realistically overflow.
                ++numCheckpoints[delegatee][id];
            }
        }

        emit DelegateVotesChanged(delegatee, id, oldVotes, newVotes);
    }

    function _safeCastTo40(uint256 x) internal pure virtual returns (uint40 y) {
        require(x < 1 << 40);

        y = uint40(x);
    }

    function _safeCastTo216(uint256 x) internal pure virtual returns (uint216 y) {
        require(x < 1 << 216);

        y = uint216(x);
    }
}

/// @notice Contract that enables a single call to call multiple methods on itself.
/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/Multicallable.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/Multicallable.sol)
abstract contract Multicallable {
    function multicall(bytes[] calldata data) public returns (bytes[] memory results) {
        assembly {
            if data.length {
                results := mload(0x40) // Point `results` to start of free memory.
                mstore(results, data.length) // Store `data.length` into `results`.
                results := add(results, 0x20)

                // `shl` 5 is equivalent to multiplying by 0x20.
                let end := shl(5, data.length)
                // Copy the offsets from calldata into memory.
                calldatacopy(results, data.offset, end)
                // Pointer to the top of the memory (i.e. start of the free memory).
                let memPtr := add(results, end)
                end := add(results, end)

                // prettier-ignore
                for {} 1 {} {
                    // The offset of the current bytes in the calldata.
                    let o := add(data.offset, mload(results))
                    // Copy the current bytes from calldata to the memory.
                    calldatacopy(
                        memPtr,
                        add(o, 0x20), // The offset of the current bytes' bytes.
                        calldataload(o) // The length of the current bytes.
                    )
                    if iszero(delegatecall(gas(), address(), memPtr, calldataload(o), 0x00, 0x00)) {
                        // Bubble up the revert if the delegatecall reverts.
                        returndatacopy(0x00, 0x00, returndatasize())
                        revert(0x00, returndatasize())
                    }
                    // Append the current `memPtr` into `results`.
                    mstore(results, memPtr)
                    results := add(results, 0x20)
                    // Append the `returndatasize()`, and the return data.
                    mstore(memPtr, returndatasize())
                    returndatacopy(add(memPtr, 0x20), 0x00, returndatasize())
                    // Advance the `memPtr` by `returndatasize() + 0x20`,
                    // rounded up to the next multiple of 32.
                    memPtr := and(add(add(memPtr, returndatasize()), 0x3f), 0xffffffffffffffe0)
                    // prettier-ignore
                    if iszero(lt(results, end)) { break }
                }
                // Restore `results` and allocate memory for it.
                results := mload(0x40)
                mstore(0x40, memPtr)
            }
        }
    }
}

/// @title Wrappr
/// @author KaliCo LLC
/// @custom:coauthor Seed Club Ventures (@seedclubvc)
/// @notice Ricardian contract for on-chain structures.
contract Wrappr is ERC1155Votes, Multicallable {
    /// -----------------------------------------------------------------------
    /// EVENTS
    /// -----------------------------------------------------------------------

    event OwnerOfSet(address indexed operator, address indexed to, uint256 id);

    event ManagerSet(address indexed operator, address indexed to, bool set);

    event AdminSet(address indexed operator, address indexed admin);

    event TransferabilitySet(address indexed operator, uint256 id, bool set);

    event PermissionSet(address indexed operator, uint256 id, bool set);

    event UserPermissionSet(address indexed operator, address indexed to, uint256 id, bool set);

    event BaseURIset(address indexed operator, string baseURI);

    event UserURIset(address indexed operator, address indexed to, uint256 id, string uuri);

    event MintFeeSet(address indexed operator, uint256 mintFee);

    /// -----------------------------------------------------------------------
    /// WRAPPR STORAGE/LOGIC
    /// -----------------------------------------------------------------------

    string public name;

    string public symbol;

    string internal baseURI;

    uint256 internal mintFee;

    address public admin;

    mapping(uint256 => address) public ownerOf;

    mapping(address => bool) public manager;

    mapping(uint256 => bool) internal registered;

    mapping(uint256 => bool) public transferable;

    mapping(uint256 => bool) public permissioned;

    mapping(address => mapping(uint256 => bool)) public userPermissioned;

    mapping(uint256 => string) internal uris;

    mapping(address => mapping(uint256 => string)) public userURI;

    modifier onlyAdmin() virtual {
        require(msg.sender == admin, "NOT_ADMIN");

        _;
    }

    modifier onlyOwnerOfOrAdmin(uint256 id) virtual {
        require(msg.sender == ownerOf[id] || msg.sender == admin, "NOT_AUTHORIZED");

        _;
    }

    function uri(uint256 id) public view override virtual returns (string memory) {
        string memory tokenURI = uris[id];

        if (bytes(tokenURI).length == 0) return baseURI;
        else return tokenURI;
    }

    /// -----------------------------------------------------------------------
    /// CONSTRUCTOR
    /// -----------------------------------------------------------------------

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _baseURI,
        uint256 _mintFee,
        address _admin
    ) payable {
        name = _name;

        symbol = _symbol;

        baseURI = _baseURI;

        mintFee = _mintFee;

        admin = _admin;

        emit BaseURIset(address(0), _baseURI);

        emit MintFeeSet(address(0), _mintFee);

        emit AdminSet(address(0), _admin);
    }

    /// -----------------------------------------------------------------------
    /// PUBLIC FUNCTIONS
    /// -----------------------------------------------------------------------

    function mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data,
        string calldata tokenURI,
        address owner
    ) public payable virtual {
        uint256 fee = mintFee;

        if (fee != 0) require(msg.value == fee, "NOT_FEE");

        require(!registered[id], "REGISTERED");

        if (owner != address(0)) {
            ownerOf[id] = owner;

            emit OwnerOfSet(address(0), owner, id);
        }

        registered[id] = true;

        __mint(to, id, amount, data, tokenURI);
    }

    function burn(
        address from, 
        uint256 id, 
        uint256 amount
    ) public payable virtual {
        require(
            msg.sender == from || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        __burn(from, id, amount);
    }

    /// -----------------------------------------------------------------------
    /// MANAGEMENT FUNCTIONS
    /// -----------------------------------------------------------------------

    function manageMint(
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data,
        string calldata tokenURI,
        address owner
    ) public payable virtual {
        address _owner = ownerOf[id];

        require(msg.sender == _owner || manager[msg.sender] || msg.sender == admin, "NOT_AUTHORIZED");

        if (!registered[id]) registered[id] = true;
        
        if (_owner == address(0) && (ownerOf[id] = owner) != address(0)) {
            emit OwnerOfSet(address(0), owner, id);
        }

        __mint(to, id, amount, data, tokenURI);
    }

    function manageBurn(
        address from,
        uint256 id,
        uint256 amount
    ) public payable virtual {
        require(msg.sender == ownerOf[id] || manager[msg.sender] || msg.sender == admin, "NOT_AUTHORIZED");

        __burn(from, id, amount);
    }

    /// -----------------------------------------------------------------------
    /// OWNER FUNCTIONS
    /// -----------------------------------------------------------------------
    
    function setOwnerOf(address to, uint256 id)
        public
        payable
        onlyOwnerOfOrAdmin(id)
        virtual
    {
        ownerOf[id] = to;

        emit OwnerOfSet(msg.sender, to, id);
    }

    function setTransferability(uint256 id, bool set) public payable onlyOwnerOfOrAdmin(id) virtual {
        transferable[id] = set;

        emit TransferabilitySet(msg.sender, id, set);
    }

    function setPermission(uint256 id, bool set) public payable onlyOwnerOfOrAdmin(id) virtual {
        permissioned[id] = set;

        emit PermissionSet(msg.sender, id, set);
    }

    function setUserPermission(
        address to, 
        uint256 id, 
        bool set
    ) public payable onlyOwnerOfOrAdmin(id) virtual {
        userPermissioned[to][id] = set;

        emit UserPermissionSet(msg.sender, to, id, set);
    }

    function setURI(uint256 id, string calldata tokenURI) public payable onlyOwnerOfOrAdmin(id) virtual {
        uris[id] = tokenURI;

        emit URI(tokenURI, id);
    }

    function setUserURI(
        address to, 
        uint256 id, 
        string calldata uuri
    ) public payable onlyOwnerOfOrAdmin(id) virtual {
        userURI[to][id] = uuri;

        emit UserURIset(msg.sender, to, id, uuri);
    }

    /// -----------------------------------------------------------------------
    /// ADMIN FUNCTIONS
    /// -----------------------------------------------------------------------

    function setManager(address to, bool set)
        public
        payable
        onlyAdmin
        virtual
    {
        manager[to] = set;

        emit ManagerSet(msg.sender, to, set);
    }
    
    function setAdmin(address _admin) public payable onlyAdmin virtual {
        admin = _admin;

        emit AdminSet(msg.sender, _admin);
    }

    function setBaseURI(string calldata _baseURI)
        public
        payable
        onlyAdmin
        virtual
    {
        baseURI = _baseURI;

        emit BaseURIset(msg.sender, _baseURI);
    }

    function setMintFee(uint256 _mintFee) public payable onlyAdmin virtual {
        mintFee = _mintFee;

        emit MintFeeSet(msg.sender, _mintFee);
    }

    function claimFee(address to, uint256 amount)
        public
        payable
        onlyAdmin
        virtual
    {
        assembly {
            if iszero(call(gas(), to, amount, 0, 0, 0, 0)) {
                mstore(0x00, hex"08c379a0") // Function selector of the error method.
                mstore(0x04, 0x20) // Offset of the error string.
                mstore(0x24, 19) // Length of the error string.
                mstore(0x44, "ETH_TRANSFER_FAILED") // The error string.
                revert(0x00, 0x64) // Revert with (offset, size).
            }
        }
    }

    /// -----------------------------------------------------------------------
    /// TRANSFER FUNCTIONS
    /// -----------------------------------------------------------------------

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public payable override virtual {
        super.safeTransferFrom(from, to, id, amount, data);

        require(transferable[id], "NONTRANSFERABLE");

        if (permissioned[id]) require(userPermissioned[from][id] && userPermissioned[to][id], "NOT_PERMITTED");

        _moveDelegates(delegates(from, id), delegates(to, id), id, amount);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public payable override virtual {
        super.safeBatchTransferFrom(from, to, ids, amounts, data);

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            require(transferable[id], "NONTRANSFERABLE");

            if (permissioned[id]) require(userPermissioned[from][id] && userPermissioned[to][id], "NOT_PERMITTED");

            _moveDelegates(delegates(from, id), delegates(to, id), id, amount);

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }
    }

    /// -----------------------------------------------------------------------
    /// INTERNAL FUNCTIONS
    /// -----------------------------------------------------------------------

    function __mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data,
        string calldata tokenURI
    ) internal virtual {
        _mint(to, id, amount, data);

        _safeCastTo216(totalSupply[id]);

        _moveDelegates(address(0), delegates(to, id), id, amount);

        if (bytes(tokenURI).length != 0) {
            uris[id] = tokenURI;

            emit URI(tokenURI, id);
        }
    }

    function __burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        _burn(from, id, amount);

        _moveDelegates(delegates(from, id), address(0), id, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"uint256","name":"_mintFee","type":"uint256"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"ManagerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintFee","type":"uint256"}],"name":"MintFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"OwnerOfSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"PermissionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"TransferabilitySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"UserPermissionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"string","name":"uuri","type":"string"}],"name":"UserURIset","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint40","name":"fromTimestamp","type":"uint40"},{"internalType":"uint216","name":"votes","type":"uint216"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"delegate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manageBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"name":"manageMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"manager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissioned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"set","type":"bool"}],"name":"setManager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"setOwnerOf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"set","type":"bool"}],"name":"setPermission","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"set","type":"bool"}],"name":"setTransferability","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"set","type":"bool"}],"name":"setUserPermission","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"uuri","type":"string"}],"name":"setUserURI","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userPermissioned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052604051620047da380380620047da8339810160408190526200002691620001f4565b600662000034868262000342565b50600762000043858262000342565b50600862000052848262000342565b506009829055600a80546001600160a01b0319166001600160a01b0383161790556040516000907ffeffbbb80afd8dd40bdfa309e27d3d8f87caf900c8ae1e18489937b901b0da3d90620000a89086906200040e565b60405180910390a26040518281526000907f56ac228efc924bd06f3fde5bc1911b723fe4a5553eedfe1422069f8fbd597d849060200160405180910390a26040516001600160a01b038216906000907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff97908290a3505050505062000443565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200015a57818101518382015260200162000140565b50506000910152565b600082601f8301126200017557600080fd5b81516001600160401b038082111562000192576200019262000127565b604051601f8301601f19908116603f01168101908282118183101715620001bd57620001bd62000127565b81604052838152866020858801011115620001d757600080fd5b620001ea8460208301602089016200013d565b9695505050505050565b600080600080600060a086880312156200020d57600080fd5b85516001600160401b03808211156200022557600080fd5b6200023389838a0162000163565b965060208801519150808211156200024a57600080fd5b6200025889838a0162000163565b955060408801519150808211156200026f57600080fd5b506200027e8882890162000163565b60608801516080890151919550935090506001600160a01b0381168114620002a557600080fd5b809150509295509295909350565b600181811c90821680620002c857607f821691505b602082108103620002e957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033d57600081815260208120601f850160051c81016020861015620003185750805b601f850160051c820191505b81811015620003395782815560010162000324565b5050505b505050565b81516001600160401b038111156200035e576200035e62000127565b62000376816200036f8454620002b3565b84620002ef565b602080601f831160018114620003ae5760008415620003955750858301515b600019600386901b1c1916600185901b17855562000339565b600085815260208120601f198616915b82811015620003df57888601518255948401946001909101908401620003be565b5085821015620003fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200042f8160408501602087016200013d565b601f01601f19169190910160400192915050565b61438780620004536000396000f3fe6080604052600436106102ba5760003560e01c8063836eebee1161016e578063d4d2e7f2116100cb578063f242432a1161007f578063f5298aca11610064578063f5298aca1461080c578063f851a4401461081f578063fc95ba431461084c57600080fd5b8063f242432a146107c9578063f4c3b4d7146107dc57600080fd5b8063dda40797116100b0578063dda4079714610768578063e985e9c51461077b578063eddd0d9c146107b657600080fd5b8063d4d2e7f214610725578063dc2a90f11461075557600080fd5b8063a22cb46511610122578063ac9650d811610107578063ac9650d814610693578063afa88bca146106c0578063bd85b039146106f857600080fd5b8063a22cb4651461066d578063a5e90eee1461068057600080fd5b806394bfa4581161015357806394bfa4581461063257806395d89b41146106455780639ea64fa41461065a57600080fd5b8063836eebee146105ff578063862440e21461061f57600080fd5b80632eb2c2d61161021c5780636352211e116101d05780637140d960116101b55780637140d960146105b95780637769ea0b146105cc578063807df56d146105df57600080fd5b80636352211e14610563578063704b6c02146105a657600080fd5b806349e5078c1161020157806349e5078c146105105780634e1273f41461052357806355f804b31461055057600080fd5b80632eb2c2d614610457578063387bbabd1461046a57600080fd5b806312156691116102735780631e9ffac9116102585780631e9ffac9146103df5780632606555a146103f257806327dd1b001461041257600080fd5b80631215669114610391578063190e9de0146103cc57600080fd5b8063026e402b116102a4578063026e402b1461033a57806306fdde031461034f5780630e89341c1461037157600080fd5b8062fdd58e146102bf57806301ffc9a71461030a575b600080fd5b3480156102cb57600080fd5b506102f76102da36600461384b565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561031657600080fd5b5061032a6103253660046138a6565b61087c565b6040519015158152602001610301565b61034d61034836600461384b565b610961565b005b34801561035b57600080fd5b50610364610a33565b6040516103019190613927565b34801561037d57600080fd5b5061036461038c36600461393a565b610ac1565b34801561039d57600080fd5b5061032a6103ac36600461384b565b601060209081526000928352604080842090915290825290205460ff1681565b61034d6103da36600461384b565b610c01565b61034d6103ed366004613953565b610d41565b3480156103fe57600080fd5b5061036461040d36600461384b565b610e15565b34801561041e57600080fd5b5061043261042d36600461384b565b610e39565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b61034d610465366004613a14565b610e84565b34801561047657600080fd5b506104d7610485366004613953565b600560209081526000938452604080852082529284528284209052825290205464ffffffffff8116906501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff1682565b6040805164ffffffffff90931683527affffffffffffffffffffffffffffffffffffffffffffffffffffff909116602083015201610301565b61034d61051e366004613adf565b611074565b34801561052f57600080fd5b5061054361053e366004613b1b565b6111bf565b6040516103019190613b87565b61034d61055e366004613bcb565b611337565b34801561056f57600080fd5b5061043261057e36600461393a565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61034d6105b4366004613c0d565b61141a565b61034d6105c7366004613c28565b61150c565b61034d6105da366004613c28565b611638565b3480156105eb57600080fd5b506102f76105fa36600461384b565b61175b565b34801561060b57600080fd5b506102f761061a366004613953565b611841565b61034d61062d366004613c54565b611ba8565b61034d610640366004613ca0565b611cb3565b34801561065157600080fd5b50610364611e10565b61034d610668366004613cee565b611e1d565b61034d61067b366004613d92565b611ffb565b61034d61068e366004613d92565b612093565b34801561069f57600080fd5b506106b36106ae366004613dbc565b612199565b6040516103019190613df2565b3480156106cc57600080fd5b506102f76106db36600461384b565b600460209081526000928352604080842090915290825290205481565b34801561070457600080fd5b506102f761071336600461393a565b60006020819052908152604090205481565b34801561073157600080fd5b5061032a610740366004613c0d565b600c6020526000908152604090205460ff1681565b61034d610763366004613cee565b612215565b61034d61077636600461384b565b612401565b34801561078757600080fd5b5061032a610796366004613e72565b600260209081526000928352604080842090915290825290205460ff1681565b61034d6107c436600461393a565b6124ec565b61034d6107d7366004613e9c565b6125aa565b3480156107e857600080fd5b5061032a6107f736600461393a565b600e6020526000908152604090205460ff1681565b61034d61081a366004613953565b612743565b34801561082b57600080fd5b50600a546104329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561085857600080fd5b5061032a61086736600461393a565b600f6020526000908152604090205460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061090f57507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061095b57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061096d3383610e39565b33600081815260036020908152604080832087845282529182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8981169182179092559251878152949550919391851692917f287e04de574701d97a55bd9ea85b32defecf76a607b8007ee9ae8c126bf7a746910160405180910390a4336000908152600160209081526040808320858452909152902054610a2e908290859085906127fc565b505050565b60068054610a4090613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90613f14565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b505050505081565b600081815260116020526040812080546060929190610adf90613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90613f14565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b50505050509050805160000361095b5760088054610b7590613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190613f14565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050915050919050565b50919050565b6000818152600b6020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331480610c4c5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000828152600b602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155915184815233917f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e910160405180910390a3505050565b6000828152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16331480610d825750336000908152600c602052604090205460ff165b80610da45750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b610a2e838383612a66565b601260209081526000928352604080842090915290825290208054610a4090613f14565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083208584529091528120549091168015610e7a5780610e7c565b835b949350505050565b610e948888888888888888612a87565b60008060005b8781101561106757888882818110610eb457610eb4613f61565b905060200201359250868682818110610ecf57610ecf613f61565b6000868152600e60209081526040909120549102929092013593505060ff16610f54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f4e5452414e5346455241424c4500000000000000000000000000000000006044820152606401610cae565b6000838152600f602052604090205460ff16156110415773ffffffffffffffffffffffffffffffffffffffff8b16600090815260106020908152604080832086845290915290205460ff168015610fdb575073ffffffffffffffffffffffffffffffffffffffff8a16600090815260106020908152604080832086845290915290205460ff165b611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f5045524d4954544544000000000000000000000000000000000000006044820152606401610cae565b61105f61104e8c85610e39565b6110588c86610e39565b85856127fc565b600101610e9a565b5050505050505050505050565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806110bf5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260106020908152604080832087845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582518781529182015233917feddd965981459de97ba24736b7f86682d883ccd91dd7216e944bf3461bd342ac910160405180910390a350505050565b606083821461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610cae565b8367ffffffffffffffff81111561124357611243613f90565b60405190808252806020026020018201604052801561126c578160200160208202803683370190505b50905060005b8481101561132e576001600087878481811061129057611290613f61565b90506020020160208101906112a59190613c0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106112f3576112f3613f61565b9050602002013581526020019081526020016000205482828151811061131b5761131b613f61565b6020908102919091010152600101611272565b50949350505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b60086113c5828483614005565b503373ffffffffffffffffffffffffffffffffffffffff167ffeffbbb80afd8dd40bdfa309e27d3d8f87caf900c8ae1e18489937b901b0da3d838360405161140e929190614168565b60405180910390a25050565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff9790600090a350565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806115575750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6115bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000838152600e602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582518681529182015233917f030b8b6f293952c4e53cc2ac59481057844588ce19c7d10ca5468e4d6938f19591015b60405180910390a2505050565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806116835750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6116e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000838152600f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582518681529182015233917fe5718fbb4306c0fd3ddee9c0c5459ee4b1a1dc19271ce6bd9447c6938e544af4910161162b565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832084845290915281205480820361179a57600061181c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832086845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b60008142116118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e44455445524d494e454400000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320868452909152812054908190036118ef576000915050611ba1565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501845290915290205464ffffffffff1683106119e05773ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909401835292905220547affffffffffffffffffffffffffffffffffffffffffffffffffffff65010000000000909104169050611ba1565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320878452825280832083805290915290205464ffffffffff16831015611a31576000915050611ba1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b81811115611b3e5773ffffffffffffffffffffffffffffffffffffffff87166000908152600560209081526040808320898452825280832060028686030485038085529083529281902081518083019092525464ffffffffff8116808352650100000000009091047affffffffffffffffffffffffffffffffffffffffffffffffffffff169282019290925290879003611b1857602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff169450611ba19350505050565b805164ffffffffff16871115611b3057819350611b37565b6001820392505b5050611a57565b5073ffffffffffffffffffffffffffffffffffffffff86166000908152600560209081526040808320888452825280832093835292905220546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff169150505b9392505050565b6000838152600b6020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331480611bf35750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000848152601160205260409020611c72838583614005565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8484604051611ca5929190614168565b60405180910390a250505050565b6000838152600b6020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331480611cfe5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611d64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff851660009081526012602090815260408083208784529091529020611d9f838583614005565b508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167faec44455c89e1ef893ccf0c00a460a424273aa64f494989d9d2f16b6ec2c1101868686604051611e019392919061417c565b60405180910390a35050505050565b60078054610a4090613f14565b6009548015611e8f57803414611e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f4e4f545f464545000000000000000000000000000000000000000000000000006044820152606401610cae565b6000888152600d602052604090205460ff1615611f08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f52454749535445524544000000000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff821615611faa576000888152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915590518b81529092917f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e910160405180910390a35b6000888152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ff089898989898989612ecf565b505050505050505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191015b60405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016851515908117909155915191825233917f5c7862b97fea73a5d9bf227ebff3c8c786277354825991f1fdc48846baffa83c9101612087565b6060811561095b5750604051818152602001600582901b808483378101805b825185018035602082018337600080823584305af46121db573d6000803e3d6000fd5b508083526020830192503d81523d6000602083013e3d01603f0167ffffffffffffffe0168183106121b85760408051919052949350505050565b6000878152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114806122575750336000908152600c602052604090205460ff165b806122795750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6122df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000888152600d602052604090205460ff1661232d576000888152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b73ffffffffffffffffffffffffffffffffffffffff811615801561239e57506000888152600b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915515155b156123f25760405188815273ffffffffffffffffffffffffffffffffffffffff8316906000907f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e9060200160405180910390a35b611ff089898989898989612ecf565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b60008060008084865af16124e8577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260136024527f4554485f5452414e534645525f4641494c45440000000000000000000000000060445260646000fd5b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b600981905560405181815233907f56ac228efc924bd06f3fde5bc1911b723fe4a5553eedfe1422069f8fbd597d849060200160405180910390a250565b6125b8868686868686612f6f565b6000848152600e602052604090205460ff16612630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f4e5452414e5346455241424c4500000000000000000000000000000000006044820152606401610cae565b6000848152600f602052604090205460ff161561271d5773ffffffffffffffffffffffffffffffffffffffff8616600090815260106020908152604080832087845290915290205460ff1680156126b7575073ffffffffffffffffffffffffffffffffffffffff8516600090815260106020908152604080832087845290915290205460ff165b61271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f5045524d4954544544000000000000000000000000000000000000006044820152606401610cae565b61273b61272a8786610e39565b6127348787610e39565b86866127fc565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff84161480610da4575073ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832033845290915290205460ff16610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561283757508015155b15612a605773ffffffffffffffffffffffffffffffffffffffff8416156129525773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083208584529091528120549081810361289857600061291a565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16905061294f8685848461294a88826141ce565b6132ac565b50505b73ffffffffffffffffffffffffffffffffffffffff831615612a605773ffffffffffffffffffffffffffffffffffffffff83166000908152600460209081526040808320858452909152812054908181036129ae576000612a30565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16905061273b8585848461294a88826141e1565b50505050565b612a718383836134ce565b610a2e612a7e8484610e39565b600084846127fc565b848314612af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610cae565b3373ffffffffffffffffffffffffffffffffffffffff89161480612b44575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff165b612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b60008060005b87811015612c7357888882818110612bca57612bca613f61565b905060200201359250868682818110612be557612be5613f61565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260016020908152604080832089845282528220805493909102949094013595508593925090612c319084906141ce565b909155505073ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020818152604080842087855290915290912080548401905501612bb0565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051612cee949392919061423f565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15612e46576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c8190612d759033908f908e908e908e908e908e908e90600401614271565b6020604051808303816000875af1158015612d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db891906142e2565b7fffffffff000000000000000000000000000000000000000000000000000000001614612e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b612ec3565b73ffffffffffffffffffffffffffffffffffffffff8916612ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b50505050505050505050565b612edc878787878761357e565b600086815260208190526040902054612ef4906137e0565b50612f0b6000612f048989610e39565b88886127fc565b8015612f66576000868152601160205260409020612f2a828483614005565b50857f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8383604051612f5d929190614168565b60405180910390a25b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff87161480612fc3575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff165b613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600160209081526040808320878452909152812080548592906130699084906141ce565b909155505073ffffffffffffffffffffffffffffffffffffffff85811660008181526001602090815260408083208984528252918290208054880190558151888152908101879052919289169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b1561322f576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061315e9033908b908a908a908a908a906004016142ff565b6020604051808303816000875af115801561317d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a191906142e2565b7fffffffff00000000000000000000000000000000000000000000000000000000161461322a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b61273b565b73ffffffffffffffffffffffffffffffffffffffff851661273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b821580159061331b575073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701845290915290205464ffffffffff1642145b156133c157613329816137e0565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832088845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88018452909152902080547affffffffffffffffffffffffffffffffffffffffffffffffffffff92909216650100000000000264ffffffffff90921691909117905561347e565b60405180604001604052806133d54261380e565b64ffffffffff1681526020016133ea836137e0565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff871660008181526005602090815260408083208a845282528083208984528252808320865196830151909516650100000000000264ffffffffff909616959095179093559081526004825282812087825290915220805460010190555b6040805183815260208101839052859173ffffffffffffffffffffffffffffffffffffffff8816917f21a99d51b8a0a2e2ead709843a1ecfaab977908135cf1c085c0a6246eea6e0f09101611e01565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083208584529091528120805483929061350e9084906141ce565b909155505060008281526020818152604080832080548590039055805185815291820184905273ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6000848152602081905260408120805485929061359c9084906141e1565b909155505073ffffffffffffffffffffffffffffffffffffffff851660008181526001602090815260408083208884528252808320805488019055805188815291820187905233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b1561375c576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061368b9033906000908a908a908a908a906004016142ff565b6020604051808303816000875af11580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce91906142e2565b7fffffffff000000000000000000000000000000000000000000000000000000001614613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b6137d9565b73ffffffffffffffffffffffffffffffffffffffff85166137d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b5050505050565b60007b01000000000000000000000000000000000000000000000000000000821061380a57600080fd5b5090565b600065010000000000821061380a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461384657600080fd5b919050565b6000806040838503121561385e57600080fd5b61386783613822565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146138a357600080fd5b50565b6000602082840312156138b857600080fd5b8135611ba181613875565b6000815180845260005b818110156138e9576020818501810151868301820152016138cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611ba160208301846138c3565b60006020828403121561394c57600080fd5b5035919050565b60008060006060848603121561396857600080fd5b61397184613822565b95602085013595506040909401359392505050565b60008083601f84011261399857600080fd5b50813567ffffffffffffffff8111156139b057600080fd5b6020830191508360208260051b85010111156139cb57600080fd5b9250929050565b60008083601f8401126139e457600080fd5b50813567ffffffffffffffff8111156139fc57600080fd5b6020830191508360208285010111156139cb57600080fd5b60008060008060008060008060a0898b031215613a3057600080fd5b613a3989613822565b9750613a4760208a01613822565b9650604089013567ffffffffffffffff80821115613a6457600080fd5b613a708c838d01613986565b909850965060608b0135915080821115613a8957600080fd5b613a958c838d01613986565b909650945060808b0135915080821115613aae57600080fd5b50613abb8b828c016139d2565b999c989b5096995094979396929594505050565b8035801515811461384657600080fd5b600080600060608486031215613af457600080fd5b613afd84613822565b925060208401359150613b1260408501613acf565b90509250925092565b60008060008060408587031215613b3157600080fd5b843567ffffffffffffffff80821115613b4957600080fd5b613b5588838901613986565b90965094506020870135915080821115613b6e57600080fd5b50613b7b87828801613986565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613bbf57835183529284019291840191600101613ba3565b50909695505050505050565b60008060208385031215613bde57600080fd5b823567ffffffffffffffff811115613bf557600080fd5b613c01858286016139d2565b90969095509350505050565b600060208284031215613c1f57600080fd5b611ba182613822565b60008060408385031215613c3b57600080fd5b82359150613c4b60208401613acf565b90509250929050565b600080600060408486031215613c6957600080fd5b83359250602084013567ffffffffffffffff811115613c8757600080fd5b613c93868287016139d2565b9497909650939450505050565b60008060008060608587031215613cb657600080fd5b613cbf85613822565b935060208501359250604085013567ffffffffffffffff811115613ce257600080fd5b613b7b878288016139d2565b60008060008060008060008060c0898b031215613d0a57600080fd5b613d1389613822565b97506020890135965060408901359550606089013567ffffffffffffffff80821115613d3e57600080fd5b613d4a8c838d016139d2565b909750955060808b0135915080821115613d6357600080fd5b50613d708b828c016139d2565b9094509250613d83905060a08a01613822565b90509295985092959890939650565b60008060408385031215613da557600080fd5b613dae83613822565b9150613c4b60208401613acf565b60008060208385031215613dcf57600080fd5b823567ffffffffffffffff811115613de657600080fd5b613c0185828601613986565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613e65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613e538583516138c3565b94509285019290850190600101613e19565b5092979650505050505050565b60008060408385031215613e8557600080fd5b613e8e83613822565b9150613c4b60208401613822565b60008060008060008060a08789031215613eb557600080fd5b613ebe87613822565b9550613ecc60208801613822565b94506040870135935060608701359250608087013567ffffffffffffffff811115613ef657600080fd5b613f0289828a016139d2565b979a9699509497509295939492505050565b600181811c90821680613f2857607f821691505b602082108103610bfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610a2e57600081815260208120601f850160051c81016020861015613fe65750805b601f850160051c820191505b8181101561273b57828155600101613ff2565b67ffffffffffffffff83111561401d5761401d613f90565b6140318361402b8354613f14565b83613fbf565b6000601f841160018114614083576000851561404d5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556137d9565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140d257868501358255602094850194600190920191016140b2565b508682101561410d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000610e7c60208301848661411f565b83815260406020820152600061419660408301848661411f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561095b5761095b61419f565b8082018082111561095b5761095b61419f565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561422657600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006142536040830186886141f4565b82810360208401526142668185876141f4565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a060408301526142ab60a08301888a6141f4565b82810360608401526142be8187896141f4565b905082810360808401526142d381858761411f565b9b9a5050505050505050505050565b6000602082840312156142f457600080fd5b8151611ba181613875565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261434560a08301848661411f565b9897505050505050505056fea2646970667358221220918dd42ef83a8664ad39802bec39bed68dc0a872a7370ff03514aea462ec8b9064736f6c6343000810003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a200000000000000000000000000000000000000000000000000000000000000015577261707072204c4c43202844656c617761726529000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c4c430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b504c414345484f4c444552000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102ba5760003560e01c8063836eebee1161016e578063d4d2e7f2116100cb578063f242432a1161007f578063f5298aca11610064578063f5298aca1461080c578063f851a4401461081f578063fc95ba431461084c57600080fd5b8063f242432a146107c9578063f4c3b4d7146107dc57600080fd5b8063dda40797116100b0578063dda4079714610768578063e985e9c51461077b578063eddd0d9c146107b657600080fd5b8063d4d2e7f214610725578063dc2a90f11461075557600080fd5b8063a22cb46511610122578063ac9650d811610107578063ac9650d814610693578063afa88bca146106c0578063bd85b039146106f857600080fd5b8063a22cb4651461066d578063a5e90eee1461068057600080fd5b806394bfa4581161015357806394bfa4581461063257806395d89b41146106455780639ea64fa41461065a57600080fd5b8063836eebee146105ff578063862440e21461061f57600080fd5b80632eb2c2d61161021c5780636352211e116101d05780637140d960116101b55780637140d960146105b95780637769ea0b146105cc578063807df56d146105df57600080fd5b80636352211e14610563578063704b6c02146105a657600080fd5b806349e5078c1161020157806349e5078c146105105780634e1273f41461052357806355f804b31461055057600080fd5b80632eb2c2d614610457578063387bbabd1461046a57600080fd5b806312156691116102735780631e9ffac9116102585780631e9ffac9146103df5780632606555a146103f257806327dd1b001461041257600080fd5b80631215669114610391578063190e9de0146103cc57600080fd5b8063026e402b116102a4578063026e402b1461033a57806306fdde031461034f5780630e89341c1461037157600080fd5b8062fdd58e146102bf57806301ffc9a71461030a575b600080fd5b3480156102cb57600080fd5b506102f76102da36600461384b565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561031657600080fd5b5061032a6103253660046138a6565b61087c565b6040519015158152602001610301565b61034d61034836600461384b565b610961565b005b34801561035b57600080fd5b50610364610a33565b6040516103019190613927565b34801561037d57600080fd5b5061036461038c36600461393a565b610ac1565b34801561039d57600080fd5b5061032a6103ac36600461384b565b601060209081526000928352604080842090915290825290205460ff1681565b61034d6103da36600461384b565b610c01565b61034d6103ed366004613953565b610d41565b3480156103fe57600080fd5b5061036461040d36600461384b565b610e15565b34801561041e57600080fd5b5061043261042d36600461384b565b610e39565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b61034d610465366004613a14565b610e84565b34801561047657600080fd5b506104d7610485366004613953565b600560209081526000938452604080852082529284528284209052825290205464ffffffffff8116906501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff1682565b6040805164ffffffffff90931683527affffffffffffffffffffffffffffffffffffffffffffffffffffff909116602083015201610301565b61034d61051e366004613adf565b611074565b34801561052f57600080fd5b5061054361053e366004613b1b565b6111bf565b6040516103019190613b87565b61034d61055e366004613bcb565b611337565b34801561056f57600080fd5b5061043261057e36600461393a565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61034d6105b4366004613c0d565b61141a565b61034d6105c7366004613c28565b61150c565b61034d6105da366004613c28565b611638565b3480156105eb57600080fd5b506102f76105fa36600461384b565b61175b565b34801561060b57600080fd5b506102f761061a366004613953565b611841565b61034d61062d366004613c54565b611ba8565b61034d610640366004613ca0565b611cb3565b34801561065157600080fd5b50610364611e10565b61034d610668366004613cee565b611e1d565b61034d61067b366004613d92565b611ffb565b61034d61068e366004613d92565b612093565b34801561069f57600080fd5b506106b36106ae366004613dbc565b612199565b6040516103019190613df2565b3480156106cc57600080fd5b506102f76106db36600461384b565b600460209081526000928352604080842090915290825290205481565b34801561070457600080fd5b506102f761071336600461393a565b60006020819052908152604090205481565b34801561073157600080fd5b5061032a610740366004613c0d565b600c6020526000908152604090205460ff1681565b61034d610763366004613cee565b612215565b61034d61077636600461384b565b612401565b34801561078757600080fd5b5061032a610796366004613e72565b600260209081526000928352604080842090915290825290205460ff1681565b61034d6107c436600461393a565b6124ec565b61034d6107d7366004613e9c565b6125aa565b3480156107e857600080fd5b5061032a6107f736600461393a565b600e6020526000908152604090205460ff1681565b61034d61081a366004613953565b612743565b34801561082b57600080fd5b50600a546104329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561085857600080fd5b5061032a61086736600461393a565b600f6020526000908152604090205460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061090f57507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061095b57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061096d3383610e39565b33600081815260036020908152604080832087845282529182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8981169182179092559251878152949550919391851692917f287e04de574701d97a55bd9ea85b32defecf76a607b8007ee9ae8c126bf7a746910160405180910390a4336000908152600160209081526040808320858452909152902054610a2e908290859085906127fc565b505050565b60068054610a4090613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90613f14565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b505050505081565b600081815260116020526040812080546060929190610adf90613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90613f14565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b50505050509050805160000361095b5760088054610b7590613f14565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190613f14565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050915050919050565b50919050565b6000818152600b6020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331480610c4c5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000828152600b602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155915184815233917f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e910160405180910390a3505050565b6000828152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16331480610d825750336000908152600c602052604090205460ff165b80610da45750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b610a2e838383612a66565b601260209081526000928352604080842090915290825290208054610a4090613f14565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083208584529091528120549091168015610e7a5780610e7c565b835b949350505050565b610e948888888888888888612a87565b60008060005b8781101561106757888882818110610eb457610eb4613f61565b905060200201359250868682818110610ecf57610ecf613f61565b6000868152600e60209081526040909120549102929092013593505060ff16610f54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f4e5452414e5346455241424c4500000000000000000000000000000000006044820152606401610cae565b6000838152600f602052604090205460ff16156110415773ffffffffffffffffffffffffffffffffffffffff8b16600090815260106020908152604080832086845290915290205460ff168015610fdb575073ffffffffffffffffffffffffffffffffffffffff8a16600090815260106020908152604080832086845290915290205460ff165b611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f5045524d4954544544000000000000000000000000000000000000006044820152606401610cae565b61105f61104e8c85610e39565b6110588c86610e39565b85856127fc565b600101610e9a565b5050505050505050505050565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806110bf5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260106020908152604080832087845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582518781529182015233917feddd965981459de97ba24736b7f86682d883ccd91dd7216e944bf3461bd342ac910160405180910390a350505050565b606083821461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610cae565b8367ffffffffffffffff81111561124357611243613f90565b60405190808252806020026020018201604052801561126c578160200160208202803683370190505b50905060005b8481101561132e576001600087878481811061129057611290613f61565b90506020020160208101906112a59190613c0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106112f3576112f3613f61565b9050602002013581526020019081526020016000205482828151811061131b5761131b613f61565b6020908102919091010152600101611272565b50949350505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b60086113c5828483614005565b503373ffffffffffffffffffffffffffffffffffffffff167ffeffbbb80afd8dd40bdfa309e27d3d8f87caf900c8ae1e18489937b901b0da3d838360405161140e929190614168565b60405180910390a25050565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff9790600090a350565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806115575750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6115bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000838152600e602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582518681529182015233917f030b8b6f293952c4e53cc2ac59481057844588ce19c7d10ca5468e4d6938f19591015b60405180910390a2505050565b6000828152600b6020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314806116835750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6116e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000838152600f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582518681529182015233917fe5718fbb4306c0fd3ddee9c0c5459ee4b1a1dc19271ce6bd9447c6938e544af4910161162b565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832084845290915281205480820361179a57600061181c565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020908152604080832086845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b60008142116118ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e44455445524d494e454400000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320868452909152812054908190036118ef576000915050611ba1565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501845290915290205464ffffffffff1683106119e05773ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909401835292905220547affffffffffffffffffffffffffffffffffffffffffffffffffffff65010000000000909104169050611ba1565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320878452825280832083805290915290205464ffffffffff16831015611a31576000915050611ba1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b81811115611b3e5773ffffffffffffffffffffffffffffffffffffffff87166000908152600560209081526040808320898452825280832060028686030485038085529083529281902081518083019092525464ffffffffff8116808352650100000000009091047affffffffffffffffffffffffffffffffffffffffffffffffffffff169282019290925290879003611b1857602001517affffffffffffffffffffffffffffffffffffffffffffffffffffff169450611ba19350505050565b805164ffffffffff16871115611b3057819350611b37565b6001820392505b5050611a57565b5073ffffffffffffffffffffffffffffffffffffffff86166000908152600560209081526040808320888452825280832093835292905220546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff169150505b9392505050565b6000838152600b6020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331480611bf35750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000848152601160205260409020611c72838583614005565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8484604051611ca5929190614168565b60405180910390a250505050565b6000838152600b6020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331480611cfe5750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b611d64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff851660009081526012602090815260408083208784529091529020611d9f838583614005565b508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167faec44455c89e1ef893ccf0c00a460a424273aa64f494989d9d2f16b6ec2c1101868686604051611e019392919061417c565b60405180910390a35050505050565b60078054610a4090613f14565b6009548015611e8f57803414611e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f4e4f545f464545000000000000000000000000000000000000000000000000006044820152606401610cae565b6000888152600d602052604090205460ff1615611f08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f52454749535445524544000000000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff821615611faa576000888152600b6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915590518b81529092917f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e910160405180910390a35b6000888152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ff089898989898989612ecf565b505050505050505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191015b60405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016851515908117909155915191825233917f5c7862b97fea73a5d9bf227ebff3c8c786277354825991f1fdc48846baffa83c9101612087565b6060811561095b5750604051818152602001600582901b808483378101805b825185018035602082018337600080823584305af46121db573d6000803e3d6000fd5b508083526020830192503d81523d6000602083013e3d01603f0167ffffffffffffffe0168183106121b85760408051919052949350505050565b6000878152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114806122575750336000908152600c602052604090205460ff165b806122795750600a5473ffffffffffffffffffffffffffffffffffffffff1633145b6122df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b6000888152600d602052604090205460ff1661232d576000888152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b73ffffffffffffffffffffffffffffffffffffffff811615801561239e57506000888152600b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915515155b156123f25760405188815273ffffffffffffffffffffffffffffffffffffffff8316906000907f0c0103fd62c23e8538ac757958ac703a4714b7a2a577784d90669a8966d09a2e9060200160405180910390a35b611ff089898989898989612ecf565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b60008060008084865af16124e8577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260136024527f4554485f5452414e534645525f4641494c45440000000000000000000000000060445260646000fd5b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e4f545f41444d494e00000000000000000000000000000000000000000000006044820152606401610cae565b600981905560405181815233907f56ac228efc924bd06f3fde5bc1911b723fe4a5553eedfe1422069f8fbd597d849060200160405180910390a250565b6125b8868686868686612f6f565b6000848152600e602052604090205460ff16612630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f4e5452414e5346455241424c4500000000000000000000000000000000006044820152606401610cae565b6000848152600f602052604090205460ff161561271d5773ffffffffffffffffffffffffffffffffffffffff8616600090815260106020908152604080832087845290915290205460ff1680156126b7575073ffffffffffffffffffffffffffffffffffffffff8516600090815260106020908152604080832087845290915290205460ff165b61271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f5045524d4954544544000000000000000000000000000000000000006044820152606401610cae565b61273b61272a8786610e39565b6127348787610e39565b86866127fc565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff84161480610da4575073ffffffffffffffffffffffffffffffffffffffff8316600090815260026020908152604080832033845290915290205460ff16610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561283757508015155b15612a605773ffffffffffffffffffffffffffffffffffffffff8416156129525773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083208584529091528120549081810361289857600061291a565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16905061294f8685848461294a88826141ce565b6132ac565b50505b73ffffffffffffffffffffffffffffffffffffffff831615612a605773ffffffffffffffffffffffffffffffffffffffff83166000908152600460209081526040808320858452909152812054908181036129ae576000612a30565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860184529091529020546501000000000090047affffffffffffffffffffffffffffffffffffffffffffffffffffff165b7affffffffffffffffffffffffffffffffffffffffffffffffffffff16905061273b8585848461294a88826141e1565b50505050565b612a718383836134ce565b610a2e612a7e8484610e39565b600084846127fc565b848314612af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610cae565b3373ffffffffffffffffffffffffffffffffffffffff89161480612b44575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff165b612baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b60008060005b87811015612c7357888882818110612bca57612bca613f61565b905060200201359250868682818110612be557612be5613f61565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260016020908152604080832089845282528220805493909102949094013595508593925090612c319084906141ce565b909155505073ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020818152604080842087855290915290912080548401905501612bb0565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051612cee949392919061423f565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15612e46576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c8190612d759033908f908e908e908e908e908e908e90600401614271565b6020604051808303816000875af1158015612d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db891906142e2565b7fffffffff000000000000000000000000000000000000000000000000000000001614612e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b612ec3565b73ffffffffffffffffffffffffffffffffffffffff8916612ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b50505050505050505050565b612edc878787878761357e565b600086815260208190526040902054612ef4906137e0565b50612f0b6000612f048989610e39565b88886127fc565b8015612f66576000868152601160205260409020612f2a828483614005565b50857f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8383604051612f5d929190614168565b60405180910390a25b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff87161480612fc3575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff165b613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610cae565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600160209081526040808320878452909152812080548592906130699084906141ce565b909155505073ffffffffffffffffffffffffffffffffffffffff85811660008181526001602090815260408083208984528252918290208054880190558151888152908101879052919289169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b1561322f576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061315e9033908b908a908a908a908a906004016142ff565b6020604051808303816000875af115801561317d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a191906142e2565b7fffffffff00000000000000000000000000000000000000000000000000000000161461322a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b61273b565b73ffffffffffffffffffffffffffffffffffffffff851661273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b821580159061331b575073ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832087845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8701845290915290205464ffffffffff1642145b156133c157613329816137e0565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832088845282528083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88018452909152902080547affffffffffffffffffffffffffffffffffffffffffffffffffffff92909216650100000000000264ffffffffff90921691909117905561347e565b60405180604001604052806133d54261380e565b64ffffffffff1681526020016133ea836137e0565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff871660008181526005602090815260408083208a845282528083208984528252808320865196830151909516650100000000000264ffffffffff909616959095179093559081526004825282812087825290915220805460010190555b6040805183815260208101839052859173ffffffffffffffffffffffffffffffffffffffff8816917f21a99d51b8a0a2e2ead709843a1ecfaab977908135cf1c085c0a6246eea6e0f09101611e01565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083208584529091528120805483929061350e9084906141ce565b909155505060008281526020818152604080832080548590039055805185815291820184905273ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6000848152602081905260408120805485929061359c9084906141e1565b909155505073ffffffffffffffffffffffffffffffffffffffff851660008181526001602090815260408083208884528252808320805488019055805188815291820187905233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b1561375c576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061368b9033906000908a908a908a908a906004016142ff565b6020604051808303816000875af11580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce91906142e2565b7fffffffff000000000000000000000000000000000000000000000000000000001614613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610cae565b6137d9565b73ffffffffffffffffffffffffffffffffffffffff85166137d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610cae565b5050505050565b60007b01000000000000000000000000000000000000000000000000000000821061380a57600080fd5b5090565b600065010000000000821061380a57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461384657600080fd5b919050565b6000806040838503121561385e57600080fd5b61386783613822565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146138a357600080fd5b50565b6000602082840312156138b857600080fd5b8135611ba181613875565b6000815180845260005b818110156138e9576020818501810151868301820152016138cd565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611ba160208301846138c3565b60006020828403121561394c57600080fd5b5035919050565b60008060006060848603121561396857600080fd5b61397184613822565b95602085013595506040909401359392505050565b60008083601f84011261399857600080fd5b50813567ffffffffffffffff8111156139b057600080fd5b6020830191508360208260051b85010111156139cb57600080fd5b9250929050565b60008083601f8401126139e457600080fd5b50813567ffffffffffffffff8111156139fc57600080fd5b6020830191508360208285010111156139cb57600080fd5b60008060008060008060008060a0898b031215613a3057600080fd5b613a3989613822565b9750613a4760208a01613822565b9650604089013567ffffffffffffffff80821115613a6457600080fd5b613a708c838d01613986565b909850965060608b0135915080821115613a8957600080fd5b613a958c838d01613986565b909650945060808b0135915080821115613aae57600080fd5b50613abb8b828c016139d2565b999c989b5096995094979396929594505050565b8035801515811461384657600080fd5b600080600060608486031215613af457600080fd5b613afd84613822565b925060208401359150613b1260408501613acf565b90509250925092565b60008060008060408587031215613b3157600080fd5b843567ffffffffffffffff80821115613b4957600080fd5b613b5588838901613986565b90965094506020870135915080821115613b6e57600080fd5b50613b7b87828801613986565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613bbf57835183529284019291840191600101613ba3565b50909695505050505050565b60008060208385031215613bde57600080fd5b823567ffffffffffffffff811115613bf557600080fd5b613c01858286016139d2565b90969095509350505050565b600060208284031215613c1f57600080fd5b611ba182613822565b60008060408385031215613c3b57600080fd5b82359150613c4b60208401613acf565b90509250929050565b600080600060408486031215613c6957600080fd5b83359250602084013567ffffffffffffffff811115613c8757600080fd5b613c93868287016139d2565b9497909650939450505050565b60008060008060608587031215613cb657600080fd5b613cbf85613822565b935060208501359250604085013567ffffffffffffffff811115613ce257600080fd5b613b7b878288016139d2565b60008060008060008060008060c0898b031215613d0a57600080fd5b613d1389613822565b97506020890135965060408901359550606089013567ffffffffffffffff80821115613d3e57600080fd5b613d4a8c838d016139d2565b909750955060808b0135915080821115613d6357600080fd5b50613d708b828c016139d2565b9094509250613d83905060a08a01613822565b90509295985092959890939650565b60008060408385031215613da557600080fd5b613dae83613822565b9150613c4b60208401613acf565b60008060208385031215613dcf57600080fd5b823567ffffffffffffffff811115613de657600080fd5b613c0185828601613986565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613e65577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613e538583516138c3565b94509285019290850190600101613e19565b5092979650505050505050565b60008060408385031215613e8557600080fd5b613e8e83613822565b9150613c4b60208401613822565b60008060008060008060a08789031215613eb557600080fd5b613ebe87613822565b9550613ecc60208801613822565b94506040870135935060608701359250608087013567ffffffffffffffff811115613ef657600080fd5b613f0289828a016139d2565b979a9699509497509295939492505050565b600181811c90821680613f2857607f821691505b602082108103610bfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610a2e57600081815260208120601f850160051c81016020861015613fe65750805b601f850160051c820191505b8181101561273b57828155600101613ff2565b67ffffffffffffffff83111561401d5761401d613f90565b6140318361402b8354613f14565b83613fbf565b6000601f841160018114614083576000851561404d5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556137d9565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140d257868501358255602094850194600190920191016140b2565b508682101561410d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000610e7c60208301848661411f565b83815260406020820152600061419660408301848661411f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561095b5761095b61419f565b8082018082111561095b5761095b61419f565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561422657600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006142536040830186886141f4565b82810360208401526142668185876141f4565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a060408301526142ab60a08301888a6141f4565b82810360608401526142be8187896141f4565b905082810360808401526142d381858761411f565b9b9a5050505050505050505050565b6000602082840312156142f457600080fd5b8151611ba181613875565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261434560a08301848661411f565b9897505050505050505056fea2646970667358221220918dd42ef83a8664ad39802bec39bed68dc0a872a7370ff03514aea462ec8b9064736f6c63430008100033

Deployed Bytecode Sourcemap

17399:10694:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2027:64;;;;;;;;;;-1:-1:-1;2027:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;620:25:1;;;608:2;593:18;2027:64:0;;;;;;;;2633:350;;;;;;;;;;-1:-1:-1;2633:350:0;;;;;:::i;:::-;;:::i;:::-;;;1253:14:1;;1246:22;1228:41;;1216:2;1201:18;2633:350:0;1088:187:1;11314:356:0;;;;;;:::i;:::-;;:::i;:::-;;18551:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19430:221::-;;;;;;;;;;-1:-1:-1;19430:221:0;;;;;:::i;:::-;;:::i;18959:68::-;;;;;;;;;;-1:-1:-1;18959:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22686:214;;;;;;:::i;:::-;;:::i;22212:273::-;;;;;;:::i;:::-;;:::i;19085:61::-;;;;;;;;;;-1:-1:-1;19085:61:0;;;;;:::i;:::-;;:::i;9274:207::-;;;;;;;;;;-1:-1:-1;9274:207:0;;;;;:::i;:::-;;:::i;:::-;;;2680:42:1;2668:55;;;2650:74;;2638:2;2623:18;9274:207:0;2504:226:1;26240:957:0;;;;;;:::i;:::-;;:::i;8893:89::-;;;;;;;;;;-1:-1:-1;8893:89:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:12:1;4864:25;;;4846:44;;4938:56;4926:69;;;4921:2;4906:18;;4899:97;4819:18;8893:89:0;4674:328:1;23302:252:0;;;;;;:::i;:::-;;:::i;3183:596::-;;;;;;;;;;-1:-1:-1;3183:596:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24550:207::-;;;;;;:::i;:::-;;:::i;18701:42::-;;;;;;;;;;-1:-1:-1;18701:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24396:146;;;;;;:::i;:::-;;:::i;22908:194::-;;;;;;:::i;:::-;;:::i;23110:184::-;;;;;;:::i;:::-;;:::i;9489:438::-;;;;;;;;;;-1:-1:-1;9489:438:0;;;;;:::i;:::-;;:::i;9935:1371::-;;;;;;;;;;-1:-1:-1;9935:1371:0;;;;;:::i;:::-;;:::i;23562:173::-;;;;;;:::i;:::-;;:::i;23743:243::-;;;;;;:::i;:::-;;:::i;18578:20::-;;;;;;;;;;;;;:::i;20511:577::-;;;;;;:::i;:::-;;:::i;3787:215::-;;;;;;:::i;:::-;;:::i;24183:201::-;;;;;;:::i;:::-;;:::i;14711:2526::-;;;;;;;;;;-1:-1:-1;14711:2526:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8815:69::-;;;;;;;;;;-1:-1:-1;8815:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1972:46;;;;;;;;;;-1:-1:-1;1972:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;18752:39;;;;;;;;;;-1:-1:-1;18752:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21589:615;;;;;;:::i;:::-;;:::i;24931:596::-;;;;;;:::i;:::-;;:::i;2100:68::-;;;;;;;;;;-1:-1:-1;2100:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;24765:158;;;;;;:::i;:::-;;:::i;25727:505::-;;;;;;:::i;:::-;;:::i;18853:44::-;;;;;;;;;;-1:-1:-1;18853:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21096:291;;;;;;:::i;:::-;;:::i;18672:20::-;;;;;;;;;;-1:-1:-1;18672:20:0;;;;;;;;18906:44;;;;;;;;;;-1:-1:-1;18906:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2633:350;2709:4;2746:25;;;;;;:103;;-1:-1:-1;2824:25:0;;;;;2746:103;:182;;;-1:-1:-1;2903:25:0;;;;;2746:182;2726:202;2633:350;-1:-1:-1;;2633:350:0:o;11314:356::-;11397:23;11423:25;11433:10;11445:2;11423:9;:25::i;:::-;11472:10;11461:22;;;;:10;:22;;;;;;;;:26;;;;;;;;;:38;;;;:22;:38;;;;;;;;;11517:59;;620:25:1;;;11397:51:0;;-1:-1:-1;11461:38:0;;11517:59;;;;11472:10;11517:59;;593:18:1;11517:59:0;;;;;;;11646:10;11636:21;;;;:9;:21;;;;;;;;:25;;;;;;;;;11589:73;;11604:15;;11621:9;;11632:2;;11589:14;:73::i;:::-;11386:284;11314:356;;:::o;18551:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19430:221::-;19519:22;19544:8;;;:4;:8;;;;;19519:33;;19493:13;;19519:22;19544:8;19519:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19575:8;19569:22;19595:1;19569:27;19565:78;;19605:7;19598:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19430:221;;;:::o;19565:78::-;19508:143;19430:221;;;:::o;22686:214::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;;;;;;;;;22828:11:::1;::::0;;;:7:::1;:11;::::0;;;;;;;;:16;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;22862:30;;620:25:1;;;22873:10:0::1;::::0;22862:30:::1;::::0;593:18:1;22862:30:0::1;;;;;;;22686:214:::0;;;:::o;22212:273::-;22364:11;;;;:7;:11;;;;;;;;22350:10;:25;;:48;;-1:-1:-1;22387:10:0;22379:19;;;;:7;:19;;;;;;;;22350:48;:71;;;-1:-1:-1;22416:5:0;;;;22402:10;:19;22350:71;22342:98;;;;;;;13009:2:1;22342:98:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;22342:98:0;12807:338:1;22342:98:0;22453:24;22460:4;22466:2;22470:6;22453;:24::i;19085:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9274:207::-;9389:19;;;;9351:7;9389:19;;;:10;:19;;;;;;;;:23;;;;;;;;;9351:7;;9389:23;9432:21;;:41;;9466:7;9432:41;;;9456:7;9432:41;9425:48;9274:207;-1:-1:-1;;;;9274:207:0:o;26240:957::-;26465:57;26493:4;26499:2;26503:3;;26508:7;;26517:4;;26465:27;:57::i;:::-;26607:10;26628:14;26660:9;26655:535;26671:14;;;26655:535;;;26709:3;;26713:1;26709:6;;;;;;;:::i;:::-;;;;;;;26704:11;;26739:7;;26747:1;26739:10;;;;;;;:::i;:::-;26774:16;;;;:12;26739:10;26774:16;;;;;;;;26739:10;;;;;;;;-1:-1:-1;;26774:16:0;;26766:44;;;;;;;13541:2:1;26766:44:0;;;13523:21:1;13580:2;13560:18;;;13553:30;13619:17;13599:18;;;13592:45;13654:18;;26766:44:0;13339:339:1;26766:44:0;26831:16;;;;:12;:16;;;;;;;;26827:102;;;26857:22;;;;;;;:16;:22;;;;;;;;:26;;;;;;;;;;;:54;;;;-1:-1:-1;26887:20:0;;;;;;;:16;:20;;;;;;;;:24;;;;;;;;;;;26857:54;26849:80;;;;;;;13885:2:1;26849:80:0;;;13867:21:1;13924:2;13904:18;;;13897:30;13963:15;13943:18;;;13936:43;13996:18;;26849:80:0;13683:337:1;26849:80:0;26946:66;26961:19;26971:4;26977:2;26961:9;:19::i;:::-;26982:17;26992:2;26996;26982:9;:17::i;:::-;27001:2;27005:6;26946:14;:66::i;:::-;27160:3;;26655:535;;;;26454:743;;26240:957;;;;;;;;:::o;23302:252::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;12807:338:1;19325:75:0;23456:20:::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;:24;;;;;;;;;:30;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;23504:42;;14193:25:1;;;14234:18;;;14227:50;23522:10:0::1;::::0;23504:42:::1;::::0;14166:18:1;23504:42:0::1;;;;;;;23302:252:::0;;;;:::o;3183:596::-;3323:25;3374:27;;;3366:55;;;;;;;14490:2:1;3366:55:0;;;14472:21:1;14529:2;14509:18;;;14502:30;14568:17;14548:18;;;14541:45;14603:18;;3366:55:0;14288:339:1;3366:55:0;3459:6;3445:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3445:28:0;;3434:39;;3649:9;3644:117;3660:17;;;3644:117;;;3717:9;:20;3727:6;;3734:1;3727:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3717:20;;;;;;;;;;;;;;;:28;3738:3;;3742:1;3738:6;;;;;;;:::i;:::-;;;;;;;3717:28;;;;;;;;;;;;3703:8;3712:1;3703:11;;;;;;;;:::i;:::-;;;;;;;;;;:42;3679:3;;3644:117;;;;3183:596;;;;;;:::o;24550:207::-;19217:5;;;;19203:10;:19;19195:41;;;;;;;15023:2:1;19195:41:0;;;15005:21:1;15062:1;15042:18;;;15035:29;15100:11;15080:18;;;15073:39;15129:18;;19195:41:0;14821:332:1;19195:41:0;24681:7:::1;:18;24691:8:::0;;24681:7;:18:::1;:::i;:::-;;24728:10;24717:32;;;24740:8;;24717:32;;;;;;;:::i;:::-;;;;;;;;24550:207:::0;;:::o;24396:146::-;19217:5;;;;19203:10;:19;19195:41;;;;;;;15023:2:1;19195:41:0;;;15005:21:1;15062:1;15042:18;;;15035:29;15100:11;15080:18;;;15073:39;15129:18;;19195:41:0;14821:332:1;19195:41:0;24474:5:::1;:14:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;24506:28:::1;::::0;24515:10:::1;::::0;24506:28:::1;::::0;-1:-1:-1;;24506:28:0::1;24396:146:::0;:::o;22908:194::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;12807:338:1;19325:75:0;23015:16:::1;::::0;;;:12:::1;:16;::::0;;;;;;;;:22;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;23055:39;;14193:25:1;;;14234:18;;;14227:50;23074:10:0::1;::::0;23055:39:::1;::::0;14166:18:1;23055:39:0::1;;;;;;;;22908:194:::0;;;:::o;23110:184::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;12807:338:1;19325:75:0;23212:16:::1;::::0;;;:12:::1;:16;::::0;;;;;;;;:22;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;23252:34;;14193:25:1;;;14234:18;;;14227:50;23266:10:0::1;::::0;23252:34:::1;::::0;14166:18:1;23252:34:0::1;14025:258:1::0;9489:438:0;9726:23;;;9572:7;9726:23;;;:14;:23;;;;;;;;:27;;;;;;;;;9794:17;;;:114;;9907:1;9794:114;;;9835:20;;;;;;;:11;:20;;;;;;;;:24;;;;;;;;9860:16;;;9835:42;;;;;;;:48;;;;;;9794:114;9770:138;;;9489:438;-1:-1:-1;;;;9489:438:0:o;9935:1371::-;10106:7;10157:9;10139:15;:27;10131:52;;;;;;;18180:2:1;10131:52:0;;;18162:21:1;18219:2;18199:18;;;18192:30;18258:14;18238:18;;;18231:42;18290:18;;10131:52:0;17978:336:1;10131:52:0;10219:23;;;10196:20;10219:23;;;:14;:23;;;;;;;;:27;;;;;;;;;;10263:17;;;10259:31;;10289:1;10282:8;;;;;10259:31;10436:20;;;;;;;:11;:20;;;;;;;;:24;;;;;;;;10461:16;;;10436:42;;;;;;;:56;;;:86;-1:-1:-1;10414:179:0;;10545:20;;;;;;;:11;:20;;;;;;;;:24;;;;;;;;10570:16;;;;10545:42;;;;;;:48;;;;;;;;-1:-1:-1;10538:55:0;;10414:179;10614:20;;;;;;;:11;:20;;;;;;;;:24;;;;;;;;:27;;;;;;;;:41;;;:53;-1:-1:-1;10610:67:0;;;10676:1;10669:8;;;;;10610:67;10694:13;10740:16;;;10773:454;10788:5;10780;:13;10773:454;;;10902:20;;;10814:14;10902:20;;;:11;:20;;;;;;;;:24;;;;;;;;10857:1;10840:13;;;10839:19;10831:27;;10902:32;;;;;;;;;;10879:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10959:29;;;10955:257;;11020:8;;;11013:15;;;-1:-1:-1;11013:15:0;;-1:-1:-1;;;;11013:15:0;10955:257;11058:16;;:28;;;-1:-1:-1;11054:158:0;;;11119:6;11111:14;;11054:158;;;11191:1;11182:6;:10;11174:18;;11054:158;10795:432;;10773:454;;;-1:-1:-1;11250:20:0;;;;;;;:11;:20;;;;;;;;:24;;;;;;;;:31;;;;;;;:37;;;;;;;-1:-1:-1;;9935:1371:0;;;;;;:::o;23562:173::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;12807:338:1;19325:75:0;23673:8:::1;::::0;;;:4:::1;:8;::::0;;;;:19:::1;23684:8:::0;;23673;:19:::1;:::i;:::-;;23724:2;23710:17;23714:8;;23710:17;;;;;;;:::i;:::-;;;;;;;;23562:173:::0;;;;:::o;23743:243::-;19347:11;;;;:7;:11;;;;;;;;;;19333:10;:25;;:48;;-1:-1:-1;19376:5:0;;;;19362:10;:19;19333:48;19325:75;;;;;;;13009:2:1;19325:75:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;19325:75:0;12807:338:1;19325:75:0;23902:11:::1;::::0;::::1;;::::0;;;:7:::1;:11;::::0;;;;;;;:15;;;;;;;;:22:::1;23920:4:::0;;23902:15;:22:::1;:::i;:::-;;23965:2;23942:36;;23953:10;23942:36;;;23969:2;23973:4;;23942:36;;;;;;;;:::i;:::-;;;;;;;;23743:243:::0;;;;;:::o;18578:20::-;;;;;;;:::i;20511:577::-;20736:7;;20760:8;;20756:50;;20791:3;20778:9;:16;20770:36;;;;;;;19033:2:1;20770:36:0;;;19015:21:1;19072:1;19052:18;;;19045:29;19110:9;19090:18;;;19083:37;19137:18;;20770:36:0;18831:330:1;20770:36:0;20828:14;;;;:10;:14;;;;;;;;20827:15;20819:38;;;;;;;19368:2:1;20819:38:0;;;19350:21:1;19407:2;19387:18;;;19380:30;19446:12;19426:18;;;19419:40;19476:18;;20819:38:0;19166:334:1;20819:38:0;20874:19;;;;20870:126;;20910:11;;;;:7;:11;;;;;;;;:19;;;;;;;;;;;;;20951:33;;620:25:1;;;20910:19:0;;:11;20951:33;;593:18:1;20951:33:0;;;;;;;20870:126;21008:14;;;;:10;:14;;;;;:21;;;;21025:4;21008:21;;;21042:38;21049:2;21019;21057:6;21065:4;;21071:8;;21042:6;:38::i;:::-;20711:377;20511:577;;;;;;;;:::o;3787:215::-;3898:10;3881:28;;;;:16;:28;;;;;;;;;:38;;;;;;;;;;;;:49;;;;;;;;;;;;;3948:46;;1228:41:1;;;3881:38:0;;3898:10;3948:46;;1201:18:1;3948:46:0;;;;;;;;3787:215;;:::o;24183:201::-;19217:5;;;;19203:10;:19;19195:41;;;;;;;15023:2:1;19195:41:0;;;15005:21:1;15062:1;15042:18;;;15035:29;15100:11;15080:18;;;15073:39;15129:18;;19195:41:0;14821:332:1;19195:41:0;24310:11:::1;::::0;::::1;;::::0;;;:7:::1;:11;::::0;;;;;;;;:17;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;24345:31;;1228:41:1;;;24356:10:0::1;::::0;24345:31:::1;::::0;1201:18:1;24345:31:0::1;1088:187:1::0;14711:2526:0;14769:22;14831:11;14828:2391;;;-1:-1:-1;14879:4:0;14873:11;14946:28;;;15055:4;15042:18;15161:1;15157:19;;;;15280:11;15042:18;15258:39;15415:17;;;15530:1530;15670:7;15664:14;15651:11;15647:32;15944:1;15931:15;15856:4;15853:1;15849:12;15816:6;15777:228;16099:4;16093;16089:1;16076:15;16068:6;16057:9;16050:5;16037:67;16027:307;;16238:16;16232:4;16226;16211:44;16294:16;16288:4;16281:30;16027:307;;16440:6;16431:7;16424:23;16493:4;16484:7;16480:18;16469:29;;16611:16;16603:6;16596:32;16690:16;16684:4;16677;16669:6;16665:17;16650:57;16897:16;16885:29;16916:4;16881:40;16923:18;16877:65;17014:16;;;15530:1530;17004:37;17161:4;17155:11;;17184:20;;;17155:11;14711:2526;-1:-1:-1;;;;14711:2526:0:o;21589:615::-;21806:14;21823:11;;;:7;:11;;;;;;;;21855:10;:20;;;:43;;-1:-1:-1;21887:10:0;21879:19;;;;:7;:19;;;;;;;;21855:43;:66;;;-1:-1:-1;21916:5:0;;;;21902:10;:19;21855:66;21847:93;;;;;;;13009:2:1;21847:93:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;21847:93:0;12807:338:1;21847:93:0;21958:14;;;;:10;:14;;;;;;;;21953:42;;21974:14;;;;:10;:14;;;;;:21;;;;21991:4;21974:21;;;21953:42;22020:20;;;;:59;;;;-1:-1:-1;22077:1:0;22045:11;;;:7;:11;;;;;:19;;;;22044:35;22045:19;;;;;;;;22044:35;;22020:59;22016:130;;;22101:33;;620:25:1;;;22101:33:0;;;;22120:1;;22101:33;;608:2:1;593:18;22101:33:0;;;;;;;22016:130;22158:38;22165:2;22169;22173:6;22181:4;;22187:8;;22158:6;:38::i;24931:596::-;19217:5;;;;19203:10;:19;19195:41;;;;;;;15023:2:1;19195:41:0;;;15005:21:1;15062:1;15042:18;;;15035:29;15100:11;15080:18;;;15073:39;15129:18;;19195:41:0;14821:332:1;19195:41:0;25129:1:::1;25126::::0;25123::::1;25120::::0;25112:6:::1;25108:2;25101:5;25096:35;25086:423;;25165:13;25159:4;25152:27;25252:4;25246;25239:18;25319:2;25313:4;25306:16;25384:21;25378:4;25371:35;25458:4;25452;25445:18;25086:423;24931:596:::0;;:::o;24765:158::-;19217:5;;;;19203:10;:19;19195:41;;;;;;;15023:2:1;19195:41:0;;;15005:21:1;15062:1;15042:18;;;15035:29;15100:11;15080:18;;;15073:39;15129:18;;19195:41:0;14821:332:1;19195:41:0;24847:7:::1;:18:::0;;;24883:32:::1;::::0;620:25:1;;;24894:10:0::1;::::0;24883:32:::1;::::0;608:2:1;593:18;24883:32:0::1;;;;;;;24765:158:::0;:::o;25727:505::-;25923:50;25946:4;25952:2;25956;25960:6;25968:4;;25923:22;:50::i;:::-;25994:16;;;;:12;:16;;;;;;;;25986:44;;;;;;;13541:2:1;25986:44:0;;;13523:21:1;13580:2;13560:18;;;13553:30;13619:17;13599:18;;;13592:45;13654:18;;25986:44:0;13339:339:1;25986:44:0;26047:16;;;;:12;:16;;;;;;;;26043:102;;;26073:22;;;;;;;:16;:22;;;;;;;;:26;;;;;;;;;;;:54;;;;-1:-1:-1;26103:20:0;;;;;;;:16;:20;;;;;;;;:24;;;;;;;;;;;26073:54;26065:80;;;;;;;13885:2:1;26065:80:0;;;13867:21:1;13924:2;13904:18;;;13897:30;13963:15;13943:18;;;13936:43;13996:18;;26065:80:0;13683:337:1;26065:80:0;26158:66;26173:19;26183:4;26189:2;26173:9;:19::i;:::-;26194:17;26204:2;26208;26194:9;:17::i;:::-;26213:2;26217:6;26158:14;:66::i;:::-;25727:505;;;;;;:::o;21096:291::-;21244:10;:18;;;;;:56;;-1:-1:-1;21266:22:0;;;;;;;:16;:22;;;;;;;;21289:10;21266:34;;;;;;;;;;21222:120;;;;;;;13009:2:1;21222:120:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;21222:120:0;12807:338:1;11678:1331:0;11847:6;11837:16;;:6;:16;;;;:31;;;;-1:-1:-1;11857:11:0;;;11837:31;11833:1169;;;11889:20;;;;11885:527;;11950:22;;;11930:17;11950:22;;;:14;:22;;;;;;;;:26;;;;;;;;;;12171:14;;;:115;;12285:1;12171:115;;;12213:19;;;;;;;:11;:19;;;;;;;;:23;;;;;;;;12237:13;;;12213:38;;;;;;;:44;;;;;;12171:115;12159:127;;;-1:-1:-1;12326:70:0;12343:6;12351:2;12355:9;12159:127;12377:18;12389:6;12159:127;12377:18;:::i;:::-;12326:16;:70::i;:::-;11911:501;;11885:527;12432:20;;;;12428:563;;12493:22;;;12473:17;12493:22;;;:14;:22;;;;;;;;:26;;;;;;;;;;12730:14;;;:115;;12844:1;12730:115;;;12772:19;;;;;;;:11;:19;;;;;;;;:23;;;;;;;;12796:13;;;12772:38;;;;;;;:44;;;;;;12730:115;12718:127;;;-1:-1:-1;12905:70:0;12922:6;12930:2;12934:9;12718:127;12956:18;12968:6;12718:127;12956:18;:::i;12428:563::-;11678:1331;;;;:::o;27867:223::-;27987:23;27993:4;27999:2;28003:6;27987:5;:23::i;:::-;28023:59;28038:19;28048:4;28054:2;28038:9;:19::i;:::-;28067:1;28071:2;28075:6;28023:14;:59::i;4946:1451::-;5170:28;;;5162:56;;;;;;;14490:2:1;5162:56:0;;;14472:21:1;14529:2;14509:18;;;14502:30;14568:17;14548:18;;;14541:45;14603:18;;5162:56:0;14288:339:1;5162:56:0;5239:10;:18;;;;;:56;;-1:-1:-1;5261:22:0;;;;;;;:16;:22;;;;;;;;5284:10;5261:34;;;;;;;;;;5239:56;5231:83;;;;;;;13009:2:1;5231:83:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;5231:83:0;12807:338:1;5231:83:0;5399:10;5420:14;5452:9;5447:519;5463:14;;;5447:519;;;5501:3;;5505:1;5501:6;;;;;;;:::i;:::-;;;;;;;5496:11;;5531:7;;5539:1;5531:10;;;;;;;:::i;:::-;5558:15;;;;;;;:9;5531:10;5558:15;;;;;;;:19;;;;;;;:29;;5531:10;;;;;;;;;;-1:-1:-1;5531:10:0;;5558:19;-1:-1:-1;5558:15:0;:29;;5531:10;;5558:29;:::i;:::-;;;;-1:-1:-1;;5872:13:0;;;;;;;:9;:13;;;;;;;;:17;;;;;;;;;:27;;;;;;5936:3;5447:519;;;;6015:2;5983:49;;6009:4;5983:49;;5997:10;5983:49;;;6019:3;;6024:7;;5983:49;;;;;;;;;:::i;:::-;;;;;;;;6049:14;;;;:19;6045:344;;6111:85;;6221:52;6111:85;;;6221:52;6111:47;;;;6221:52;;6111:85;;6159:10;;6171:4;;6177:3;;;;6182:7;;;;6191:4;;;;6111:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:162;;;6085:240;;;;;;;22236:2:1;6085:240:0;;;22218:21:1;22275:2;22255:18;;;22248:30;22314:18;22294;;;22287:46;22350:18;;6085:240:0;22034:340:1;6085:240:0;6045:344;;;6351:16;;;6343:46;;;;;;;22581:2:1;6343:46:0;;;22563:21:1;22620:2;22600:18;;;22593:30;22659:19;22639:18;;;22632:47;22696:18;;6343:46:0;22379:341:1;6343:46:0;5151:1246;;4946:1451;;;;;;;;:::o;27397:462::-;27580:27;27586:2;27590;27594:6;27602:4;;27580:5;:27::i;:::-;27635:11;:15;;;;;;;;;;;27620:31;;:14;:31::i;:::-;;27664:57;27687:1;27691:17;27701:2;27705;27691:9;:17::i;:::-;27710:2;27714:6;27664:14;:57::i;:::-;27738:27;;27734:118;;27782:8;;;;:4;:8;;;;;:19;27793:8;;27782;:19;:::i;:::-;;27837:2;27823:17;27827:8;;27823:17;;;;;;;:::i;:::-;;;;;;;;27734:118;27397:462;;;;;;;:::o;4010:928::-;4205:10;:18;;;;;:56;;-1:-1:-1;4227:22:0;;;;;;;:16;:22;;;;;;;;4250:10;4227:34;;;;;;;;;;4205:56;4197:83;;;;;;;13009:2:1;4197:83:0;;;12991:21:1;13048:2;13028:18;;;13021:30;13087:16;13067:18;;;13060:44;13121:18;;4197:83:0;12807:338:1;4197:83:0;4293:15;;;;;;;:9;:15;;;;;;;;:19;;;;;;;;:29;;4316:6;;4293:15;:29;;4316:6;;4293:29;:::i;:::-;;;;-1:-1:-1;;4481:13:0;;;;;;;;:9;:13;;;;;;;;:17;;;;;;;;;:27;;;;;;4537:48;;22899:25:1;;;22940:18;;;22933:34;;;4481:13:0;;4537:48;;;4552:10;;4537:48;;22872:18:1;4537:48:0;;;;;;;4602:14;;;;:19;4598:332;;4664:78;;4767:47;4664:78;;;4767:47;4664:42;;;;4767:47;;4664:78;;4707:10;;4719:4;;4725:2;;4729:6;;4737:4;;;;4664:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:150;;;4638:228;;;;;;;22236:2:1;4638:228:0;;;22218:21:1;22275:2;22255:18;;;22248:30;22314:18;22294;;;22287:46;22350:18;;4638:228:0;22034:340:1;4638:228:0;4598:332;;;4892:16;;;4884:46;;;;;;;22581:2:1;4884:46:0;;;22563:21:1;22620:2;22600:18;;;22593:30;22659:19;22639:18;;;22632:47;22696:18;;4884:46:0;22379:341:1;13017:1034:0;13345:17;;;;;:132;;-1:-1:-1;13383:22:0;;;;;;;:11;:22;;;;;;;;:26;;;;;;;;13410:16;;;13383:44;;;;;;;:58;;;13462:15;13383:94;13345:132;13323:637;;;13565:64;13602:8;13565:14;:64::i;:::-;13512:22;;;;;;;:11;:22;;;;;;;;:26;;;;;;;;13539:16;;;13512:44;;;;;;;:117;;;;;;;;;;;;;;;;;;;13323:637;;;13713:129;;;;;;;;13746:30;13760:15;13746:13;:30::i;:::-;13713:129;;;;;;13799:24;13814:8;13799:14;:24::i;:::-;13713:129;;;;;;;13670:22;;;;;;;:11;:22;;;;;;;;:26;;;;;;;;:40;;;;;;;;:172;;;;;;;;;;;;;;;;;;;;;;13915:25;;;:14;:25;;;;;:29;;;;;;;13913:31;;13670:172;13913:31;;;13323:637;13988:55;;;22899:25:1;;;22955:2;22940:18;;22933:34;;;14020:2:0;;13988:55;;;;;;22872:18:1;13988:55:0;22725:248:1;7412:422:0;7531:15;;;;;;;:9;:15;;;;;;;;:19;;;;;;;;:29;;7554:6;;7531:15;:29;;7554:6;;7531:29;:::i;:::-;;;;-1:-1:-1;;7716:11:0;:15;;;;;;;;;;;:25;;;;;;;7770:56;;22899:25:1;;;22940:18;;;22933:34;;;7770:56:0;;;;7785:10;;7770:56;;22872:18:1;7770:56:0;;;;;;;7412:422;;;:::o;6603:801::-;6750:11;:15;;;;;;;;;;:25;;6769:6;;6750:11;:25;;6769:6;;6750:25;:::i;:::-;;;;-1:-1:-1;;6935:13:0;;;;;;;:9;:13;;;;;;;;:17;;;;;;;;:27;;;;;;6991:54;;22899:25:1;;;22940:18;;;22933:34;;;7006:10:0;;6991:54;;22872:18:1;6991:54:0;;;;;;;7062:14;;;;:19;7058:338;;7124:84;;7233:47;7124:84;;;7233:47;7124:42;;;;7233:47;;7124:84;;7167:10;;7187:1;;7191:2;;7195:6;;7203:4;;;;7124:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:156;;;7098:234;;;;;;;22236:2:1;7098:234:0;;;22218:21:1;22275:2;22255:18;;;22248:30;22314:18;22294;;;22287:46;22350:18;;7098:234:0;22034:340:1;7098:234:0;7058:338;;;7358:16;;;7350:46;;;;;;;22581:2:1;7350:46:0;;;22563:21:1;22620:2;22600:18;;;22593:30;22659:19;22639:18;;;22632:47;22696:18;;7350:46:0;22379:341:1;7350:46:0;6603:801;;;;;:::o;14207:144::-;14273:9;14307:8;14303:1;:12;14295:21;;;;;;-1:-1:-1;14341:1:0;14207:144::o;14059:140::-;14124:8;14157:7;14153:1;:11;14145:20;;;;;14:196:1;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:1:o;656:177::-;741:66;734:5;730:78;723:5;720:89;710:117;;823:1;820;813:12;710:117;656:177;:::o;838:245::-;896:6;949:2;937:9;928:7;924:23;920:32;917:52;;;965:1;962;955:12;917:52;1004:9;991:23;1023:30;1047:5;1023:30;:::i;1280:482::-;1322:3;1360:5;1354:12;1387:6;1382:3;1375:19;1412:1;1422:162;1436:6;1433:1;1430:13;1422:162;;;1498:4;1554:13;;;1550:22;;1544:29;1526:11;;;1522:20;;1515:59;1451:12;1422:162;;;1426:3;1629:1;1622:4;1613:6;1608:3;1604:16;1600:27;1593:38;1751:4;1681:66;1676:2;1668:6;1664:15;1660:88;1655:3;1651:98;1647:109;1640:116;;;1280:482;;;;:::o;1767:220::-;1916:2;1905:9;1898:21;1879:4;1936:45;1977:2;1966:9;1962:18;1954:6;1936:45;:::i;1992:180::-;2051:6;2104:2;2092:9;2083:7;2079:23;2075:32;2072:52;;;2120:1;2117;2110:12;2072:52;-1:-1:-1;2143:23:1;;1992:180;-1:-1:-1;1992:180:1:o;2177:322::-;2254:6;2262;2270;2323:2;2311:9;2302:7;2298:23;2294:32;2291:52;;;2339:1;2336;2329:12;2291:52;2362:29;2381:9;2362:29;:::i;:::-;2352:39;2438:2;2423:18;;2410:32;;-1:-1:-1;2489:2:1;2474:18;;;2461:32;;2177:322;-1:-1:-1;;;2177:322:1:o;2735:367::-;2798:8;2808:6;2862:3;2855:4;2847:6;2843:17;2839:27;2829:55;;2880:1;2877;2870:12;2829:55;-1:-1:-1;2903:20:1;;2946:18;2935:30;;2932:50;;;2978:1;2975;2968:12;2932:50;3015:4;3007:6;3003:17;2991:29;;3075:3;3068:4;3058:6;3055:1;3051:14;3043:6;3039:27;3035:38;3032:47;3029:67;;;3092:1;3089;3082:12;3029:67;2735:367;;;;;:::o;3107:347::-;3158:8;3168:6;3222:3;3215:4;3207:6;3203:17;3199:27;3189:55;;3240:1;3237;3230:12;3189:55;-1:-1:-1;3263:20:1;;3306:18;3295:30;;3292:50;;;3338:1;3335;3328:12;3292:50;3375:4;3367:6;3363:17;3351:29;;3427:3;3420:4;3411:6;3403;3399:19;3395:30;3392:39;3389:59;;;3444:1;3441;3434:12;3459:1210;3619:6;3627;3635;3643;3651;3659;3667;3675;3728:3;3716:9;3707:7;3703:23;3699:33;3696:53;;;3745:1;3742;3735:12;3696:53;3768:29;3787:9;3768:29;:::i;:::-;3758:39;;3816:38;3850:2;3839:9;3835:18;3816:38;:::i;:::-;3806:48;;3905:2;3894:9;3890:18;3877:32;3928:18;3969:2;3961:6;3958:14;3955:34;;;3985:1;3982;3975:12;3955:34;4024:70;4086:7;4077:6;4066:9;4062:22;4024:70;:::i;:::-;4113:8;;-1:-1:-1;3998:96:1;-1:-1:-1;4201:2:1;4186:18;;4173:32;;-1:-1:-1;4217:16:1;;;4214:36;;;4246:1;4243;4236:12;4214:36;4285:72;4349:7;4338:8;4327:9;4323:24;4285:72;:::i;:::-;4376:8;;-1:-1:-1;4259:98:1;-1:-1:-1;4464:3:1;4449:19;;4436:33;;-1:-1:-1;4481:16:1;;;4478:36;;;4510:1;4507;4500:12;4478:36;;4549:60;4601:7;4590:8;4579:9;4575:24;4549:60;:::i;:::-;3459:1210;;;;-1:-1:-1;3459:1210:1;;-1:-1:-1;3459:1210:1;;;;;;4628:8;-1:-1:-1;;;3459:1210:1:o;5007:160::-;5072:20;;5128:13;;5121:21;5111:32;;5101:60;;5157:1;5154;5147:12;5172:322;5246:6;5254;5262;5315:2;5303:9;5294:7;5290:23;5286:32;5283:52;;;5331:1;5328;5321:12;5283:52;5354:29;5373:9;5354:29;:::i;:::-;5344:39;;5430:2;5419:9;5415:18;5402:32;5392:42;;5453:35;5484:2;5473:9;5469:18;5453:35;:::i;:::-;5443:45;;5172:322;;;;;:::o;5499:773::-;5621:6;5629;5637;5645;5698:2;5686:9;5677:7;5673:23;5669:32;5666:52;;;5714:1;5711;5704:12;5666:52;5754:9;5741:23;5783:18;5824:2;5816:6;5813:14;5810:34;;;5840:1;5837;5830:12;5810:34;5879:70;5941:7;5932:6;5921:9;5917:22;5879:70;:::i;:::-;5968:8;;-1:-1:-1;5853:96:1;-1:-1:-1;6056:2:1;6041:18;;6028:32;;-1:-1:-1;6072:16:1;;;6069:36;;;6101:1;6098;6091:12;6069:36;;6140:72;6204:7;6193:8;6182:9;6178:24;6140:72;:::i;:::-;5499:773;;;;-1:-1:-1;6231:8:1;-1:-1:-1;;;;5499:773:1:o;6277:632::-;6448:2;6500:21;;;6570:13;;6473:18;;;6592:22;;;6419:4;;6448:2;6671:15;;;;6645:2;6630:18;;;6419:4;6714:169;6728:6;6725:1;6722:13;6714:169;;;6789:13;;6777:26;;6858:15;;;;6823:12;;;;6750:1;6743:9;6714:169;;;-1:-1:-1;6900:3:1;;6277:632;-1:-1:-1;;;;;;6277:632:1:o;6914:410::-;6985:6;6993;7046:2;7034:9;7025:7;7021:23;7017:32;7014:52;;;7062:1;7059;7052:12;7014:52;7102:9;7089:23;7135:18;7127:6;7124:30;7121:50;;;7167:1;7164;7157:12;7121:50;7206:58;7256:7;7247:6;7236:9;7232:22;7206:58;:::i;:::-;7283:8;;7180:84;;-1:-1:-1;6914:410:1;-1:-1:-1;;;;6914:410:1:o;7329:186::-;7388:6;7441:2;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7480:29;7499:9;7480:29;:::i;7520:248::-;7585:6;7593;7646:2;7634:9;7625:7;7621:23;7617:32;7614:52;;;7662:1;7659;7652:12;7614:52;7698:9;7685:23;7675:33;;7727:35;7758:2;7747:9;7743:18;7727:35;:::i;:::-;7717:45;;7520:248;;;;;:::o;7773:478::-;7853:6;7861;7869;7922:2;7910:9;7901:7;7897:23;7893:32;7890:52;;;7938:1;7935;7928:12;7890:52;7974:9;7961:23;7951:33;;8035:2;8024:9;8020:18;8007:32;8062:18;8054:6;8051:30;8048:50;;;8094:1;8091;8084:12;8048:50;8133:58;8183:7;8174:6;8163:9;8159:22;8133:58;:::i;:::-;7773:478;;8210:8;;-1:-1:-1;8107:84:1;;-1:-1:-1;;;;7773:478:1:o;8256:552::-;8345:6;8353;8361;8369;8422:2;8410:9;8401:7;8397:23;8393:32;8390:52;;;8438:1;8435;8428:12;8390:52;8461:29;8480:9;8461:29;:::i;:::-;8451:39;;8537:2;8526:9;8522:18;8509:32;8499:42;;8592:2;8581:9;8577:18;8564:32;8619:18;8611:6;8608:30;8605:50;;;8651:1;8648;8641:12;8605:50;8690:58;8740:7;8731:6;8720:9;8716:22;8690:58;:::i;8813:1005::-;8940:6;8948;8956;8964;8972;8980;8988;8996;9049:3;9037:9;9028:7;9024:23;9020:33;9017:53;;;9066:1;9063;9056:12;9017:53;9089:29;9108:9;9089:29;:::i;:::-;9079:39;;9165:2;9154:9;9150:18;9137:32;9127:42;;9216:2;9205:9;9201:18;9188:32;9178:42;;9271:2;9260:9;9256:18;9243:32;9294:18;9335:2;9327:6;9324:14;9321:34;;;9351:1;9348;9341:12;9321:34;9390:58;9440:7;9431:6;9420:9;9416:22;9390:58;:::i;:::-;9467:8;;-1:-1:-1;9364:84:1;-1:-1:-1;9555:3:1;9540:19;;9527:33;;-1:-1:-1;9572:16:1;;;9569:36;;;9601:1;9598;9591:12;9569:36;;9640:60;9692:7;9681:8;9670:9;9666:24;9640:60;:::i;:::-;9719:8;;-1:-1:-1;9614:86:1;-1:-1:-1;9773:39:1;;-1:-1:-1;9807:3:1;9792:19;;9773:39;:::i;:::-;9763:49;;8813:1005;;;;;;;;;;;:::o;9823:254::-;9888:6;9896;9949:2;9937:9;9928:7;9924:23;9920:32;9917:52;;;9965:1;9962;9955:12;9917:52;9988:29;10007:9;9988:29;:::i;:::-;9978:39;;10036:35;10067:2;10056:9;10052:18;10036:35;:::i;10082:448::-;10179:6;10187;10240:2;10228:9;10219:7;10215:23;10211:32;10208:52;;;10256:1;10253;10246:12;10208:52;10296:9;10283:23;10329:18;10321:6;10318:30;10315:50;;;10361:1;10358;10351:12;10315:50;10400:70;10462:7;10453:6;10442:9;10438:22;10400:70;:::i;10535:860::-;10695:4;10724:2;10764;10753:9;10749:18;10794:2;10783:9;10776:21;10817:6;10852;10846:13;10883:6;10875;10868:22;10921:2;10910:9;10906:18;10899:25;;10983:2;10973:6;10970:1;10966:14;10955:9;10951:30;10947:39;10933:53;;11021:2;11013:6;11009:15;11042:1;11052:314;11066:6;11063:1;11060:13;11052:314;;;11155:66;11143:9;11135:6;11131:22;11127:95;11122:3;11115:108;11246:40;11279:6;11270;11264:13;11246:40;:::i;:::-;11236:50;-1:-1:-1;11344:12:1;;;;11309:15;;;;11088:1;11081:9;11052:314;;;-1:-1:-1;11383:6:1;;10535:860;-1:-1:-1;;;;;;;10535:860:1:o;11400:260::-;11468:6;11476;11529:2;11517:9;11508:7;11504:23;11500:32;11497:52;;;11545:1;11542;11535:12;11497:52;11568:29;11587:9;11568:29;:::i;:::-;11558:39;;11616:38;11650:2;11639:9;11635:18;11616:38;:::i;11665:695::-;11771:6;11779;11787;11795;11803;11811;11864:3;11852:9;11843:7;11839:23;11835:33;11832:53;;;11881:1;11878;11871:12;11832:53;11904:29;11923:9;11904:29;:::i;:::-;11894:39;;11952:38;11986:2;11975:9;11971:18;11952:38;:::i;:::-;11942:48;;12037:2;12026:9;12022:18;12009:32;11999:42;;12088:2;12077:9;12073:18;12060:32;12050:42;;12143:3;12132:9;12128:19;12115:33;12171:18;12163:6;12160:30;12157:50;;;12203:1;12200;12193:12;12157:50;12242:58;12292:7;12283:6;12272:9;12268:22;12242:58;:::i;:::-;11665:695;;;;-1:-1:-1;11665:695:1;;-1:-1:-1;11665:695:1;;12319:8;;11665:695;-1:-1:-1;;;11665:695:1:o;12365:437::-;12444:1;12440:12;;;;12487;;;12508:61;;12562:4;12554:6;12550:17;12540:27;;12508:61;12615:2;12607:6;12604:14;12584:18;12581:38;12578:218;;12652:77;12649:1;12642:88;12753:4;12750:1;12743:15;12781:4;12778:1;12771:15;13150:184;13202:77;13199:1;13192:88;13299:4;13296:1;13289:15;13323:4;13320:1;13313:15;14632:184;14684:77;14681:1;14674:88;14781:4;14778:1;14771:15;14805:4;14802:1;14795:15;15284:545;15386:2;15381:3;15378:11;15375:448;;;15422:1;15447:5;15443:2;15436:17;15492:4;15488:2;15478:19;15562:2;15550:10;15546:19;15543:1;15539:27;15533:4;15529:38;15598:4;15586:10;15583:20;15580:47;;;-1:-1:-1;15621:4:1;15580:47;15676:2;15671:3;15667:12;15664:1;15660:20;15654:4;15650:31;15640:41;;15731:82;15749:2;15742:5;15739:13;15731:82;;;15794:17;;;15775:1;15764:13;15731:82;;16065:1325;16189:18;16184:3;16181:27;16178:53;;;16211:18;;:::i;:::-;16240:94;16330:3;16290:38;16322:4;16316:11;16290:38;:::i;:::-;16284:4;16240:94;:::i;:::-;16360:1;16385:2;16380:3;16377:11;16402:1;16397:735;;;;17176:1;17193:3;17190:93;;;-1:-1:-1;17249:19:1;;;17236:33;17190:93;15971:66;15962:1;15958:11;;;15954:84;15950:89;15940:100;16046:1;16042:11;;;15937:117;17296:78;;16370:1014;;16397:735;15231:1;15224:14;;;15268:4;15255:18;;16442:66;16433:76;;;16593:9;16615:229;16629:7;16626:1;16623:14;16615:229;;;16718:19;;;16705:33;16690:49;;16825:4;16810:20;;;;16778:1;16766:14;;;;16645:12;16615:229;;;16619:3;16872;16863:7;16860:16;16857:219;;;16992:66;16986:3;16980;16977:1;16973:11;16969:21;16965:94;16961:99;16948:9;16943:3;16939:19;16926:33;16922:139;16914:6;16907:155;16857:219;;;17119:1;17113:3;17110:1;17106:11;17102:19;17096:4;17089:33;16370:1014;;16065:1325;;;:::o;17395:326::-;17484:6;17479:3;17472:19;17536:6;17529:5;17522:4;17517:3;17513:14;17500:43;;17588:1;17581:4;17572:6;17567:3;17563:16;17559:27;17552:38;17454:3;17710:4;17640:66;17635:2;17627:6;17623:15;17619:88;17614:3;17610:98;17606:109;17599:116;;17395:326;;;;:::o;17726:247::-;17885:2;17874:9;17867:21;17848:4;17905:62;17963:2;17952:9;17948:18;17940:6;17932;17905:62;:::i;18508:318::-;18695:6;18684:9;18677:25;18738:2;18733;18722:9;18718:18;18711:30;18658:4;18758:62;18816:2;18805:9;18801:18;18793:6;18785;18758:62;:::i;:::-;18750:70;18508:318;-1:-1:-1;;;;;18508:318:1:o;19505:184::-;19557:77;19554:1;19547:88;19654:4;19651:1;19644:15;19678:4;19675:1;19668:15;19694:128;19761:9;;;19782:11;;;19779:37;;;19796:18;;:::i;19827:125::-;19892:9;;;19913:10;;;19910:36;;;19926:18;;:::i;19957:358::-;20057:6;20052:3;20045:19;20027:3;20087:66;20079:6;20076:78;20073:98;;;20167:1;20164;20157:12;20073:98;20203:6;20200:1;20196:14;20255:8;20248:5;20241:4;20236:3;20232:14;20219:45;20284:18;;;;20304:4;20280:29;;19957:358;-1:-1:-1;;;19957:358:1:o;20320:519::-;20597:2;20586:9;20579:21;20560:4;20623:73;20692:2;20681:9;20677:18;20669:6;20661;20623:73;:::i;:::-;20744:9;20736:6;20732:22;20727:2;20716:9;20712:18;20705:50;20772:61;20826:6;20818;20810;20772:61;:::i;:::-;20764:69;20320:519;-1:-1:-1;;;;;;;20320:519:1:o;20844:931::-;21196:4;21225:42;21306:2;21298:6;21294:15;21283:9;21276:34;21358:2;21350:6;21346:15;21341:2;21330:9;21326:18;21319:43;;21398:3;21393:2;21382:9;21378:18;21371:31;21425:74;21494:3;21483:9;21479:19;21471:6;21463;21425:74;:::i;:::-;21547:9;21539:6;21535:22;21530:2;21519:9;21515:18;21508:50;21581:61;21635:6;21627;21619;21581:61;:::i;:::-;21567:75;;21691:9;21683:6;21679:22;21673:3;21662:9;21658:19;21651:51;21719:50;21762:6;21754;21746;21719:50;:::i;:::-;21711:58;20844:931;-1:-1:-1;;;;;;;;;;;20844:931:1:o;21780:249::-;21849:6;21902:2;21890:9;21881:7;21877:23;21873:32;21870:52;;;21918:1;21915;21908:12;21870:52;21950:9;21944:16;21969:30;21993:5;21969:30;:::i;22978:611::-;23210:4;23239:42;23320:2;23312:6;23308:15;23297:9;23290:34;23372:2;23364:6;23360:15;23355:2;23344:9;23340:18;23333:43;;23412:6;23407:2;23396:9;23392:18;23385:34;23455:6;23450:2;23439:9;23435:18;23428:34;23499:3;23493;23482:9;23478:19;23471:32;23520:63;23578:3;23567:9;23563:19;23555:6;23547;23520:63;:::i;:::-;23512:71;22978:611;-1:-1:-1;;;;;;;;22978:611:1:o

Swarm Source

ipfs://918dd42ef83a8664ad39802bec39bed68dc0a872a7370ff03514aea462ec8b90
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.