ETH Price: $2,967.43 (+3.58%)
Gas: 3 Gwei

Token

REBELZ (REBEL)
 

Overview

Max Total Supply

2,147 REBEL

Holders

1,181

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xF8422E6b82aDDeBB0db417e3B3e0b3C932e24f8C
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
REBELZ

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 13 of 13: REBELZ.sol
// SPDX-License-Identifier: MIT
//
//         `.--.`                                                                         ..
//    -+sdNNNNmddyo/`                               `.-----.`                            :NNy
// .smNMmhs+-.`````/my-                       .:+yhmNNNmddhhyso-                        -NMMo           `.:/+ossys+-
// `+s+-``dd        mMN:        `.-://+++/- /dNMNdyo/-.```````mNh.      `--:/+++/:.    `mMMN`      `:oymNNNNmhyo+yMNo
//       yMh      `oMMMy   ./odmmNNmmdhyso+`/dMo.``os`      .yMMM/`:+ymmNNNmdhyys+-    yMMM+      .mMMMmy/-.`  -hNm+`
//      +MM+    ./dMMMd. .dNMMMMy:-.``       `.   yMM-   ./yNMMmoymMMMMN/-..``        /MMMd`      -NMM+`     .yNNo`
//     .NMN``-+hmMMMd+`  `ohNMMN.                +MMm-/sdNMMmy/` /ydMMMo             `mMMM-        .+h.    `oNMy.
//    `yMMmsdNMMNdo-`      :MMMo                -NMMNNMMMMMy:     `dMMm`             yMMMs            `   /dMm/
//    +MMMMMNmy+-`        `mMMN:/oshhhs.       `dMMmdyo/:-oMNh.   oMMMo:+syhhy/     :MMMm`      `/yh`   -hMNo`
//    dMMNMMm+`           sMMMNmdhs+:-.  ``    sMMN.     :mMMM/  -NMMMmmhs+:-.`  ` `mMMM/     `+dMd:  `sNMh-     `.-/oyo`
//   :MMN:omMMms-`      -sMMMy:.` `.-:+yhdy/  :MMMo    -yMMMNs .+mMMN/-`  `.-+shdhooMMMy    `+mMd/` `/mMd/   .-+ydmmds/-
//   -hmo  `:yNMMd+.    /MMMN-.:oydmNNmho:.  `mMMd` `-sNMMMh:  .dMMMo.-+shmNNmds/-.NMMN.  `+mMd/`  -hMNo../shmNmyo:.
//     `      .+hNMNh/.  yNMNmNNmdyo:.`  -o: sMMM:.+hNMMNh:     :mNMdNMNmhs/-`    sMMM/ `+mMd/`  .sNMNyhdmmho:-`
//               .+hNMmy:`./oo+:.        hMd.NMMNhNMMNdo-        `:+s+:.`        `NMMh.omMd/`   /mMMNmho/-`
//                  ./ymNms.             `/yyNNNNNdy/-                           /MMNsmMd:      -+o/-`
//                     `:+yds               `.---`                               `smNNd:
//                          `                                                      `--
//
// Rebelz ERC-1155 Contract

pragma solidity ^0.8.2;

import "./ERC1155.sol";
import "./ERC1155Burnable.sol";
import "./Ownable.sol";
import "./IERC20.sol";
import "./Counters.sol";

contract REBELZ is ERC1155, Ownable, ERC1155Burnable {
    using Counters for Counters.Counter;

    uint256 public constant MAX_REBEL = 10000;
    uint256 public constant MAX_REBEL_PER_TX = 20;
    uint256 public constant PRICE = 0.049 ether;

    uint256 public presaleMaxRebelPerWallet = 4;

    address public constant creator1Address =
        0x156B1fD8bE08047782e46CD82d083ec0cDE56A96;
    address public constant creator2Address =
        0x04940D82F76CAac41574095dce4b745D7bE89731;
    address public constant creator3Address =
        0x0E77AB08B861732f8b2a4128974310E57C2e50ab;
    address public constant creator4Address =
        0x07B956073c58d0dd38D7744D741d540Cd213a5Ca;
    address public constant creator5Address =
        0x5d083b6C5a6EFB1c92A3aF57d0fCdb67297af5e8;

    bool public saleOpen = false;
    bool public presaleOpen = false;

    Counters.Counter private _tokenIdTracker;

    event saleStatusChange(bool pause);
    event presaleStatusChange(bool pause);
    string public name;
    string public symbol;
    string public baseTokenURI;

    mapping(address => uint256) private _whitelistMintLogs;

    address private validator_;

    constructor(string memory baseURI, address _validator) ERC1155(baseURI) {
        name = "REBELZ";
        symbol = "REBEL";
        validator_ = _validator;
        setBaseURI(baseURI);
    }

    modifier saleIsOpen() {
        require(totalSupply() <= MAX_REBEL, "Soldout!");
        require(saleOpen, "Sale is not open");
        _;
    }

    modifier presaleIsOpen() {
        require(totalSupply() <= MAX_REBEL, "Soldout!");
        require(presaleOpen, "Presale is not open");
        _;
    }

    function setValidator(address validator) public onlyOwner {
        validator_ = validator;
    }

    function setPresaleMaxPerWallet(uint256 newMax) public onlyOwner {
        presaleMaxRebelPerWallet = newMax;
    }

    function toBytes(address a) internal pure returns (bytes memory b) {
        assembly {
            let m := mload(0x40)
            a := and(a, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
            mstore(
                add(m, 20),
                xor(0x140000000000000000000000000000000000000000, a)
            )
            mstore(0x40, add(m, 52))
            b := m
        }
    }

    modifier verify(address _buyer, bytes memory _sign) {
        require(_sign.length == 65, "Invalid signature length");

        bytes memory addressBytes = toBytes(_buyer);

        bytes32 _hash = keccak256(
            abi.encodePacked(
                "\x19Ethereum Signed Message:\n32",
                keccak256(abi.encodePacked("rebelznft", addressBytes))
            )
        );

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
            r := mload(add(_sign, 32))
            s := mload(add(_sign, 64))
            v := byte(0, mload(add(_sign, 96)))
        }

        require(ecrecover(_hash, v, r, s) == validator_, "Invalid sign");
        _;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    function uri(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        require(_tokenId < totalSupply(), "Token not minted yet.");
        return string(abi.encodePacked(baseTokenURI, toString(_tokenId)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Total minted Rebel.
     */
    function totalSupply() public view returns (uint256) {
        return _tokenIdTracker.current();
    }

    function price(uint256 _count) public pure returns (uint256) {
        return PRICE * _count;
    }

    function setSaleStatus(bool _isOpen) public onlyOwner {
        saleOpen = _isOpen;
        emit saleStatusChange(saleOpen);
    }

    function setPresaleStatus(bool _isOpen) public onlyOwner {
        presaleOpen = _isOpen;
        emit presaleStatusChange(presaleOpen);
    }

    function _mintRebel(address _to, uint256 _tokenId) private {
        _mint(_to, _tokenId, 1, "");
        _tokenIdTracker.increment();
    }

    function mintPresale(uint256 _numberOfTokens, bytes memory _sign)
        public
        payable
        presaleIsOpen
        verify(msg.sender, _sign)
    {
        uint256 total = totalSupply();
        address wallet = _msgSender();
        require(_numberOfTokens > 0, "You can't mint 0 Rebel");
        require(
            _whitelistMintLogs[wallet] + _numberOfTokens <=
                presaleMaxRebelPerWallet,
            "You can't mint more than the allowed amount"
        );
        require(
            total + _numberOfTokens <= MAX_REBEL,
            "Purchase would exceed max supply of Rebelz"
        );
        require(msg.value >= price(_numberOfTokens), "Value below price");
        for (uint8 i = 0; i < _numberOfTokens; i++) {
            uint256 tokenToMint = totalSupply();
            _mintRebel(wallet, tokenToMint);
            _whitelistMintLogs[wallet] += 1;
        }
    }

    function mintSale(uint256 _numberOfTokens) public payable saleIsOpen {
        uint256 total = totalSupply();
        address wallet = _msgSender();
        require(_numberOfTokens > 0, "You can't mint 0 Rebel");
        require(
            _numberOfTokens <= MAX_REBEL_PER_TX,
            "You can't mint more than the allowed amount"
        );
        require(
            total + _numberOfTokens <= MAX_REBEL,
            "Purchase would exceed max supply of Rebelz"
        );
        require(msg.value >= price(_numberOfTokens), "Value below price");
        for (uint8 i = 0; i < _numberOfTokens; i++) {
            uint256 tokenToMint = totalSupply();
            _mintRebel(wallet, tokenToMint);
        }
    }

    function reserveRebel(uint256 _numberOfTokens) public onlyOwner {
        uint256 total = totalSupply();
        require(total + _numberOfTokens <= MAX_REBEL);
        for (uint8 i = 0; i < _numberOfTokens; i++) {
            uint256 tokenToMint = totalSupply();
            _mintRebel(owner(), tokenToMint);
        }
    }

    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0);
        _widthdraw(creator5Address, (balance * 4) / 100);
        _widthdraw(creator4Address, (balance * 15) / 100);
        _widthdraw(creator3Address, (balance * 27) / 100);
        _widthdraw(creator2Address, (balance * 27) / 100);
        _widthdraw(creator1Address, address(this).balance);
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{value: _amount}("");
        require(success, "Transfer failed.");
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 13: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 4 of 13: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            account != address(0),
            "ERC1155: balance query for the zero address"
        );
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(
            accounts.length == ids.length,
            "ERC1155: accounts and ids length mismatch"
        );

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            from,
            to,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            data
        );

        uint256 fromBalance = _balances[id][from];
        require(
            fromBalance >= amount,
            "ERC1155: insufficient balance for transfer"
        );
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

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

            uint256 fromBalance = _balances[id][from];
            require(
                fromBalance >= amount,
                "ERC1155: insufficient balance for transfer"
            );
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            from,
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            address(0),
            to,
            _asSingletonArray(id),
            _asSingletonArray(amount),
            data
        );

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(
            operator,
            address(0),
            to,
            id,
            amount,
            data
        );
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            address(0),
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(
            operator,
            from,
            address(0),
            _asSingletonArray(id),
            _asSingletonArray(amount),
            ""
        );

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(
            ids.length == amounts.length,
            "ERC1155: ids and amounts length mismatch"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

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

            uint256 fromBalance = _balances[id][from];
            require(
                fromBalance >= amount,
                "ERC1155: burn amount exceeds balance"
            );
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    amount,
                    data
                )
            returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    amounts,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver.onERC1155BatchReceived.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element)
        private
        pure
        returns (uint256[] memory)
    {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 5 of 13: ERC1155Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;

import "./ERC1155.sol";

/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

File 6 of 13: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 7 of 13: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        external
        view
        returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator)
        external
        view
        returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 8 of 13: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 9 of 13: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 13: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 11 of 13: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"values","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":"value","type":"uint256"}],"name":"TransferSingle","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":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"presaleStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"saleStatusChange","type":"event"},{"inputs":[],"name":"MAX_REBEL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REBEL_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator2Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator3Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator4Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator5Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"},{"internalType":"bytes","name":"_sign","type":"bytes"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"mintSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMaxRebelPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"reserveRebel","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setPresaleMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOpen","type":"bool"}],"name":"setPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOpen","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600480556000600560006101000a81548160ff0219169083151502179055506000600560016101000a81548160ff0219169083151502179055503480156200004b57600080fd5b5060405162005f6838038062005f68833981810160405281019062000071919062000492565b8162000083816200019a60201b60201c565b50620000a462000098620001b660201b60201c565b620001be60201b60201c565b6040518060400160405280600681526020017f524542454c5a000000000000000000000000000000000000000000000000000081525060079080519060200190620000f192919062000359565b506040518060400160405280600581526020017f524542454c000000000000000000000000000000000000000000000000000000815250600890805190602001906200013f92919062000359565b5080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000192826200028460201b60201c565b50506200072d565b8060029080519060200190620001b292919062000359565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000294620001b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ba6200032f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030a9062000513565b60405180910390fd5b80600990805190602001906200032b92919062000359565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000367906200060f565b90600052602060002090601f0160209004810192826200038b5760008555620003d7565b82601f10620003a657805160ff1916838001178555620003d7565b82800160010185558215620003d7579182015b82811115620003d6578251825591602001919060010190620003b9565b5b509050620003e69190620003ea565b5090565b5b8082111562000405576000816000905550600101620003eb565b5090565b6000620004206200041a846200055e565b62000535565b9050828152602081018484840111156200043957600080fd5b62000446848285620005d9565b509392505050565b6000815190506200045f8162000713565b92915050565b600082601f8301126200047757600080fd5b81516200048984826020860162000409565b91505092915050565b60008060408385031215620004a657600080fd5b600083015167ffffffffffffffff811115620004c157600080fd5b620004cf8582860162000465565b9250506020620004e2858286016200044e565b9150509250929050565b6000620004fb60208362000594565b91506200050882620006ea565b602082019050919050565b600060208201905081810360008301526200052e81620004ec565b9050919050565b60006200054162000554565b90506200054f828262000645565b919050565b6000604051905090565b600067ffffffffffffffff8211156200057c576200057b620006aa565b5b6200058782620006d9565b9050602081019050919050565b600082825260208201905092915050565b6000620005b282620005b9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620005f9578082015181840152602081019050620005dc565b8381111562000609576000848401525b50505050565b600060028204905060018216806200062857607f821691505b602082108114156200063f576200063e6200067b565b5b50919050565b6200065082620006d9565b810181811067ffffffffffffffff82111715620006725762000671620006aa565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200071e81620005a5565b81146200072a57600080fd5b50565b61582b806200073d6000396000f3fe6080604052600436106102245760003560e01c80638895283f11610123578063bda46aac116100ab578063d897833e1161006f578063d897833e146107b8578063e985e9c5146107e1578063f242432a1461081e578063f2fde38b14610847578063f5298aca1461087057610224565b8063bda46aac146106e3578063bee6348a1461070c578063cc29f60914610737578063d091350514610762578063d547cfb71461078d57610224565b806395d89b41116100f257806395d89b411461060e57806399288dbb14610639578063a22cb46514610664578063aa3d92fb1461068d578063b007330d146106b857610224565b80638895283f146105645780638d859f3e1461058d5780638da5cb5b146105b85780638f8e146e146105e357610224565b806326a49e37116101b15780635588473c116101755780635588473c146104b957806355f804b3146104e45780636b20c4541461050d578063715018a614610536578063853828b61461054d57610224565b806326a49e37146103d15780632eb2c2d61461040e5780634875bccb146104375780634c0770f0146104535780634e1273f41461047c57610224565b806306fdde03116101f857806306fdde03146102f95780630d06ed72146103245780630e89341c146103405780631327d3d81461037d57806318160ddd146103a657610224565b8062fdd58e1461022957806301ffc9a71461026657806303515348146102a357806303b74ed8146102ce575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190613c9c565b610899565b60405161025d9190614a76565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613dbc565b610962565b60405161029a91906146b4565b60405180910390f35b3480156102af57600080fd5b506102b8610a44565b6040516102c5919061457e565b60405180910390f35b3480156102da57600080fd5b506102e3610a5c565b6040516102f0919061457e565b60405180910390f35b34801561030557600080fd5b5061030e610a74565b60405161031b9190614714565b60405180910390f35b61033e60048036038101906103399190613e78565b610b02565b005b34801561034c57600080fd5b5061036760048036038101906103629190613e4f565b610f5e565b6040516103749190614714565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613a2e565b610fdb565b005b3480156103b257600080fd5b506103bb61109b565b6040516103c89190614a76565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190613e4f565b6110ac565b6040516104059190614a76565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613a93565b6110c8565b005b610451600480360381019061044c9190613e4f565b611169565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613e4f565b61137c565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613d27565b611402565b6040516104b0919061465b565b60405180910390f35b3480156104c557600080fd5b506104ce6115b3565b6040516104db9190614a76565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190613e0e565b6115b9565b005b34801561051957600080fd5b50610534600480360381019061052f9190613be1565b61164f565b005b34801561054257600080fd5b5061054b6116ec565b005b34801561055957600080fd5b50610562611774565b005b34801561057057600080fd5b5061058b60048036038101906105869190613d93565b6118fb565b005b34801561059957600080fd5b506105a26119da565b6040516105af9190614a76565b60405180910390f35b3480156105c457600080fd5b506105cd6119e5565b6040516105da919061457e565b60405180910390f35b3480156105ef57600080fd5b506105f8611a0f565b604051610605919061457e565b60405180910390f35b34801561061a57600080fd5b50610623611a27565b6040516106309190614714565b60405180910390f35b34801561064557600080fd5b5061064e611ab5565b60405161065b91906146b4565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190613c60565b611ac8565b005b34801561069957600080fd5b506106a2611ade565b6040516106af919061457e565b60405180910390f35b3480156106c457600080fd5b506106cd611af6565b6040516106da9190614a76565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613e4f565b611afb565b005b34801561071857600080fd5b50610721611be1565b60405161072e91906146b4565b60405180910390f35b34801561074357600080fd5b5061074c611bf4565b6040516107599190614a76565b60405180910390f35b34801561076e57600080fd5b50610777611bfa565b604051610784919061457e565b60405180910390f35b34801561079957600080fd5b506107a2611c12565b6040516107af9190614714565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190613d93565b611ca0565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613a57565b611d7f565b60405161081591906146b4565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613b52565b611e13565b005b34801561085357600080fd5b5061086e60048036038101906108699190613a2e565b611eb4565b005b34801561087c57600080fd5b5061089760048036038101906108929190613cd8565b611fac565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090190614796565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3d5750610a3c82612049565b5b9050919050565b735d083b6c5a6efb1c92a3af57d0fcdb67297af5e881565b730e77ab08b861732f8b2a4128974310e57c2e50ab81565b60078054610a8190614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054610aad90614e17565b8015610afa5780601f10610acf57610100808354040283529160200191610afa565b820191906000526020600020905b815481529060010190602001808311610add57829003601f168201915b505050505081565b612710610b0d61109b565b1115610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614a56565b60405180910390fd5b600560019054906101000a900460ff16610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490614916565b60405180910390fd5b33816041815114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90614976565b60405180910390fd5b6000610bee836120b3565b9050600081604051602001610c03919061455c565b60405160208183030381529060405280519060200120604051602001610c299190614521565b60405160208183030381529060405280519060200120905060008060006020860151925060408601519150606086015160001a9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018583868660405160008152602001604052604051610cba94939291906146cf565b6020604051602081039080840390855afa158015610cdc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390614996565b60405180910390fd5b6000610d4661109b565b90506000610d526120fe565b905060008b11610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906148d6565b60405180910390fd5b6004548b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de59190614c35565b1115610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906147f6565b60405180910390fd5b6127108b83610e359190614c35565b1115610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d906149f6565b60405180910390fd5b610e7f8b6110ac565b341015610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906148f6565b60405180910390fd5b60005b8b8160ff161015610f50576000610ed961109b565b9050610ee58382612106565b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f359190614c35565b92505081905550508080610f4890614ec3565b915050610ec4565b505050505050505050505050565b6060610f6861109b565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090614756565b60405180910390fd5b6009610fb483612130565b604051602001610fc59291906144fd565b6040516020818303038152906040529050919050565b610fe36120fe565b73ffffffffffffffffffffffffffffffffffffffff166110016119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906148b6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110a760066122dd565b905090565b60008166ae153d89fe80006110c19190614cbc565b9050919050565b6110d06120fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111165750611115856111106120fe565b611d7f565b5b611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614856565b60405180910390fd5b61116285858585856122eb565b5050505050565b61271061117461109b565b11156111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90614a56565b60405180910390fd5b600560009054906101000a900460ff16611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90614936565b60405180910390fd5b600061120e61109b565b9050600061121a6120fe565b90506000831161125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906148d6565b60405180910390fd5b60148311156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a906147f6565b60405180910390fd5b61271083836112b29190614c35565b11156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea906149f6565b60405180910390fd5b6112fc836110ac565b34101561133e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611335906148f6565b60405180910390fd5b60005b838160ff16101561137657600061135661109b565b90506113628382612106565b50808061136e90614ec3565b915050611341565b50505050565b6113846120fe565b73ffffffffffffffffffffffffffffffffffffffff166113a26119e5565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906148b6565b60405180910390fd5b8060048190555050565b60608151835114611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f906149d6565b60405180910390fd5b6000835167ffffffffffffffff81111561148b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114b95781602001602082028036833780820191505090505b50905060005b84518110156115a857611552858281518110611504577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611545577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610899565b82828151811061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806115a190614e7a565b90506114bf565b508091505092915050565b61271081565b6115c16120fe565b73ffffffffffffffffffffffffffffffffffffffff166115df6119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906148b6565b60405180910390fd5b806009908051906020019061164b929190613726565b5050565b6116576120fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169d575061169c836116976120fe565b611d7f565b5b6116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614816565b60405180910390fd5b6116e783838361264b565b505050565b6116f46120fe565b73ffffffffffffffffffffffffffffffffffffffff166117126119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906148b6565b60405180910390fd5b6117726000612948565b565b61177c6120fe565b73ffffffffffffffffffffffffffffffffffffffff1661179a6119e5565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e7906148b6565b60405180910390fd5b60004790506000811161180257600080fd5b611838735d083b6c5a6efb1c92a3af57d0fcdb67297af5e860646004846118299190614cbc565b6118339190614c8b565b612a0e565b61186e7307b956073c58d0dd38d7744d741d540cd213a5ca6064600f8461185f9190614cbc565b6118699190614c8b565b612a0e565b6118a4730e77ab08b861732f8b2a4128974310e57c2e50ab6064601b846118959190614cbc565b61189f9190614c8b565b612a0e565b6118da7304940d82f76caac41574095dce4b745d7be897316064601b846118cb9190614cbc565b6118d59190614c8b565b612a0e565b6118f873156b1fd8be08047782e46cd82d083ec0cde56a9647612a0e565b50565b6119036120fe565b73ffffffffffffffffffffffffffffffffffffffff166119216119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906148b6565b60405180910390fd5b80600560016101000a81548160ff0219169083151502179055507fe8a961e48c568d8e7d6f38fff715e3b772a633bbb7c97961533e041cd293de0c600560019054906101000a900460ff166040516119cf91906146b4565b60405180910390a150565b66ae153d89fe800081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7307b956073c58d0dd38d7744d741d540cd213a5ca81565b60088054611a3490614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6090614e17565b8015611aad5780601f10611a8257610100808354040283529160200191611aad565b820191906000526020600020905b815481529060010190602001808311611a9057829003601f168201915b505050505081565b600560009054906101000a900460ff1681565b611ada611ad36120fe565b8383612abf565b5050565b7304940d82f76caac41574095dce4b745d7be8973181565b601481565b611b036120fe565b73ffffffffffffffffffffffffffffffffffffffff16611b216119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906148b6565b60405180910390fd5b6000611b8161109b565b90506127108282611b929190614c35565b1115611b9d57600080fd5b60005b828160ff161015611bdc576000611bb561109b565b9050611bc8611bc26119e5565b82612106565b508080611bd490614ec3565b915050611ba0565b505050565b600560019054906101000a900460ff1681565b60045481565b73156b1fd8be08047782e46cd82d083ec0cde56a9681565b60098054611c1f90614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4b90614e17565b8015611c985780601f10611c6d57610100808354040283529160200191611c98565b820191906000526020600020905b815481529060010190602001808311611c7b57829003601f168201915b505050505081565b611ca86120fe565b73ffffffffffffffffffffffffffffffffffffffff16611cc66119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906148b6565b60405180910390fd5b80600560006101000a81548160ff0219169083151502179055507f923f4240c72baece10ed8e92c68ea88e23f9b0fa967395f7d546016b3dad36a6600560009054906101000a900460ff16604051611d7491906146b4565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1b6120fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611e615750611e6085611e5b6120fe565b611d7f565b5b611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790614816565b60405180910390fd5b611ead8585858585612c2c565b5050505050565b611ebc6120fe565b73ffffffffffffffffffffffffffffffffffffffff16611eda6119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f27906148b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f97906147b6565b60405180910390fd5b611fa981612948565b50565b611fb46120fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ffa5750611ff983611ff46120fe565b611d7f565b5b612039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203090614816565b60405180910390fd5b612044838383612eae565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060405173ffffffffffffffffffffffffffffffffffffffff8316925082741400000000000000000000000000000000000000001860148201526034810160405280915050919050565b600033905090565b61212282826001604051806020016040528060008152506130cb565b61212c6006613261565b5050565b60606000821415612178576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122d8565b600082905060005b600082146121aa57808061219390614e7a565b915050600a826121a39190614c8b565b9150612180565b60008167ffffffffffffffff8111156121ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561221e5781602001600182028036833780820191505090505b5090505b600085146122d1576001826122379190614d16565b9150600a856122469190614ef7565b60306122529190614c35565b60f81b81838151811061228e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122ca9190614c8b565b9450612222565b8093505050505b919050565b600081600001549050919050565b815183511461232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614a16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614836565b60405180910390fd5b60006123a96120fe565b90506123b9818787878787613277565b60005b84518110156125b6576000858281518110612400577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110612445577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90614896565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259b9190614c35565b92505081905550505050806125af90614e7a565b90506123bc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161262d92919061467d565b60405180910390a461264381878787878761327f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614876565b60405180910390fd5b80518251146126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614a16565b60405180910390fd5b60006127096120fe565b905061272981856000868660405180602001604052806000815250613277565b60005b83518110156128c2576000848281518110612770577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106127b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906147d6565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806128ba90614e7a565b91505061272c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161293a92919061467d565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612a3490614547565b60006040518083038185875af1925050503d8060008114612a71576040519150601f19603f3d011682016040523d82523d6000602084013e612a76565b606091505b5050905080612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614956565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b25906149b6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c1f91906146b4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390614836565b60405180910390fd5b6000612ca66120fe565b9050612cc6818787612cb788613466565b612cc088613466565b87613277565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5490614896565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e129190614c35565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612e8f929190614a91565b60405180910390a4612ea582888888888861352c565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590614876565b60405180910390fd5b6000612f286120fe565b9050612f5881856000612f3a87613466565b612f4387613466565b60405180602001604052806000815250613277565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe6906147d6565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130bc929190614a91565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313290614a36565b60405180910390fd5b60006131456120fe565b90506131668160008761315788613466565b61316088613466565b87613277565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131c59190614c35565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613243929190614a91565b60405180910390a461325a8160008787878761352c565b5050505050565b6001816000016000828254019250508190555050565b505050505050565b61329e8473ffffffffffffffffffffffffffffffffffffffff16613713565b1561345e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016132e4959493929190614599565b602060405180830381600087803b1580156132fe57600080fd5b505af192505050801561332f57506040513d601f19601f8201168201806040525081019061332c9190613de5565b60015b6133d55761333b614fe4565b806308c379a014156133985750613350615703565b8061335b575061339a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f9190614714565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc90614736565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345390614776565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156134ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156134d95781602001602082028036833780820191505090505b5090508281600081518110613517577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61354b8473ffffffffffffffffffffffffffffffffffffffff16613713565b1561370b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613591959493929190614601565b602060405180830381600087803b1580156135ab57600080fd5b505af19250505080156135dc57506040513d601f19601f820116820180604052508101906135d99190613de5565b60015b613682576135e8614fe4565b806308c379a0141561364557506135fd615703565b806136085750613647565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363c9190614714565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367990614736565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614776565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461373290614e17565b90600052602060002090601f016020900481019282613754576000855561379b565b82601f1061376d57805160ff191683800117855561379b565b8280016001018555821561379b579182015b8281111561379a57825182559160200191906001019061377f565b5b5090506137a891906137ac565b5090565b5b808211156137c55760008160009055506001016137ad565b5090565b60006137dc6137d784614adf565b614aba565b905080838252602082019050828560208602820111156137fb57600080fd5b60005b8581101561382b5781613811888261391d565b8452602084019350602083019250506001810190506137fe565b5050509392505050565b600061384861384384614b0b565b614aba565b9050808382526020820190508285602086028201111561386757600080fd5b60005b85811015613897578161387d8882613a19565b84526020840193506020830192505060018101905061386a565b5050509392505050565b60006138b46138af84614b37565b614aba565b9050828152602081018484840111156138cc57600080fd5b6138d7848285614dd5565b509392505050565b60006138f26138ed84614b68565b614aba565b90508281526020810184848401111561390a57600080fd5b613915848285614dd5565b509392505050565b60008135905061392c81615799565b92915050565b600082601f83011261394357600080fd5b81356139538482602086016137c9565b91505092915050565b600082601f83011261396d57600080fd5b813561397d848260208601613835565b91505092915050565b600081359050613995816157b0565b92915050565b6000813590506139aa816157c7565b92915050565b6000815190506139bf816157c7565b92915050565b600082601f8301126139d657600080fd5b81356139e68482602086016138a1565b91505092915050565b600082601f830112613a0057600080fd5b8135613a108482602086016138df565b91505092915050565b600081359050613a28816157de565b92915050565b600060208284031215613a4057600080fd5b6000613a4e8482850161391d565b91505092915050565b60008060408385031215613a6a57600080fd5b6000613a788582860161391d565b9250506020613a898582860161391d565b9150509250929050565b600080600080600060a08688031215613aab57600080fd5b6000613ab98882890161391d565b9550506020613aca8882890161391d565b945050604086013567ffffffffffffffff811115613ae757600080fd5b613af38882890161395c565b935050606086013567ffffffffffffffff811115613b1057600080fd5b613b1c8882890161395c565b925050608086013567ffffffffffffffff811115613b3957600080fd5b613b45888289016139c5565b9150509295509295909350565b600080600080600060a08688031215613b6a57600080fd5b6000613b788882890161391d565b9550506020613b898882890161391d565b9450506040613b9a88828901613a19565b9350506060613bab88828901613a19565b925050608086013567ffffffffffffffff811115613bc857600080fd5b613bd4888289016139c5565b9150509295509295909350565b600080600060608486031215613bf657600080fd5b6000613c048682870161391d565b935050602084013567ffffffffffffffff811115613c2157600080fd5b613c2d8682870161395c565b925050604084013567ffffffffffffffff811115613c4a57600080fd5b613c568682870161395c565b9150509250925092565b60008060408385031215613c7357600080fd5b6000613c818582860161391d565b9250506020613c9285828601613986565b9150509250929050565b60008060408385031215613caf57600080fd5b6000613cbd8582860161391d565b9250506020613cce85828601613a19565b9150509250929050565b600080600060608486031215613ced57600080fd5b6000613cfb8682870161391d565b9350506020613d0c86828701613a19565b9250506040613d1d86828701613a19565b9150509250925092565b60008060408385031215613d3a57600080fd5b600083013567ffffffffffffffff811115613d5457600080fd5b613d6085828601613932565b925050602083013567ffffffffffffffff811115613d7d57600080fd5b613d898582860161395c565b9150509250929050565b600060208284031215613da557600080fd5b6000613db384828501613986565b91505092915050565b600060208284031215613dce57600080fd5b6000613ddc8482850161399b565b91505092915050565b600060208284031215613df757600080fd5b6000613e05848285016139b0565b91505092915050565b600060208284031215613e2057600080fd5b600082013567ffffffffffffffff811115613e3a57600080fd5b613e46848285016139ef565b91505092915050565b600060208284031215613e6157600080fd5b6000613e6f84828501613a19565b91505092915050565b60008060408385031215613e8b57600080fd5b6000613e9985828601613a19565b925050602083013567ffffffffffffffff811115613eb657600080fd5b613ec2858286016139c5565b9150509250929050565b6000613ed883836144d0565b60208301905092915050565b613eed81614d4a565b82525050565b6000613efe82614bbe565b613f088185614bec565b9350613f1383614b99565b8060005b83811015613f44578151613f2b8882613ecc565b9750613f3683614bdf565b925050600181019050613f17565b5085935050505092915050565b613f5a81614d5c565b82525050565b613f6981614d68565b82525050565b613f80613f7b82614d68565b614eed565b82525050565b6000613f9182614bc9565b613f9b8185614bfd565b9350613fab818560208601614de4565b613fb481615006565b840191505092915050565b6000613fca82614bc9565b613fd48185614c0e565b9350613fe4818560208601614de4565b80840191505092915050565b6000613ffb82614bd4565b6140058185614c19565b9350614015818560208601614de4565b61401e81615006565b840191505092915050565b600061403482614bd4565b61403e8185614c2a565b935061404e818560208601614de4565b80840191505092915050565b6000815461406781614e17565b6140718186614c2a565b9450600182166000811461408c576001811461409d576140d0565b60ff198316865281860193506140d0565b6140a685614ba9565b60005b838110156140c8578154818901526001820191506020810190506140a9565b838801955050505b50505092915050565b60006140e6603483614c19565b91506140f182615024565b604082019050919050565b6000614109601583614c19565b915061411482615073565b602082019050919050565b600061412c602883614c19565b91506141378261509c565b604082019050919050565b600061414f601c83614c2a565b915061415a826150eb565b601c82019050919050565b6000614172602b83614c19565b915061417d82615114565b604082019050919050565b6000614195602683614c19565b91506141a082615163565b604082019050919050565b60006141b8602483614c19565b91506141c3826151b2565b604082019050919050565b60006141db602b83614c19565b91506141e682615201565b604082019050919050565b60006141fe602983614c19565b915061420982615250565b604082019050919050565b6000614221602583614c19565b915061422c8261529f565b604082019050919050565b6000614244603283614c19565b915061424f826152ee565b604082019050919050565b6000614267602383614c19565b91506142728261533d565b604082019050919050565b600061428a602a83614c19565b91506142958261538c565b604082019050919050565b60006142ad602083614c19565b91506142b8826153db565b602082019050919050565b60006142d0601683614c19565b91506142db82615404565b602082019050919050565b60006142f3601183614c19565b91506142fe8261542d565b602082019050919050565b6000614316601383614c19565b915061432182615456565b602082019050919050565b6000614339601083614c19565b91506143448261547f565b602082019050919050565b600061435c600083614c0e565b9150614367826154a8565b600082019050919050565b600061437f601083614c19565b915061438a826154ab565b602082019050919050565b60006143a2601883614c19565b91506143ad826154d4565b602082019050919050565b60006143c5600c83614c19565b91506143d0826154fd565b602082019050919050565b60006143e8602983614c19565b91506143f382615526565b604082019050919050565b600061440b602983614c19565b915061441682615575565b604082019050919050565b600061442e602a83614c19565b9150614439826155c4565b604082019050919050565b6000614451602883614c19565b915061445c82615613565b604082019050919050565b6000614474602183614c19565b915061447f82615662565b604082019050919050565b6000614497600983614c2a565b91506144a2826156b1565b600982019050919050565b60006144ba600883614c19565b91506144c5826156da565b602082019050919050565b6144d981614dbe565b82525050565b6144e881614dbe565b82525050565b6144f781614dc8565b82525050565b6000614509828561405a565b91506145158284614029565b91508190509392505050565b600061452c82614142565b91506145388284613f6f565b60208201915081905092915050565b60006145528261434f565b9150819050919050565b60006145678261448a565b91506145738284613fbf565b915081905092915050565b60006020820190506145936000830184613ee4565b92915050565b600060a0820190506145ae6000830188613ee4565b6145bb6020830187613ee4565b81810360408301526145cd8186613ef3565b905081810360608301526145e18185613ef3565b905081810360808301526145f58184613f86565b90509695505050505050565b600060a0820190506146166000830188613ee4565b6146236020830187613ee4565b61463060408301866144df565b61463d60608301856144df565b818103608083015261464f8184613f86565b90509695505050505050565b600060208201905081810360008301526146758184613ef3565b905092915050565b600060408201905081810360008301526146978185613ef3565b905081810360208301526146ab8184613ef3565b90509392505050565b60006020820190506146c96000830184613f51565b92915050565b60006080820190506146e46000830187613f60565b6146f160208301866144ee565b6146fe6040830185613f60565b61470b6060830184613f60565b95945050505050565b6000602082019050818103600083015261472e8184613ff0565b905092915050565b6000602082019050818103600083015261474f816140d9565b9050919050565b6000602082019050818103600083015261476f816140fc565b9050919050565b6000602082019050818103600083015261478f8161411f565b9050919050565b600060208201905081810360008301526147af81614165565b9050919050565b600060208201905081810360008301526147cf81614188565b9050919050565b600060208201905081810360008301526147ef816141ab565b9050919050565b6000602082019050818103600083015261480f816141ce565b9050919050565b6000602082019050818103600083015261482f816141f1565b9050919050565b6000602082019050818103600083015261484f81614214565b9050919050565b6000602082019050818103600083015261486f81614237565b9050919050565b6000602082019050818103600083015261488f8161425a565b9050919050565b600060208201905081810360008301526148af8161427d565b9050919050565b600060208201905081810360008301526148cf816142a0565b9050919050565b600060208201905081810360008301526148ef816142c3565b9050919050565b6000602082019050818103600083015261490f816142e6565b9050919050565b6000602082019050818103600083015261492f81614309565b9050919050565b6000602082019050818103600083015261494f8161432c565b9050919050565b6000602082019050818103600083015261496f81614372565b9050919050565b6000602082019050818103600083015261498f81614395565b9050919050565b600060208201905081810360008301526149af816143b8565b9050919050565b600060208201905081810360008301526149cf816143db565b9050919050565b600060208201905081810360008301526149ef816143fe565b9050919050565b60006020820190508181036000830152614a0f81614421565b9050919050565b60006020820190508181036000830152614a2f81614444565b9050919050565b60006020820190508181036000830152614a4f81614467565b9050919050565b60006020820190508181036000830152614a6f816144ad565b9050919050565b6000602082019050614a8b60008301846144df565b92915050565b6000604082019050614aa660008301856144df565b614ab360208301846144df565b9392505050565b6000614ac4614ad5565b9050614ad08282614e49565b919050565b6000604051905090565b600067ffffffffffffffff821115614afa57614af9614fb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b2657614b25614fb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b5257614b51614fb5565b5b614b5b82615006565b9050602081019050919050565b600067ffffffffffffffff821115614b8357614b82614fb5565b5b614b8c82615006565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c4082614dbe565b9150614c4b83614dbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c8057614c7f614f28565b5b828201905092915050565b6000614c9682614dbe565b9150614ca183614dbe565b925082614cb157614cb0614f57565b5b828204905092915050565b6000614cc782614dbe565b9150614cd283614dbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0b57614d0a614f28565b5b828202905092915050565b6000614d2182614dbe565b9150614d2c83614dbe565b925082821015614d3f57614d3e614f28565b5b828203905092915050565b6000614d5582614d9e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614e02578082015181840152602081019050614de7565b83811115614e11576000848401525b50505050565b60006002820490506001821680614e2f57607f821691505b60208210811415614e4357614e42614f86565b5b50919050565b614e5282615006565b810181811067ffffffffffffffff82111715614e7157614e70614fb5565b5b80604052505050565b6000614e8582614dbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eb857614eb7614f28565b5b600182019050919050565b6000614ece82614dc8565b915060ff821415614ee257614ee1614f28565b5b600182019050919050565b6000819050919050565b6000614f0282614dbe565b9150614f0d83614dbe565b925082614f1d57614f1c614f57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156150035760046000803e615000600051615017565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e206e6f74206d696e746564207965742e0000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206d696e74206d6f7265207468616e2074686520616c6c60008201527f6f77656420616d6f756e74000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f752063616e2774206d696e74203020526562656c00000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f50726573616c65206973206e6f74206f70656e00000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b7f496e76616c6964207369676e0000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620526562656c7a00000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f726562656c7a6e66740000000000000000000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b600060443d101561571357615796565b61571b614ad5565b60043d036004823e80513d602482011167ffffffffffffffff82111715615743575050615796565b808201805167ffffffffffffffff8111156157615750505050615796565b80602083010160043d03850181111561577e575050505050615796565b61578d82602001850186614e49565b82955050505050505b90565b6157a281614d4a565b81146157ad57600080fd5b50565b6157b981614d5c565b81146157c457600080fd5b50565b6157d081614d72565b81146157db57600080fd5b50565b6157e781614dbe565b81146157f257600080fd5b5056fea264697066735822122052388d5a9f92178cdfdfdabddf7f4393e06d1c8b614df4e0582967aa8290ee0664736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000003f9e77520c7b7a03c7a5b34189f68066c00bc20d000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f726562656c7a6e66742e636f6d2f6170692f726562656c7a2f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102245760003560e01c80638895283f11610123578063bda46aac116100ab578063d897833e1161006f578063d897833e146107b8578063e985e9c5146107e1578063f242432a1461081e578063f2fde38b14610847578063f5298aca1461087057610224565b8063bda46aac146106e3578063bee6348a1461070c578063cc29f60914610737578063d091350514610762578063d547cfb71461078d57610224565b806395d89b41116100f257806395d89b411461060e57806399288dbb14610639578063a22cb46514610664578063aa3d92fb1461068d578063b007330d146106b857610224565b80638895283f146105645780638d859f3e1461058d5780638da5cb5b146105b85780638f8e146e146105e357610224565b806326a49e37116101b15780635588473c116101755780635588473c146104b957806355f804b3146104e45780636b20c4541461050d578063715018a614610536578063853828b61461054d57610224565b806326a49e37146103d15780632eb2c2d61461040e5780634875bccb146104375780634c0770f0146104535780634e1273f41461047c57610224565b806306fdde03116101f857806306fdde03146102f95780630d06ed72146103245780630e89341c146103405780631327d3d81461037d57806318160ddd146103a657610224565b8062fdd58e1461022957806301ffc9a71461026657806303515348146102a357806303b74ed8146102ce575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190613c9c565b610899565b60405161025d9190614a76565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613dbc565b610962565b60405161029a91906146b4565b60405180910390f35b3480156102af57600080fd5b506102b8610a44565b6040516102c5919061457e565b60405180910390f35b3480156102da57600080fd5b506102e3610a5c565b6040516102f0919061457e565b60405180910390f35b34801561030557600080fd5b5061030e610a74565b60405161031b9190614714565b60405180910390f35b61033e60048036038101906103399190613e78565b610b02565b005b34801561034c57600080fd5b5061036760048036038101906103629190613e4f565b610f5e565b6040516103749190614714565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613a2e565b610fdb565b005b3480156103b257600080fd5b506103bb61109b565b6040516103c89190614a76565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190613e4f565b6110ac565b6040516104059190614a76565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613a93565b6110c8565b005b610451600480360381019061044c9190613e4f565b611169565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613e4f565b61137c565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613d27565b611402565b6040516104b0919061465b565b60405180910390f35b3480156104c557600080fd5b506104ce6115b3565b6040516104db9190614a76565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190613e0e565b6115b9565b005b34801561051957600080fd5b50610534600480360381019061052f9190613be1565b61164f565b005b34801561054257600080fd5b5061054b6116ec565b005b34801561055957600080fd5b50610562611774565b005b34801561057057600080fd5b5061058b60048036038101906105869190613d93565b6118fb565b005b34801561059957600080fd5b506105a26119da565b6040516105af9190614a76565b60405180910390f35b3480156105c457600080fd5b506105cd6119e5565b6040516105da919061457e565b60405180910390f35b3480156105ef57600080fd5b506105f8611a0f565b604051610605919061457e565b60405180910390f35b34801561061a57600080fd5b50610623611a27565b6040516106309190614714565b60405180910390f35b34801561064557600080fd5b5061064e611ab5565b60405161065b91906146b4565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190613c60565b611ac8565b005b34801561069957600080fd5b506106a2611ade565b6040516106af919061457e565b60405180910390f35b3480156106c457600080fd5b506106cd611af6565b6040516106da9190614a76565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613e4f565b611afb565b005b34801561071857600080fd5b50610721611be1565b60405161072e91906146b4565b60405180910390f35b34801561074357600080fd5b5061074c611bf4565b6040516107599190614a76565b60405180910390f35b34801561076e57600080fd5b50610777611bfa565b604051610784919061457e565b60405180910390f35b34801561079957600080fd5b506107a2611c12565b6040516107af9190614714565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190613d93565b611ca0565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613a57565b611d7f565b60405161081591906146b4565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613b52565b611e13565b005b34801561085357600080fd5b5061086e60048036038101906108699190613a2e565b611eb4565b005b34801561087c57600080fd5b5061089760048036038101906108929190613cd8565b611fac565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090190614796565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3d5750610a3c82612049565b5b9050919050565b735d083b6c5a6efb1c92a3af57d0fcdb67297af5e881565b730e77ab08b861732f8b2a4128974310e57c2e50ab81565b60078054610a8190614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054610aad90614e17565b8015610afa5780601f10610acf57610100808354040283529160200191610afa565b820191906000526020600020905b815481529060010190602001808311610add57829003601f168201915b505050505081565b612710610b0d61109b565b1115610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614a56565b60405180910390fd5b600560019054906101000a900460ff16610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490614916565b60405180910390fd5b33816041815114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90614976565b60405180910390fd5b6000610bee836120b3565b9050600081604051602001610c03919061455c565b60405160208183030381529060405280519060200120604051602001610c299190614521565b60405160208183030381529060405280519060200120905060008060006020860151925060408601519150606086015160001a9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018583868660405160008152602001604052604051610cba94939291906146cf565b6020604051602081039080840390855afa158015610cdc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390614996565b60405180910390fd5b6000610d4661109b565b90506000610d526120fe565b905060008b11610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906148d6565b60405180910390fd5b6004548b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de59190614c35565b1115610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906147f6565b60405180910390fd5b6127108b83610e359190614c35565b1115610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d906149f6565b60405180910390fd5b610e7f8b6110ac565b341015610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906148f6565b60405180910390fd5b60005b8b8160ff161015610f50576000610ed961109b565b9050610ee58382612106565b6001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f359190614c35565b92505081905550508080610f4890614ec3565b915050610ec4565b505050505050505050505050565b6060610f6861109b565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090614756565b60405180910390fd5b6009610fb483612130565b604051602001610fc59291906144fd565b6040516020818303038152906040529050919050565b610fe36120fe565b73ffffffffffffffffffffffffffffffffffffffff166110016119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906148b6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110a760066122dd565b905090565b60008166ae153d89fe80006110c19190614cbc565b9050919050565b6110d06120fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111165750611115856111106120fe565b611d7f565b5b611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90614856565b60405180910390fd5b61116285858585856122eb565b5050505050565b61271061117461109b565b11156111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90614a56565b60405180910390fd5b600560009054906101000a900460ff16611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90614936565b60405180910390fd5b600061120e61109b565b9050600061121a6120fe565b90506000831161125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906148d6565b60405180910390fd5b60148311156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a906147f6565b60405180910390fd5b61271083836112b29190614c35565b11156112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea906149f6565b60405180910390fd5b6112fc836110ac565b34101561133e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611335906148f6565b60405180910390fd5b60005b838160ff16101561137657600061135661109b565b90506113628382612106565b50808061136e90614ec3565b915050611341565b50505050565b6113846120fe565b73ffffffffffffffffffffffffffffffffffffffff166113a26119e5565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906148b6565b60405180910390fd5b8060048190555050565b60608151835114611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f906149d6565b60405180910390fd5b6000835167ffffffffffffffff81111561148b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114b95781602001602082028036833780820191505090505b50905060005b84518110156115a857611552858281518110611504577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611545577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610899565b82828151811061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806115a190614e7a565b90506114bf565b508091505092915050565b61271081565b6115c16120fe565b73ffffffffffffffffffffffffffffffffffffffff166115df6119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906148b6565b60405180910390fd5b806009908051906020019061164b929190613726565b5050565b6116576120fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169d575061169c836116976120fe565b611d7f565b5b6116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614816565b60405180910390fd5b6116e783838361264b565b505050565b6116f46120fe565b73ffffffffffffffffffffffffffffffffffffffff166117126119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906148b6565b60405180910390fd5b6117726000612948565b565b61177c6120fe565b73ffffffffffffffffffffffffffffffffffffffff1661179a6119e5565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e7906148b6565b60405180910390fd5b60004790506000811161180257600080fd5b611838735d083b6c5a6efb1c92a3af57d0fcdb67297af5e860646004846118299190614cbc565b6118339190614c8b565b612a0e565b61186e7307b956073c58d0dd38d7744d741d540cd213a5ca6064600f8461185f9190614cbc565b6118699190614c8b565b612a0e565b6118a4730e77ab08b861732f8b2a4128974310e57c2e50ab6064601b846118959190614cbc565b61189f9190614c8b565b612a0e565b6118da7304940d82f76caac41574095dce4b745d7be897316064601b846118cb9190614cbc565b6118d59190614c8b565b612a0e565b6118f873156b1fd8be08047782e46cd82d083ec0cde56a9647612a0e565b50565b6119036120fe565b73ffffffffffffffffffffffffffffffffffffffff166119216119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906148b6565b60405180910390fd5b80600560016101000a81548160ff0219169083151502179055507fe8a961e48c568d8e7d6f38fff715e3b772a633bbb7c97961533e041cd293de0c600560019054906101000a900460ff166040516119cf91906146b4565b60405180910390a150565b66ae153d89fe800081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7307b956073c58d0dd38d7744d741d540cd213a5ca81565b60088054611a3490614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6090614e17565b8015611aad5780601f10611a8257610100808354040283529160200191611aad565b820191906000526020600020905b815481529060010190602001808311611a9057829003601f168201915b505050505081565b600560009054906101000a900460ff1681565b611ada611ad36120fe565b8383612abf565b5050565b7304940d82f76caac41574095dce4b745d7be8973181565b601481565b611b036120fe565b73ffffffffffffffffffffffffffffffffffffffff16611b216119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906148b6565b60405180910390fd5b6000611b8161109b565b90506127108282611b929190614c35565b1115611b9d57600080fd5b60005b828160ff161015611bdc576000611bb561109b565b9050611bc8611bc26119e5565b82612106565b508080611bd490614ec3565b915050611ba0565b505050565b600560019054906101000a900460ff1681565b60045481565b73156b1fd8be08047782e46cd82d083ec0cde56a9681565b60098054611c1f90614e17565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4b90614e17565b8015611c985780601f10611c6d57610100808354040283529160200191611c98565b820191906000526020600020905b815481529060010190602001808311611c7b57829003601f168201915b505050505081565b611ca86120fe565b73ffffffffffffffffffffffffffffffffffffffff16611cc66119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906148b6565b60405180910390fd5b80600560006101000a81548160ff0219169083151502179055507f923f4240c72baece10ed8e92c68ea88e23f9b0fa967395f7d546016b3dad36a6600560009054906101000a900460ff16604051611d7491906146b4565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1b6120fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611e615750611e6085611e5b6120fe565b611d7f565b5b611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9790614816565b60405180910390fd5b611ead8585858585612c2c565b5050505050565b611ebc6120fe565b73ffffffffffffffffffffffffffffffffffffffff16611eda6119e5565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f27906148b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f97906147b6565b60405180910390fd5b611fa981612948565b50565b611fb46120fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ffa5750611ff983611ff46120fe565b611d7f565b5b612039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203090614816565b60405180910390fd5b612044838383612eae565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060405173ffffffffffffffffffffffffffffffffffffffff8316925082741400000000000000000000000000000000000000001860148201526034810160405280915050919050565b600033905090565b61212282826001604051806020016040528060008152506130cb565b61212c6006613261565b5050565b60606000821415612178576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122d8565b600082905060005b600082146121aa57808061219390614e7a565b915050600a826121a39190614c8b565b9150612180565b60008167ffffffffffffffff8111156121ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561221e5781602001600182028036833780820191505090505b5090505b600085146122d1576001826122379190614d16565b9150600a856122469190614ef7565b60306122529190614c35565b60f81b81838151811061228e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122ca9190614c8b565b9450612222565b8093505050505b919050565b600081600001549050919050565b815183511461232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614a16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614836565b60405180910390fd5b60006123a96120fe565b90506123b9818787878787613277565b60005b84518110156125b6576000858281518110612400577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110612445577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd90614896565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259b9190614c35565b92505081905550505050806125af90614e7a565b90506123bc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161262d92919061467d565b60405180910390a461264381878787878761327f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614876565b60405180910390fd5b80518251146126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614a16565b60405180910390fd5b60006127096120fe565b905061272981856000868660405180602001604052806000815250613277565b60005b83518110156128c2576000848281518110612770577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106127b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906147d6565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806128ba90614e7a565b91505061272c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161293a92919061467d565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612a3490614547565b60006040518083038185875af1925050503d8060008114612a71576040519150601f19603f3d011682016040523d82523d6000602084013e612a76565b606091505b5050905080612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614956565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b25906149b6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c1f91906146b4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9390614836565b60405180910390fd5b6000612ca66120fe565b9050612cc6818787612cb788613466565b612cc088613466565b87613277565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5490614896565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e129190614c35565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612e8f929190614a91565b60405180910390a4612ea582888888888861352c565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590614876565b60405180910390fd5b6000612f286120fe565b9050612f5881856000612f3a87613466565b612f4387613466565b60405180602001604052806000815250613277565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe6906147d6565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130bc929190614a91565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313290614a36565b60405180910390fd5b60006131456120fe565b90506131668160008761315788613466565b61316088613466565b87613277565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131c59190614c35565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613243929190614a91565b60405180910390a461325a8160008787878761352c565b5050505050565b6001816000016000828254019250508190555050565b505050505050565b61329e8473ffffffffffffffffffffffffffffffffffffffff16613713565b1561345e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016132e4959493929190614599565b602060405180830381600087803b1580156132fe57600080fd5b505af192505050801561332f57506040513d601f19601f8201168201806040525081019061332c9190613de5565b60015b6133d55761333b614fe4565b806308c379a014156133985750613350615703565b8061335b575061339a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f9190614714565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc90614736565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345390614776565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156134ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156134d95781602001602082028036833780820191505090505b5090508281600081518110613517577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61354b8473ffffffffffffffffffffffffffffffffffffffff16613713565b1561370b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613591959493929190614601565b602060405180830381600087803b1580156135ab57600080fd5b505af19250505080156135dc57506040513d601f19601f820116820180604052508101906135d99190613de5565b60015b613682576135e8614fe4565b806308c379a0141561364557506135fd615703565b806136085750613647565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363c9190614714565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367990614736565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614776565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461373290614e17565b90600052602060002090601f016020900481019282613754576000855561379b565b82601f1061376d57805160ff191683800117855561379b565b8280016001018555821561379b579182015b8281111561379a57825182559160200191906001019061377f565b5b5090506137a891906137ac565b5090565b5b808211156137c55760008160009055506001016137ad565b5090565b60006137dc6137d784614adf565b614aba565b905080838252602082019050828560208602820111156137fb57600080fd5b60005b8581101561382b5781613811888261391d565b8452602084019350602083019250506001810190506137fe565b5050509392505050565b600061384861384384614b0b565b614aba565b9050808382526020820190508285602086028201111561386757600080fd5b60005b85811015613897578161387d8882613a19565b84526020840193506020830192505060018101905061386a565b5050509392505050565b60006138b46138af84614b37565b614aba565b9050828152602081018484840111156138cc57600080fd5b6138d7848285614dd5565b509392505050565b60006138f26138ed84614b68565b614aba565b90508281526020810184848401111561390a57600080fd5b613915848285614dd5565b509392505050565b60008135905061392c81615799565b92915050565b600082601f83011261394357600080fd5b81356139538482602086016137c9565b91505092915050565b600082601f83011261396d57600080fd5b813561397d848260208601613835565b91505092915050565b600081359050613995816157b0565b92915050565b6000813590506139aa816157c7565b92915050565b6000815190506139bf816157c7565b92915050565b600082601f8301126139d657600080fd5b81356139e68482602086016138a1565b91505092915050565b600082601f830112613a0057600080fd5b8135613a108482602086016138df565b91505092915050565b600081359050613a28816157de565b92915050565b600060208284031215613a4057600080fd5b6000613a4e8482850161391d565b91505092915050565b60008060408385031215613a6a57600080fd5b6000613a788582860161391d565b9250506020613a898582860161391d565b9150509250929050565b600080600080600060a08688031215613aab57600080fd5b6000613ab98882890161391d565b9550506020613aca8882890161391d565b945050604086013567ffffffffffffffff811115613ae757600080fd5b613af38882890161395c565b935050606086013567ffffffffffffffff811115613b1057600080fd5b613b1c8882890161395c565b925050608086013567ffffffffffffffff811115613b3957600080fd5b613b45888289016139c5565b9150509295509295909350565b600080600080600060a08688031215613b6a57600080fd5b6000613b788882890161391d565b9550506020613b898882890161391d565b9450506040613b9a88828901613a19565b9350506060613bab88828901613a19565b925050608086013567ffffffffffffffff811115613bc857600080fd5b613bd4888289016139c5565b9150509295509295909350565b600080600060608486031215613bf657600080fd5b6000613c048682870161391d565b935050602084013567ffffffffffffffff811115613c2157600080fd5b613c2d8682870161395c565b925050604084013567ffffffffffffffff811115613c4a57600080fd5b613c568682870161395c565b9150509250925092565b60008060408385031215613c7357600080fd5b6000613c818582860161391d565b9250506020613c9285828601613986565b9150509250929050565b60008060408385031215613caf57600080fd5b6000613cbd8582860161391d565b9250506020613cce85828601613a19565b9150509250929050565b600080600060608486031215613ced57600080fd5b6000613cfb8682870161391d565b9350506020613d0c86828701613a19565b9250506040613d1d86828701613a19565b9150509250925092565b60008060408385031215613d3a57600080fd5b600083013567ffffffffffffffff811115613d5457600080fd5b613d6085828601613932565b925050602083013567ffffffffffffffff811115613d7d57600080fd5b613d898582860161395c565b9150509250929050565b600060208284031215613da557600080fd5b6000613db384828501613986565b91505092915050565b600060208284031215613dce57600080fd5b6000613ddc8482850161399b565b91505092915050565b600060208284031215613df757600080fd5b6000613e05848285016139b0565b91505092915050565b600060208284031215613e2057600080fd5b600082013567ffffffffffffffff811115613e3a57600080fd5b613e46848285016139ef565b91505092915050565b600060208284031215613e6157600080fd5b6000613e6f84828501613a19565b91505092915050565b60008060408385031215613e8b57600080fd5b6000613e9985828601613a19565b925050602083013567ffffffffffffffff811115613eb657600080fd5b613ec2858286016139c5565b9150509250929050565b6000613ed883836144d0565b60208301905092915050565b613eed81614d4a565b82525050565b6000613efe82614bbe565b613f088185614bec565b9350613f1383614b99565b8060005b83811015613f44578151613f2b8882613ecc565b9750613f3683614bdf565b925050600181019050613f17565b5085935050505092915050565b613f5a81614d5c565b82525050565b613f6981614d68565b82525050565b613f80613f7b82614d68565b614eed565b82525050565b6000613f9182614bc9565b613f9b8185614bfd565b9350613fab818560208601614de4565b613fb481615006565b840191505092915050565b6000613fca82614bc9565b613fd48185614c0e565b9350613fe4818560208601614de4565b80840191505092915050565b6000613ffb82614bd4565b6140058185614c19565b9350614015818560208601614de4565b61401e81615006565b840191505092915050565b600061403482614bd4565b61403e8185614c2a565b935061404e818560208601614de4565b80840191505092915050565b6000815461406781614e17565b6140718186614c2a565b9450600182166000811461408c576001811461409d576140d0565b60ff198316865281860193506140d0565b6140a685614ba9565b60005b838110156140c8578154818901526001820191506020810190506140a9565b838801955050505b50505092915050565b60006140e6603483614c19565b91506140f182615024565b604082019050919050565b6000614109601583614c19565b915061411482615073565b602082019050919050565b600061412c602883614c19565b91506141378261509c565b604082019050919050565b600061414f601c83614c2a565b915061415a826150eb565b601c82019050919050565b6000614172602b83614c19565b915061417d82615114565b604082019050919050565b6000614195602683614c19565b91506141a082615163565b604082019050919050565b60006141b8602483614c19565b91506141c3826151b2565b604082019050919050565b60006141db602b83614c19565b91506141e682615201565b604082019050919050565b60006141fe602983614c19565b915061420982615250565b604082019050919050565b6000614221602583614c19565b915061422c8261529f565b604082019050919050565b6000614244603283614c19565b915061424f826152ee565b604082019050919050565b6000614267602383614c19565b91506142728261533d565b604082019050919050565b600061428a602a83614c19565b91506142958261538c565b604082019050919050565b60006142ad602083614c19565b91506142b8826153db565b602082019050919050565b60006142d0601683614c19565b91506142db82615404565b602082019050919050565b60006142f3601183614c19565b91506142fe8261542d565b602082019050919050565b6000614316601383614c19565b915061432182615456565b602082019050919050565b6000614339601083614c19565b91506143448261547f565b602082019050919050565b600061435c600083614c0e565b9150614367826154a8565b600082019050919050565b600061437f601083614c19565b915061438a826154ab565b602082019050919050565b60006143a2601883614c19565b91506143ad826154d4565b602082019050919050565b60006143c5600c83614c19565b91506143d0826154fd565b602082019050919050565b60006143e8602983614c19565b91506143f382615526565b604082019050919050565b600061440b602983614c19565b915061441682615575565b604082019050919050565b600061442e602a83614c19565b9150614439826155c4565b604082019050919050565b6000614451602883614c19565b915061445c82615613565b604082019050919050565b6000614474602183614c19565b915061447f82615662565b604082019050919050565b6000614497600983614c2a565b91506144a2826156b1565b600982019050919050565b60006144ba600883614c19565b91506144c5826156da565b602082019050919050565b6144d981614dbe565b82525050565b6144e881614dbe565b82525050565b6144f781614dc8565b82525050565b6000614509828561405a565b91506145158284614029565b91508190509392505050565b600061452c82614142565b91506145388284613f6f565b60208201915081905092915050565b60006145528261434f565b9150819050919050565b60006145678261448a565b91506145738284613fbf565b915081905092915050565b60006020820190506145936000830184613ee4565b92915050565b600060a0820190506145ae6000830188613ee4565b6145bb6020830187613ee4565b81810360408301526145cd8186613ef3565b905081810360608301526145e18185613ef3565b905081810360808301526145f58184613f86565b90509695505050505050565b600060a0820190506146166000830188613ee4565b6146236020830187613ee4565b61463060408301866144df565b61463d60608301856144df565b818103608083015261464f8184613f86565b90509695505050505050565b600060208201905081810360008301526146758184613ef3565b905092915050565b600060408201905081810360008301526146978185613ef3565b905081810360208301526146ab8184613ef3565b90509392505050565b60006020820190506146c96000830184613f51565b92915050565b60006080820190506146e46000830187613f60565b6146f160208301866144ee565b6146fe6040830185613f60565b61470b6060830184613f60565b95945050505050565b6000602082019050818103600083015261472e8184613ff0565b905092915050565b6000602082019050818103600083015261474f816140d9565b9050919050565b6000602082019050818103600083015261476f816140fc565b9050919050565b6000602082019050818103600083015261478f8161411f565b9050919050565b600060208201905081810360008301526147af81614165565b9050919050565b600060208201905081810360008301526147cf81614188565b9050919050565b600060208201905081810360008301526147ef816141ab565b9050919050565b6000602082019050818103600083015261480f816141ce565b9050919050565b6000602082019050818103600083015261482f816141f1565b9050919050565b6000602082019050818103600083015261484f81614214565b9050919050565b6000602082019050818103600083015261486f81614237565b9050919050565b6000602082019050818103600083015261488f8161425a565b9050919050565b600060208201905081810360008301526148af8161427d565b9050919050565b600060208201905081810360008301526148cf816142a0565b9050919050565b600060208201905081810360008301526148ef816142c3565b9050919050565b6000602082019050818103600083015261490f816142e6565b9050919050565b6000602082019050818103600083015261492f81614309565b9050919050565b6000602082019050818103600083015261494f8161432c565b9050919050565b6000602082019050818103600083015261496f81614372565b9050919050565b6000602082019050818103600083015261498f81614395565b9050919050565b600060208201905081810360008301526149af816143b8565b9050919050565b600060208201905081810360008301526149cf816143db565b9050919050565b600060208201905081810360008301526149ef816143fe565b9050919050565b60006020820190508181036000830152614a0f81614421565b9050919050565b60006020820190508181036000830152614a2f81614444565b9050919050565b60006020820190508181036000830152614a4f81614467565b9050919050565b60006020820190508181036000830152614a6f816144ad565b9050919050565b6000602082019050614a8b60008301846144df565b92915050565b6000604082019050614aa660008301856144df565b614ab360208301846144df565b9392505050565b6000614ac4614ad5565b9050614ad08282614e49565b919050565b6000604051905090565b600067ffffffffffffffff821115614afa57614af9614fb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b2657614b25614fb5565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b5257614b51614fb5565b5b614b5b82615006565b9050602081019050919050565b600067ffffffffffffffff821115614b8357614b82614fb5565b5b614b8c82615006565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c4082614dbe565b9150614c4b83614dbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c8057614c7f614f28565b5b828201905092915050565b6000614c9682614dbe565b9150614ca183614dbe565b925082614cb157614cb0614f57565b5b828204905092915050565b6000614cc782614dbe565b9150614cd283614dbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0b57614d0a614f28565b5b828202905092915050565b6000614d2182614dbe565b9150614d2c83614dbe565b925082821015614d3f57614d3e614f28565b5b828203905092915050565b6000614d5582614d9e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614e02578082015181840152602081019050614de7565b83811115614e11576000848401525b50505050565b60006002820490506001821680614e2f57607f821691505b60208210811415614e4357614e42614f86565b5b50919050565b614e5282615006565b810181811067ffffffffffffffff82111715614e7157614e70614fb5565b5b80604052505050565b6000614e8582614dbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eb857614eb7614f28565b5b600182019050919050565b6000614ece82614dc8565b915060ff821415614ee257614ee1614f28565b5b600182019050919050565b6000819050919050565b6000614f0282614dbe565b9150614f0d83614dbe565b925082614f1d57614f1c614f57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156150035760046000803e615000600051615017565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e206e6f74206d696e746564207965742e0000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206d696e74206d6f7265207468616e2074686520616c6c60008201527f6f77656420616d6f756e74000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f752063616e2774206d696e74203020526562656c00000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f50726573616c65206973206e6f74206f70656e00000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b7f496e76616c6964207369676e0000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620526562656c7a00000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f726562656c7a6e66740000000000000000000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b600060443d101561571357615796565b61571b614ad5565b60043d036004823e80513d602482011167ffffffffffffffff82111715615743575050615796565b808201805167ffffffffffffffff8111156157615750505050615796565b80602083010160043d03850181111561577e575050505050615796565b61578d82602001850186614e49565b82955050505050505b90565b6157a281614d4a565b81146157ad57600080fd5b50565b6157b981614d5c565b81146157c457600080fd5b50565b6157d081614d72565b81146157db57600080fd5b50565b6157e781614dbe565b81146157f257600080fd5b5056fea264697066735822122052388d5a9f92178cdfdfdabddf7f4393e06d1c8b614df4e0582967aa8290ee0664736f6c63430008020033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000003f9e77520c7b7a03c7a5b34189f68066c00bc20d000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f726562656c7a6e66742e636f6d2f6170692f726562656c7a2f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://rebelznft.com/api/rebelz/
Arg [1] : _validator (address): 0x3F9E77520C7B7A03c7A5b34189f68066C00bC20D

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000003f9e77520c7b7a03c7a5b34189f68066c00bc20d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [3] : 68747470733a2f2f726562656c7a6e66742e636f6d2f6170692f726562656c7a
Arg [4] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

2074:7250:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2159:306:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2765:92:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2569;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3066:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6747:907;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5172:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3750:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6104:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6212:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4218:430:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7660:721:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3853:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2622:542:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2175:41:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5067:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;708:342:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1683:101:11;;;;;;;;;;;;;:::i;:::-;;8717:421:12;;;;;;;;;;;;;:::i;:::-;;6453:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2273:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1051:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2667:92:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3090:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2864:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3232:181:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2471:92:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2222:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8387:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2898:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2323:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2373:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3116:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6317:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3480:210:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3757:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1933:232:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;392:310:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2159:306:3;2285:7;2348:1;2329:21;;:7;:21;;;;2308:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;2436:9;:13;2446:2;2436:13;;;;;;;;;;;:22;2450:7;2436:22;;;;;;;;;;;;;;;;2429:29;;2159:306;;;;:::o;1166:349::-;1308:4;1362:26;1347:41;;;:11;:41;;;;:109;;;;1419:37;1404:52;;;:11;:52;;;;1347:109;:161;;;;1472:36;1496:11;1472:23;:36::i;:::-;1347:161;1328:180;;1166:349;;;:::o;2765:92:12:-;2815:42;2765:92;:::o;2569:::-;2619:42;2569:92;:::o;3066:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6747:907::-;2211:5;3634:13;:11;:13::i;:::-;:26;;3626:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:11;;;;;;;;;;;3683:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;6881:10:::1;6893:5;4457:2;4441:5;:12;:18;4433:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4499:25;4527:15;4535:6;4527:7;:15::i;:::-;4499:43;;4553:13;4718:12;4688:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;4678:54;;;;;;4592:154;;;;;;;;:::i;:::-;;;;;;;;;;;;;4569:187;;;;;;4553:203;;4767:9;4786::::0;4805:7:::1;4868:2;4861:5;4857:14;4851:21;4846:26;;4907:2;4900:5;4896:14;4890:21;4885:26;;4954:2;4947:5;4943:14;4937:21;4934:1;4929:30;4924:35;;5016:10;;;;;;;;;;;4987:39;;:25;4997:5;5004:1;5007;5010;4987:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;:39;;;4979:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6914:13:::2;6930;:11;:13::i;:::-;6914:29;;6953:14;6970:12;:10;:12::i;:::-;6953:29;;7018:1;7000:15;:19;6992:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7141:24;;7106:15;7077:18;:26;7096:6;7077:26;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:88;;7056:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:5;7273:15;7265:5;:23;;;;:::i;:::-;:36;;7244:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;7400:22;7406:15;7400:5;:22::i;:::-;7387:9;:35;;7379:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7459:7;7454:194;7476:15;7472:1;:19;;;7454:194;;;7512:19;7534:13;:11;:13::i;:::-;7512:35;;7561:31;7572:6;7580:11;7561:10;:31::i;:::-;7636:1;7606:18;:26;7625:6;7606:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;7454:194;7493:3;;;;;:::i;:::-;;;;7454:194;;;;5053:1;;3736::::1;;;;;;;6747:907:::0;;:::o;5172:262::-;5265:13;5313;:11;:13::i;:::-;5302:8;:24;5294:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;5393:12;5407:18;5416:8;5407;:18::i;:::-;5376:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5362:65;;5172:262;;;:::o;3750:97::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3831:9:12::1;3818:10;;:22;;;;;;;;;;;;;;;;;;3750:97:::0;:::o;6104:102::-;6148:7;6174:25;:15;:23;:25::i;:::-;6167:32;;6104:102;:::o;6212:99::-;6264:7;6298:6;2305:11;6290:14;;;;:::i;:::-;6283:21;;6212:99;;;:::o;4218:430:3:-;4451:12;:10;:12::i;:::-;4443:20;;:4;:20;;;:60;;;;4467:36;4484:4;4490:12;:10;:12::i;:::-;4467:16;:36::i;:::-;4443:60;4422:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4589:52;4612:4;4618:2;4622:3;4627:7;4636:4;4589:22;:52::i;:::-;4218:430;;;;;:::o;7660:721:12:-;2211:5;3481:13;:11;:13::i;:::-;:26;;3473:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;3538:8;;;;;;;;;;;3530:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;7739:13:::1;7755;:11;:13::i;:::-;7739:29;;7778:14;7795:12;:10;:12::i;:::-;7778:29;;7843:1;7825:15;:19;7817:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2265:2;7902:15;:35;;7881:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:5;8045:15;8037:5;:23;;;;:::i;:::-;:36;;8016:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;8172:22;8178:15;8172:5;:22::i;:::-;8159:9;:35;;8151:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8231:7;8226:149;8248:15;8244:1;:19;;;8226:149;;;8284:19;8306:13;:11;:13::i;:::-;8284:35;;8333:31;8344:6;8352:11;8333:10;:31::i;:::-;8226:149;8265:3;;;;;:::i;:::-;;;;8226:149;;;;3577:1;;7660:721:::0;:::o;3853:115::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3955:6:12::1;3928:24;:33;;;;3853:115:::0;:::o;2622:542:3:-;2773:16;2845:3;:10;2826:8;:15;:29;2805:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;2933:30;2980:8;:15;2966:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2933:63;;3012:9;3007:120;3031:8;:15;3027:1;:19;3007:120;;;3086:30;3096:8;3105:1;3096:11;;;;;;;;;;;;;;;;;;;;;;3109:3;3113:1;3109:6;;;;;;;;;;;;;;;;;;;;;;3086:9;:30::i;:::-;3067:13;3081:1;3067:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;3048:3;;;;:::i;:::-;;;3007:120;;;;3144:13;3137:20;;;2622:542;;;;:::o;2175:41:12:-;2211:5;2175:41;:::o;5067:99::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5152:7:12::1;5137:12;:22;;;;;;;;;;;;:::i;:::-;;5067:99:::0;:::o;708:342:4:-;878:12;:10;:12::i;:::-;867:23;;:7;:23;;;:66;;;;894:39;911:7;920:12;:10;:12::i;:::-;894:16;:39::i;:::-;867:66;846:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:32;1022:7;1031:3;1036:6;1011:10;:32::i;:::-;708:342;;;:::o;1683:101:11:-;1274:12;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:30:::1;1774:1;1747:18;:30::i;:::-;1683:101::o:0;8717:421:12:-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8767:15:12::1;8785:21;8767:39;;8834:1;8824:7;:11;8816:20;;;::::0;::::1;;8846:48;2815:42;8890:3;8885:1;8875:7;:11;;;;:::i;:::-;8874:19;;;;:::i;:::-;8846:10;:48::i;:::-;8904:49;2717:42;8949:3;8943:2;8933:7;:12;;;;:::i;:::-;8932:20;;;;:::i;:::-;8904:10;:49::i;:::-;8963;2619:42;9008:3;9002:2;8992:7;:12;;;;:::i;:::-;8991:20;;;;:::i;:::-;8963:10;:49::i;:::-;9022;2521:42;9067:3;9061:2;9051:7;:12;;;;:::i;:::-;9050:20;;;;:::i;:::-;9022:10;:49::i;:::-;9081:50;2423:42;9109:21;9081:10;:50::i;:::-;1333:1:11;8717:421:12:o:0;6453:142::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6534:7:12::1;6520:11;;:21;;;;;;;;;;;;;;;;;;6556:32;6576:11;;;;;;;;;;;6556:32;;;;;;:::i;:::-;;;;;;;;6453:142:::0;:::o;2273:43::-;2305:11;2273:43;:::o;1051:85:11:-;1097:7;1123:6;;;;;;;;;;;1116:13;;1051:85;:::o;2667:92:12:-;2717:42;2667:92;:::o;3090:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2864:28::-;;;;;;;;;;;;;:::o;3232:181:3:-;3354:52;3373:12;:10;:12::i;:::-;3387:8;3397;3354:18;:52::i;:::-;3232:181;;:::o;2471:92:12:-;2521:42;2471:92;:::o;2222:45::-;2265:2;2222:45;:::o;8387:324::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8461:13:12::1;8477;:11;:13::i;:::-;8461:29;;2211:5;8516:15;8508:5;:23;;;;:::i;:::-;:36;;8500:45;;;::::0;::::1;;8560:7;8555:150;8577:15;8573:1;:19;;;8555:150;;;8613:19;8635:13;:11;:13::i;:::-;8613:35;;8662:32;8673:7;:5;:7::i;:::-;8682:11;8662:10;:32::i;:::-;8555:150;8594:3;;;;;:::i;:::-;;;;8555:150;;;;1333:1:11;8387:324:12::0;:::o;2898:31::-;;;;;;;;;;;;;:::o;2323:43::-;;;;:::o;2373:92::-;2423:42;2373:92;:::o;3116:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6317:130::-;1274:12:11;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6392:7:12::1;6381:8;;:18;;;;;;;;;;;;;;;;;;6414:26;6431:8;;;;;;;;;;;6414:26;;;;;;:::i;:::-;;;;;;;;6317:130:::0;:::o;3480:210:3:-;3619:4;3646:18;:27;3665:7;3646:27;;;;;;;;;;;;;;;:37;3674:8;3646:37;;;;;;;;;;;;;;;;;;;;;;;;;3639:44;;3480:210;;;;:::o;3757:389::-;3965:12;:10;:12::i;:::-;3957:20;;:4;:20;;;:60;;;;3981:36;3998:4;4004:12;:10;:12::i;:::-;3981:16;:36::i;:::-;3957:60;3936:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;4094:45;4112:4;4118:2;4122;4126:6;4134:4;4094:17;:45::i;:::-;3757:389;;;;;:::o;1933:232:11:-;1274:12;:10;:12::i;:::-;1263:23;;:7;:5;:7::i;:::-;:23;;;1255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2054:1:::1;2034:22;;:8;:22;;;;2013:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2130:28;2149:8;2130:18;:28::i;:::-;1933:232:::0;:::o;392:310:4:-;537:12;:10;:12::i;:::-;526:23;;:7;:23;;;:66;;;;553:39;570:7;579:12;:10;:12::i;:::-;553:16;:39::i;:::-;526:66;505:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:25;676:7;685:2;689:5;670;:25::i;:::-;392:310;;;:::o;829:199:5:-;954:4;996:25;981:40;;;:11;:40;;;;974:47;;829:199;;;:::o;3974:391:12:-;4025:14;4089:4;4083:11;4119:42;4116:1;4112:50;4107:55;;4277:1;4231:44;4227:52;4206:2;4203:1;4199:10;4175:118;4326:2;4323:1;4319:10;4313:4;4306:24;4348:1;4343:6;;4060:299;;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;6601:140:12:-;6670:27;6676:3;6681:8;6691:1;6670:27;;;;;;;;;;;;:5;:27::i;:::-;6707;:15;:25;:27::i;:::-;6601:140;;:::o;5535:515::-;5591:13;5629:1;5620:5;:10;5616:51;;;5646:10;;;;;;;;;;;;;;;;;;;;;5616:51;5676:12;5691:5;5676:20;;5706:14;5730:75;5745:1;5737:4;:9;5730:75;;5762:8;;;;;:::i;:::-;;;;5792:2;5784:10;;;;;:::i;:::-;;;5730:75;;;5814:19;5846:6;5836:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5814:39;;5863:150;5879:1;5870:5;:10;5863:150;;5906:1;5896:11;;;;;:::i;:::-;;;5972:2;5964:5;:10;;;;:::i;:::-;5951:2;:24;;;;:::i;:::-;5938:39;;5921:6;5928;5921:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;6000:2;5991:11;;;;;:::i;:::-;;;5863:150;;;6036:6;6022:21;;;;;5535:515;;;;:::o;827:112:2:-;892:7;918;:14;;;911:21;;827:112;;;:::o;6357:1207:3:-;6590:7;:14;6576:3;:10;:28;6555:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;6702:1;6688:16;;:2;:16;;;;6680:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6757:16;6776:12;:10;:12::i;:::-;6757:31;;6799:60;6820:8;6830:4;6836:2;6840:3;6845:7;6854:4;6799:20;:60::i;:::-;6875:9;6870:457;6894:3;:10;6890:1;:14;6870:457;;;6925:10;6938:3;6942:1;6938:6;;;;;;;;;;;;;;;;;;;;;;6925:19;;6958:14;6975:7;6983:1;6975:10;;;;;;;;;;;;;;;;;;;;;;6958:27;;7000:19;7022:9;:13;7032:2;7022:13;;;;;;;;;;;:19;7036:4;7022:19;;;;;;;;;;;;;;;;7000:41;;7095:6;7080:11;:21;;7055:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7255:6;7241:11;:20;7219:9;:13;7229:2;7219:13;;;;;;;;;;;:19;7233:4;7219:19;;;;;;;;;;;;;;;:42;;;;7310:6;7289:9;:13;7299:2;7289:13;;;;;;;;;;;:17;7303:2;7289:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6870:457;;;6906:3;;;;:::i;:::-;;;6870:457;;;;7372:2;7342:47;;7366:4;7342:47;;7356:8;7342:47;;;7376:3;7381:7;7342:47;;;;;;;:::i;:::-;;;;;;;;7400:157;7449:8;7471:4;7489:2;7505:3;7522:7;7543:4;7400:35;:157::i;:::-;6357:1207;;;;;;:::o;11885:947::-;12048:1;12032:18;;:4;:18;;;;12024:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12135:7;:14;12121:3;:10;:28;12100:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;12226:16;12245:12;:10;:12::i;:::-;12226:31;;12268:66;12289:8;12299:4;12313:1;12317:3;12322:7;12268:66;;;;;;;;;;;;:20;:66::i;:::-;12350:9;12345:410;12369:3;:10;12365:1;:14;12345:410;;;12400:10;12413:3;12417:1;12413:6;;;;;;;;;;;;;;;;;;;;;;12400:19;;12433:14;12450:7;12458:1;12450:10;;;;;;;;;;;;;;;;;;;;;;12433:27;;12475:19;12497:9;:13;12507:2;12497:13;;;;;;;;;;;:19;12511:4;12497:19;;;;;;;;;;;;;;;;12475:41;;12570:6;12555:11;:21;;12530:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12724:6;12710:11;:20;12688:9;:13;12698:2;12688:13;;;;;;;;;;;:19;12702:4;12688:19;;;;;;;;;;;;;;;:42;;;;12345:410;;;12381:3;;;;;:::i;:::-;;;;12345:410;;;;12808:1;12770:55;;12794:4;12770:55;;12784:8;12770:55;;;12812:3;12817:7;12770:55;;;;;;;:::i;:::-;;;;;;;;11885:947;;;;:::o;2319:187:11:-;2392:16;2411:6;;;;;;;;;;;2392:25;;2436:8;2427:6;;:17;;;;;;;;;;;;;;;;;;2490:8;2459:40;;2480:8;2459:40;;;;;;;;;;;;2319:187;;:::o;9144:178:12:-;9218:12;9236:8;:13;;9257:7;9236:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9217:52;;;9287:7;9279:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;9144:178;;;:::o;12967:323:3:-;13117:8;13108:17;;:5;:17;;;;13100:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13219:8;13181:18;:25;13200:5;13181:25;;;;;;;;;;;;;;;:35;13207:8;13181:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13264:8;13242:41;;13257:5;13242:41;;;13274:8;13242:41;;;;;;:::i;:::-;;;;;;;;12967:323;;;:::o;5098:913::-;5293:1;5279:16;;:2;:16;;;;5271:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5348:16;5367:12;:10;:12::i;:::-;5348:31;;5390:178;5424:8;5446:4;5464:2;5480:21;5498:2;5480:17;:21::i;:::-;5515:25;5533:6;5515:17;:25::i;:::-;5554:4;5390:20;:178::i;:::-;5579:19;5601:9;:13;5611:2;5601:13;;;;;;;;;;;:19;5615:4;5601:19;;;;;;;;;;;;;;;;5579:41;;5666:6;5651:11;:21;;5630:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5810:6;5796:11;:20;5774:9;:13;5784:2;5774:13;;;;;;;;;;;:19;5788:4;5774:19;;;;;;;;;;;;;;;:42;;;;5857:6;5836:9;:13;5846:2;5836:13;;;;;;;;;;;:17;5850:2;5836:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5910:2;5879:46;;5904:4;5879:46;;5894:8;5879:46;;;5914:2;5918:6;5879:46;;;;;;;:::i;:::-;;;;;;;;5936:68;5967:8;5977:4;5983:2;5987;5991:6;5999:4;5936:30;:68::i;:::-;5098:913;;;;;;;:::o;10979:712::-;11117:1;11101:18;;:4;:18;;;;11093:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11170:16;11189:12;:10;:12::i;:::-;11170:31;;11212:184;11246:8;11268:4;11294:1;11310:21;11328:2;11310:17;:21::i;:::-;11345:25;11363:6;11345:17;:25::i;:::-;11212:184;;;;;;;;;;;;:20;:184::i;:::-;11407:19;11429:9;:13;11439:2;11429:13;;;;;;;;;;;:19;11443:4;11429:19;;;;;;;;;;;;;;;;11407:41;;11481:6;11466:11;:21;;11458:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11598:6;11584:11;:20;11562:9;:13;11572:2;11562:13;;;;;;;;;;;:19;11576:4;11562:19;;;;;;;;;;;;;;;:42;;;;11669:1;11630:54;;11655:4;11630:54;;11645:8;11630:54;;;11673:2;11677:6;11630:54;;;;;;;:::i;:::-;;;;;;;;10979:712;;;;;:::o;8846:717::-;9007:1;8993:16;;:2;:16;;;;8985:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9058:16;9077:12;:10;:12::i;:::-;9058:31;;9100:184;9134:8;9164:1;9180:2;9196:21;9214:2;9196:17;:21::i;:::-;9231:25;9249:6;9231:17;:25::i;:::-;9270:4;9100:20;:184::i;:::-;9316:6;9295:9;:13;9305:2;9295:13;;;;;;;;;;;:17;9309:2;9295:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9374:2;9337:52;;9370:1;9337:52;;9352:8;9337:52;;;9378:2;9382:6;9337:52;;;;;;;:::i;:::-;;;;;;;;9400:156;9444:8;9474:1;9490:2;9506;9522:6;9542:4;9400:30;:156::i;:::-;8846:717;;;;;:::o;945:123:2:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;14224:214:3:-;;;;;;;:::o;15321:946::-;15553:15;:2;:13;;;:15::i;:::-;15549:712;;;15621:2;15604:43;;;15669:8;15699:4;15725:3;15750:7;15779:4;15604:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15584:667;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16127:6;16120:14;;;;;;;;;;;:::i;:::-;;;;;;;;15584:667;;;16174:62;;;;;;;;;;:::i;:::-;;;;;;;;15584:667;15895:48;;;15883:60;;;:8;:60;;;;15858:195;;15984:50;;;;;;;;;;:::i;:::-;;;;;;;;15858:195;15814:253;15549:712;15321:946;;;;;;:::o;16273:221::-;16363:16;16395:22;16434:1;16420:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16395:41;;16457:7;16446:5;16452:1;16446:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;16482:5;16475:12;;;16273:221;;;:::o;14444:871::-;14651:15;:2;:13;;;:15::i;:::-;14647:662;;;14719:2;14702:38;;;14762:8;14792:4;14818:2;14842:6;14870:4;14702:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14682:617;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15175:6;15168:14;;;;;;;;;;;:::i;:::-;;;;;;;;14682:617;;;15222:62;;;;;;;;;;:::i;:::-;;;;;;;;14682:617;14965:43;;;14953:55;;;:8;:55;;;;14949:152;;15032:50;;;;;;;;;;:::i;:::-;;;;;;;;14949:152;14905:210;14647:662;14444:871;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:13:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;670:623::-;;791:81;807:64;864:6;807:64;:::i;:::-;791:81;:::i;:::-;782:90;;892:5;920:6;913:5;906:21;946:4;939:5;935:16;928:23;;971:6;1021:3;1013:4;1005:6;1001:17;996:3;992:27;989:36;986:2;;;1038:1;1035;1028:12;986:2;1066:1;1051:236;1076:6;1073:1;1070:13;1051:236;;;1143:3;1171:37;1204:3;1192:10;1171:37;:::i;:::-;1166:3;1159:50;1238:4;1233:3;1229:14;1222:21;;1272:4;1267:3;1263:14;1256:21;;1111:176;1098:1;1095;1091:9;1086:14;;1051:236;;;1055:14;772:521;;;;;;;:::o;1299:343::-;;1401:65;1417:48;1458:6;1417:48;:::i;:::-;1401:65;:::i;:::-;1392:74;;1489:6;1482:5;1475:21;1527:4;1520:5;1516:16;1565:3;1556:6;1551:3;1547:16;1544:25;1541:2;;;1582:1;1579;1572:12;1541:2;1595:41;1629:6;1624:3;1619;1595:41;:::i;:::-;1382:260;;;;;;:::o;1648:345::-;;1751:66;1767:49;1809:6;1767:49;:::i;:::-;1751:66;:::i;:::-;1742:75;;1840:6;1833:5;1826:21;1878:4;1871:5;1867:16;1916:3;1907:6;1902:3;1898:16;1895:25;1892:2;;;1933:1;1930;1923:12;1892:2;1946:41;1980:6;1975:3;1970;1946:41;:::i;:::-;1732:261;;;;;;:::o;1999:139::-;;2083:6;2070:20;2061:29;;2099:33;2126:5;2099:33;:::i;:::-;2051:87;;;;:::o;2161:303::-;;2281:3;2274:4;2266:6;2262:17;2258:27;2248:2;;2299:1;2296;2289:12;2248:2;2339:6;2326:20;2364:94;2454:3;2446:6;2439:4;2431:6;2427:17;2364:94;:::i;:::-;2355:103;;2238:226;;;;;:::o;2487:303::-;;2607:3;2600:4;2592:6;2588:17;2584:27;2574:2;;2625:1;2622;2615:12;2574:2;2665:6;2652:20;2690:94;2780:3;2772:6;2765:4;2757:6;2753:17;2690:94;:::i;:::-;2681:103;;2564:226;;;;;:::o;2796:133::-;;2877:6;2864:20;2855:29;;2893:30;2917:5;2893:30;:::i;:::-;2845:84;;;;:::o;2935:137::-;;3018:6;3005:20;2996:29;;3034:32;3060:5;3034:32;:::i;:::-;2986:86;;;;:::o;3078:141::-;;3165:6;3159:13;3150:22;;3181:32;3207:5;3181:32;:::i;:::-;3140:79;;;;:::o;3238:271::-;;3342:3;3335:4;3327:6;3323:17;3319:27;3309:2;;3360:1;3357;3350:12;3309:2;3400:6;3387:20;3425:78;3499:3;3491:6;3484:4;3476:6;3472:17;3425:78;:::i;:::-;3416:87;;3299:210;;;;;:::o;3529:273::-;;3634:3;3627:4;3619:6;3615:17;3611:27;3601:2;;3652:1;3649;3642:12;3601:2;3692:6;3679:20;3717:79;3792:3;3784:6;3777:4;3769:6;3765:17;3717:79;:::i;:::-;3708:88;;3591:211;;;;;:::o;3808:139::-;;3892:6;3879:20;3870:29;;3908:33;3935:5;3908:33;:::i;:::-;3860:87;;;;:::o;3953:262::-;;4061:2;4049:9;4040:7;4036:23;4032:32;4029:2;;;4077:1;4074;4067:12;4029:2;4120:1;4145:53;4190:7;4181:6;4170:9;4166:22;4145:53;:::i;:::-;4135:63;;4091:117;4019:196;;;;:::o;4221:407::-;;;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4362:1;4359;4352:12;4314:2;4405:1;4430:53;4475:7;4466:6;4455:9;4451:22;4430:53;:::i;:::-;4420:63;;4376:117;4532:2;4558:53;4603:7;4594:6;4583:9;4579:22;4558:53;:::i;:::-;4548:63;;4503:118;4304:324;;;;;:::o;4634:1241::-;;;;;;4869:3;4857:9;4848:7;4844:23;4840:33;4837:2;;;4886:1;4883;4876:12;4837:2;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5212:2;5201:9;5197:18;5184:32;5243:18;5235:6;5232:30;5229:2;;;5275:1;5272;5265:12;5229:2;5303:78;5373:7;5364:6;5353:9;5349:22;5303:78;:::i;:::-;5293:88;;5155:236;5458:2;5447:9;5443:18;5430:32;5489:18;5481:6;5478:30;5475:2;;;5521:1;5518;5511:12;5475:2;5549:78;5619:7;5610:6;5599:9;5595:22;5549:78;:::i;:::-;5539:88;;5401:236;5704:3;5693:9;5689:19;5676:33;5736:18;5728:6;5725:30;5722:2;;;5768:1;5765;5758:12;5722:2;5796:62;5850:7;5841:6;5830:9;5826:22;5796:62;:::i;:::-;5786:72;;5647:221;4827:1048;;;;;;;;:::o;5881:955::-;;;;;;6066:3;6054:9;6045:7;6041:23;6037:33;6034:2;;;6083:1;6080;6073:12;6034:2;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;6381:2;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;:::i;:::-;6397:63;;6352:118;6509:2;6535:53;6580:7;6571:6;6560:9;6556:22;6535:53;:::i;:::-;6525:63;;6480:118;6665:3;6654:9;6650:19;6637:33;6697:18;6689:6;6686:30;6683:2;;;6729:1;6726;6719:12;6683:2;6757:62;6811:7;6802:6;6791:9;6787:22;6757:62;:::i;:::-;6747:72;;6608:221;6024:812;;;;;;;;:::o;6842:838::-;;;;7034:2;7022:9;7013:7;7009:23;7005:32;7002:2;;;7050:1;7047;7040:12;7002:2;7093:1;7118:53;7163:7;7154:6;7143:9;7139:22;7118:53;:::i;:::-;7108:63;;7064:117;7248:2;7237:9;7233:18;7220:32;7279:18;7271:6;7268:30;7265:2;;;7311:1;7308;7301:12;7265:2;7339:78;7409:7;7400:6;7389:9;7385:22;7339:78;:::i;:::-;7329:88;;7191:236;7494:2;7483:9;7479:18;7466:32;7525:18;7517:6;7514:30;7511:2;;;7557:1;7554;7547:12;7511:2;7585:78;7655:7;7646:6;7635:9;7631:22;7585:78;:::i;:::-;7575:88;;7437:236;6992:688;;;;;:::o;7686:401::-;;;7808:2;7796:9;7787:7;7783:23;7779:32;7776:2;;;7824:1;7821;7814:12;7776:2;7867:1;7892:53;7937:7;7928:6;7917:9;7913:22;7892:53;:::i;:::-;7882:63;;7838:117;7994:2;8020:50;8062:7;8053:6;8042:9;8038:22;8020:50;:::i;:::-;8010:60;;7965:115;7766:321;;;;;:::o;8093:407::-;;;8218:2;8206:9;8197:7;8193:23;8189:32;8186:2;;;8234:1;8231;8224:12;8186:2;8277:1;8302:53;8347:7;8338:6;8327:9;8323:22;8302:53;:::i;:::-;8292:63;;8248:117;8404:2;8430:53;8475:7;8466:6;8455:9;8451:22;8430:53;:::i;:::-;8420:63;;8375:118;8176:324;;;;;:::o;8506:552::-;;;;8648:2;8636:9;8627:7;8623:23;8619:32;8616:2;;;8664:1;8661;8654:12;8616:2;8707:1;8732:53;8777:7;8768:6;8757:9;8753:22;8732:53;:::i;:::-;8722:63;;8678:117;8834:2;8860:53;8905:7;8896:6;8885:9;8881:22;8860:53;:::i;:::-;8850:63;;8805:118;8962:2;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8933:118;8606:452;;;;;:::o;9064:693::-;;;9239:2;9227:9;9218:7;9214:23;9210:32;9207:2;;;9255:1;9252;9245:12;9207:2;9326:1;9315:9;9311:17;9298:31;9356:18;9348:6;9345:30;9342:2;;;9388:1;9385;9378:12;9342:2;9416:78;9486:7;9477:6;9466:9;9462:22;9416:78;:::i;:::-;9406:88;;9269:235;9571:2;9560:9;9556:18;9543:32;9602:18;9594:6;9591:30;9588:2;;;9634:1;9631;9624:12;9588:2;9662:78;9732:7;9723:6;9712:9;9708:22;9662:78;:::i;:::-;9652:88;;9514:236;9197:560;;;;;:::o;9763:256::-;;9868:2;9856:9;9847:7;9843:23;9839:32;9836:2;;;9884:1;9881;9874:12;9836:2;9927:1;9952:50;9994:7;9985:6;9974:9;9970:22;9952:50;:::i;:::-;9942:60;;9898:114;9826:193;;;;:::o;10025:260::-;;10132:2;10120:9;10111:7;10107:23;10103:32;10100:2;;;10148:1;10145;10138:12;10100:2;10191:1;10216:52;10260:7;10251:6;10240:9;10236:22;10216:52;:::i;:::-;10206:62;;10162:116;10090:195;;;;:::o;10291:282::-;;10409:2;10397:9;10388:7;10384:23;10380:32;10377:2;;;10425:1;10422;10415:12;10377:2;10468:1;10493:63;10548:7;10539:6;10528:9;10524:22;10493:63;:::i;:::-;10483:73;;10439:127;10367:206;;;;:::o;10579:375::-;;10697:2;10685:9;10676:7;10672:23;10668:32;10665:2;;;10713:1;10710;10703:12;10665:2;10784:1;10773:9;10769:17;10756:31;10814:18;10806:6;10803:30;10800:2;;;10846:1;10843;10836:12;10800:2;10874:63;10929:7;10920:6;10909:9;10905:22;10874:63;:::i;:::-;10864:73;;10727:220;10655:299;;;;:::o;10960:262::-;;11068:2;11056:9;11047:7;11043:23;11039:32;11036:2;;;11084:1;11081;11074:12;11036:2;11127:1;11152:53;11197:7;11188:6;11177:9;11173:22;11152:53;:::i;:::-;11142:63;;11098:117;11026:196;;;;:::o;11228:518::-;;;11362:2;11350:9;11341:7;11337:23;11333:32;11330:2;;;11378:1;11375;11368:12;11330:2;11421:1;11446:53;11491:7;11482:6;11471:9;11467:22;11446:53;:::i;:::-;11436:63;;11392:117;11576:2;11565:9;11561:18;11548:32;11607:18;11599:6;11596:30;11593:2;;;11639:1;11636;11629:12;11593:2;11667:62;11721:7;11712:6;11701:9;11697:22;11667:62;:::i;:::-;11657:72;;11519:220;11320:426;;;;;:::o;11752:179::-;;11842:46;11884:3;11876:6;11842:46;:::i;:::-;11920:4;11915:3;11911:14;11897:28;;11832:99;;;;:::o;11937:118::-;12024:24;12042:5;12024:24;:::i;:::-;12019:3;12012:37;12002:53;;:::o;12091:732::-;;12239:54;12287:5;12239:54;:::i;:::-;12309:86;12388:6;12383:3;12309:86;:::i;:::-;12302:93;;12419:56;12469:5;12419:56;:::i;:::-;12498:7;12529:1;12514:284;12539:6;12536:1;12533:13;12514:284;;;12615:6;12609:13;12642:63;12701:3;12686:13;12642:63;:::i;:::-;12635:70;;12728:60;12781:6;12728:60;:::i;:::-;12718:70;;12574:224;12561:1;12558;12554:9;12549:14;;12514:284;;;12518:14;12814:3;12807:10;;12215:608;;;;;;;:::o;12829:109::-;12910:21;12925:5;12910:21;:::i;:::-;12905:3;12898:34;12888:50;;:::o;12944:118::-;13031:24;13049:5;13031:24;:::i;:::-;13026:3;13019:37;13009:53;;:::o;13068:157::-;13173:45;13193:24;13211:5;13193:24;:::i;:::-;13173:45;:::i;:::-;13168:3;13161:58;13151:74;;:::o;13231:360::-;;13345:38;13377:5;13345:38;:::i;:::-;13399:70;13462:6;13457:3;13399:70;:::i;:::-;13392:77;;13478:52;13523:6;13518:3;13511:4;13504:5;13500:16;13478:52;:::i;:::-;13555:29;13577:6;13555:29;:::i;:::-;13550:3;13546:39;13539:46;;13321:270;;;;;:::o;13597:373::-;;13729:38;13761:5;13729:38;:::i;:::-;13783:88;13864:6;13859:3;13783:88;:::i;:::-;13776:95;;13880:52;13925:6;13920:3;13913:4;13906:5;13902:16;13880:52;:::i;:::-;13957:6;13952:3;13948:16;13941:23;;13705:265;;;;;:::o;13976:364::-;;14092:39;14125:5;14092:39;:::i;:::-;14147:71;14211:6;14206:3;14147:71;:::i;:::-;14140:78;;14227:52;14272:6;14267:3;14260:4;14253:5;14249:16;14227:52;:::i;:::-;14304:29;14326:6;14304:29;:::i;:::-;14299:3;14295:39;14288:46;;14068:272;;;;;:::o;14346:377::-;;14480:39;14513:5;14480:39;:::i;:::-;14535:89;14617:6;14612:3;14535:89;:::i;:::-;14528:96;;14633:52;14678:6;14673:3;14666:4;14659:5;14655:16;14633:52;:::i;:::-;14710:6;14705:3;14701:16;14694:23;;14456:267;;;;;:::o;14753:845::-;;14893:5;14887:12;14922:36;14948:9;14922:36;:::i;:::-;14974:89;15056:6;15051:3;14974:89;:::i;:::-;14967:96;;15094:1;15083:9;15079:17;15110:1;15105:137;;;;15256:1;15251:341;;;;15072:520;;15105:137;15189:4;15185:9;15174;15170:25;15165:3;15158:38;15225:6;15220:3;15216:16;15209:23;;15105:137;;15251:341;15318:38;15350:5;15318:38;:::i;:::-;15378:1;15392:154;15406:6;15403:1;15400:13;15392:154;;;15480:7;15474:14;15470:1;15465:3;15461:11;15454:35;15530:1;15521:7;15517:15;15506:26;;15428:4;15425:1;15421:12;15416:17;;15392:154;;;15575:6;15570:3;15566:16;15559:23;;15258:334;;15072:520;;14860:738;;;;;;:::o;15604:366::-;;15767:67;15831:2;15826:3;15767:67;:::i;:::-;15760:74;;15843:93;15932:3;15843:93;:::i;:::-;15961:2;15956:3;15952:12;15945:19;;15750:220;;;:::o;15976:366::-;;16139:67;16203:2;16198:3;16139:67;:::i;:::-;16132:74;;16215:93;16304:3;16215:93;:::i;:::-;16333:2;16328:3;16324:12;16317:19;;16122:220;;;:::o;16348:366::-;;16511:67;16575:2;16570:3;16511:67;:::i;:::-;16504:74;;16587:93;16676:3;16587:93;:::i;:::-;16705:2;16700:3;16696:12;16689:19;;16494:220;;;:::o;16720:402::-;;16901:85;16983:2;16978:3;16901:85;:::i;:::-;16894:92;;16995:93;17084:3;16995:93;:::i;:::-;17113:2;17108:3;17104:12;17097:19;;16884:238;;;:::o;17128:366::-;;17291:67;17355:2;17350:3;17291:67;:::i;:::-;17284:74;;17367:93;17456:3;17367:93;:::i;:::-;17485:2;17480:3;17476:12;17469:19;;17274:220;;;:::o;17500:366::-;;17663:67;17727:2;17722:3;17663:67;:::i;:::-;17656:74;;17739:93;17828:3;17739:93;:::i;:::-;17857:2;17852:3;17848:12;17841:19;;17646:220;;;:::o;17872:366::-;;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;18018:220;;;:::o;18244:366::-;;18407:67;18471:2;18466:3;18407:67;:::i;:::-;18400:74;;18483:93;18572:3;18483:93;:::i;:::-;18601:2;18596:3;18592:12;18585:19;;18390:220;;;:::o;18616:366::-;;18779:67;18843:2;18838:3;18779:67;:::i;:::-;18772:74;;18855:93;18944:3;18855:93;:::i;:::-;18973:2;18968:3;18964:12;18957:19;;18762:220;;;:::o;18988:366::-;;19151:67;19215:2;19210:3;19151:67;:::i;:::-;19144:74;;19227:93;19316:3;19227:93;:::i;:::-;19345:2;19340:3;19336:12;19329:19;;19134:220;;;:::o;19360:366::-;;19523:67;19587:2;19582:3;19523:67;:::i;:::-;19516:74;;19599:93;19688:3;19599:93;:::i;:::-;19717:2;19712:3;19708:12;19701:19;;19506:220;;;:::o;19732:366::-;;19895:67;19959:2;19954:3;19895:67;:::i;:::-;19888:74;;19971:93;20060:3;19971:93;:::i;:::-;20089:2;20084:3;20080:12;20073:19;;19878:220;;;:::o;20104:366::-;;20267:67;20331:2;20326:3;20267:67;:::i;:::-;20260:74;;20343:93;20432:3;20343:93;:::i;:::-;20461:2;20456:3;20452:12;20445:19;;20250:220;;;:::o;20476:366::-;;20639:67;20703:2;20698:3;20639:67;:::i;:::-;20632:74;;20715:93;20804:3;20715:93;:::i;:::-;20833:2;20828:3;20824:12;20817:19;;20622:220;;;:::o;20848:366::-;;21011:67;21075:2;21070:3;21011:67;:::i;:::-;21004:74;;21087:93;21176:3;21087:93;:::i;:::-;21205:2;21200:3;21196:12;21189:19;;20994:220;;;:::o;21220:366::-;;21383:67;21447:2;21442:3;21383:67;:::i;:::-;21376:74;;21459:93;21548:3;21459:93;:::i;:::-;21577:2;21572:3;21568:12;21561:19;;21366:220;;;:::o;21592:366::-;;21755:67;21819:2;21814:3;21755:67;:::i;:::-;21748:74;;21831:93;21920:3;21831:93;:::i;:::-;21949:2;21944:3;21940:12;21933:19;;21738:220;;;:::o;21964:366::-;;22127:67;22191:2;22186:3;22127:67;:::i;:::-;22120:74;;22203:93;22292:3;22203:93;:::i;:::-;22321:2;22316:3;22312:12;22305:19;;22110:220;;;:::o;22336:398::-;;22516:83;22597:1;22592:3;22516:83;:::i;:::-;22509:90;;22608:93;22697:3;22608:93;:::i;:::-;22726:1;22721:3;22717:11;22710:18;;22499:235;;;:::o;22740:366::-;;22903:67;22967:2;22962:3;22903:67;:::i;:::-;22896:74;;22979:93;23068:3;22979:93;:::i;:::-;23097:2;23092:3;23088:12;23081:19;;22886:220;;;:::o;23112:366::-;;23275:67;23339:2;23334:3;23275:67;:::i;:::-;23268:74;;23351:93;23440:3;23351:93;:::i;:::-;23469:2;23464:3;23460:12;23453:19;;23258:220;;;:::o;23484:366::-;;23647:67;23711:2;23706:3;23647:67;:::i;:::-;23640:74;;23723:93;23812:3;23723:93;:::i;:::-;23841:2;23836:3;23832:12;23825:19;;23630:220;;;:::o;23856:366::-;;24019:67;24083:2;24078:3;24019:67;:::i;:::-;24012:74;;24095:93;24184:3;24095:93;:::i;:::-;24213:2;24208:3;24204:12;24197:19;;24002:220;;;:::o;24228:366::-;;24391:67;24455:2;24450:3;24391:67;:::i;:::-;24384:74;;24467:93;24556:3;24467:93;:::i;:::-;24585:2;24580:3;24576:12;24569:19;;24374:220;;;:::o;24600:366::-;;24763:67;24827:2;24822:3;24763:67;:::i;:::-;24756:74;;24839:93;24928:3;24839:93;:::i;:::-;24957:2;24952:3;24948:12;24941:19;;24746:220;;;:::o;24972:366::-;;25135:67;25199:2;25194:3;25135:67;:::i;:::-;25128:74;;25211:93;25300:3;25211:93;:::i;:::-;25329:2;25324:3;25320:12;25313:19;;25118:220;;;:::o;25344:366::-;;25507:67;25571:2;25566:3;25507:67;:::i;:::-;25500:74;;25583:93;25672:3;25583:93;:::i;:::-;25701:2;25696:3;25692:12;25685:19;;25490:220;;;:::o;25716:400::-;;25897:84;25979:1;25974:3;25897:84;:::i;:::-;25890:91;;25990:93;26079:3;25990:93;:::i;:::-;26108:1;26103:3;26099:11;26092:18;;25880:236;;;:::o;26122:365::-;;26285:66;26349:1;26344:3;26285:66;:::i;:::-;26278:73;;26360:93;26449:3;26360:93;:::i;:::-;26478:2;26473:3;26469:12;26462:19;;26268:219;;;:::o;26493:108::-;26570:24;26588:5;26570:24;:::i;:::-;26565:3;26558:37;26548:53;;:::o;26607:118::-;26694:24;26712:5;26694:24;:::i;:::-;26689:3;26682:37;26672:53;;:::o;26731:112::-;26814:22;26830:5;26814:22;:::i;:::-;26809:3;26802:35;26792:51;;:::o;26849:429::-;;27048:92;27136:3;27127:6;27048:92;:::i;:::-;27041:99;;27157:95;27248:3;27239:6;27157:95;:::i;:::-;27150:102;;27269:3;27262:10;;27030:248;;;;;:::o;27284:522::-;;27519:148;27663:3;27519:148;:::i;:::-;27512:155;;27677:75;27748:3;27739:6;27677:75;:::i;:::-;27777:2;27772:3;27768:12;27761:19;;27797:3;27790:10;;27501:305;;;;:::o;27812:379::-;;28018:147;28161:3;28018:147;:::i;:::-;28011:154;;28182:3;28175:10;;28000:191;;;:::o;28197:537::-;;28450:148;28594:3;28450:148;:::i;:::-;28443:155;;28615:93;28704:3;28695:6;28615:93;:::i;:::-;28608:100;;28725:3;28718:10;;28432:302;;;;:::o;28740:222::-;;28871:2;28860:9;28856:18;28848:26;;28884:71;28952:1;28941:9;28937:17;28928:6;28884:71;:::i;:::-;28838:124;;;;:::o;28968:1053::-;;29329:3;29318:9;29314:19;29306:27;;29343:71;29411:1;29400:9;29396:17;29387:6;29343:71;:::i;:::-;29424:72;29492:2;29481:9;29477:18;29468:6;29424:72;:::i;:::-;29543:9;29537:4;29533:20;29528:2;29517:9;29513:18;29506:48;29571:108;29674:4;29665:6;29571:108;:::i;:::-;29563:116;;29726:9;29720:4;29716:20;29711:2;29700:9;29696:18;29689:48;29754:108;29857:4;29848:6;29754:108;:::i;:::-;29746:116;;29910:9;29904:4;29900:20;29894:3;29883:9;29879:19;29872:49;29938:76;30009:4;30000:6;29938:76;:::i;:::-;29930:84;;29296:725;;;;;;;;:::o;30027:751::-;;30288:3;30277:9;30273:19;30265:27;;30302:71;30370:1;30359:9;30355:17;30346:6;30302:71;:::i;:::-;30383:72;30451:2;30440:9;30436:18;30427:6;30383:72;:::i;:::-;30465;30533:2;30522:9;30518:18;30509:6;30465:72;:::i;:::-;30547;30615:2;30604:9;30600:18;30591:6;30547:72;:::i;:::-;30667:9;30661:4;30657:20;30651:3;30640:9;30636:19;30629:49;30695:76;30766:4;30757:6;30695:76;:::i;:::-;30687:84;;30255:523;;;;;;;;:::o;30784:373::-;;30965:2;30954:9;30950:18;30942:26;;31014:9;31008:4;31004:20;31000:1;30989:9;30985:17;30978:47;31042:108;31145:4;31136:6;31042:108;:::i;:::-;31034:116;;30932:225;;;;:::o;31163:634::-;;31422:2;31411:9;31407:18;31399:26;;31471:9;31465:4;31461:20;31457:1;31446:9;31442:17;31435:47;31499:108;31602:4;31593:6;31499:108;:::i;:::-;31491:116;;31654:9;31648:4;31644:20;31639:2;31628:9;31624:18;31617:48;31682:108;31785:4;31776:6;31682:108;:::i;:::-;31674:116;;31389:408;;;;;:::o;31803:210::-;;31928:2;31917:9;31913:18;31905:26;;31941:65;32003:1;31992:9;31988:17;31979:6;31941:65;:::i;:::-;31895:118;;;;:::o;32019:545::-;;32230:3;32219:9;32215:19;32207:27;;32244:71;32312:1;32301:9;32297:17;32288:6;32244:71;:::i;:::-;32325:68;32389:2;32378:9;32374:18;32365:6;32325:68;:::i;:::-;32403:72;32471:2;32460:9;32456:18;32447:6;32403:72;:::i;:::-;32485;32553:2;32542:9;32538:18;32529:6;32485:72;:::i;:::-;32197:367;;;;;;;:::o;32570:313::-;;32721:2;32710:9;32706:18;32698:26;;32770:9;32764:4;32760:20;32756:1;32745:9;32741:17;32734:47;32798:78;32871:4;32862:6;32798:78;:::i;:::-;32790:86;;32688:195;;;;:::o;32889:419::-;;33093:2;33082:9;33078:18;33070:26;;33142:9;33136:4;33132:20;33128:1;33117:9;33113:17;33106:47;33170:131;33296:4;33170:131;:::i;:::-;33162:139;;33060:248;;;:::o;33314:419::-;;33518:2;33507:9;33503:18;33495:26;;33567:9;33561:4;33557:20;33553:1;33542:9;33538:17;33531:47;33595:131;33721:4;33595:131;:::i;:::-;33587:139;;33485:248;;;:::o;33739:419::-;;33943:2;33932:9;33928:18;33920:26;;33992:9;33986:4;33982:20;33978:1;33967:9;33963:17;33956:47;34020:131;34146:4;34020:131;:::i;:::-;34012:139;;33910:248;;;:::o;34164:419::-;;34368:2;34357:9;34353:18;34345:26;;34417:9;34411:4;34407:20;34403:1;34392:9;34388:17;34381:47;34445:131;34571:4;34445:131;:::i;:::-;34437:139;;34335:248;;;:::o;34589:419::-;;34793:2;34782:9;34778:18;34770:26;;34842:9;34836:4;34832:20;34828:1;34817:9;34813:17;34806:47;34870:131;34996:4;34870:131;:::i;:::-;34862:139;;34760:248;;;:::o;35014:419::-;;35218:2;35207:9;35203:18;35195:26;;35267:9;35261:4;35257:20;35253:1;35242:9;35238:17;35231:47;35295:131;35421:4;35295:131;:::i;:::-;35287:139;;35185:248;;;:::o;35439:419::-;;35643:2;35632:9;35628:18;35620:26;;35692:9;35686:4;35682:20;35678:1;35667:9;35663:17;35656:47;35720:131;35846:4;35720:131;:::i;:::-;35712:139;;35610:248;;;:::o;35864:419::-;;36068:2;36057:9;36053:18;36045:26;;36117:9;36111:4;36107:20;36103:1;36092:9;36088:17;36081:47;36145:131;36271:4;36145:131;:::i;:::-;36137:139;;36035:248;;;:::o;36289:419::-;;36493:2;36482:9;36478:18;36470:26;;36542:9;36536:4;36532:20;36528:1;36517:9;36513:17;36506:47;36570:131;36696:4;36570:131;:::i;:::-;36562:139;;36460:248;;;:::o;36714:419::-;;36918:2;36907:9;36903:18;36895:26;;36967:9;36961:4;36957:20;36953:1;36942:9;36938:17;36931:47;36995:131;37121:4;36995:131;:::i;:::-;36987:139;;36885:248;;;:::o;37139:419::-;;37343:2;37332:9;37328:18;37320:26;;37392:9;37386:4;37382:20;37378:1;37367:9;37363:17;37356:47;37420:131;37546:4;37420:131;:::i;:::-;37412:139;;37310:248;;;:::o;37564:419::-;;37768:2;37757:9;37753:18;37745:26;;37817:9;37811:4;37807:20;37803:1;37792:9;37788:17;37781:47;37845:131;37971:4;37845:131;:::i;:::-;37837:139;;37735:248;;;:::o;37989:419::-;;38193:2;38182:9;38178:18;38170:26;;38242:9;38236:4;38232:20;38228:1;38217:9;38213:17;38206:47;38270:131;38396:4;38270:131;:::i;:::-;38262:139;;38160:248;;;:::o;38414:419::-;;38618:2;38607:9;38603:18;38595:26;;38667:9;38661:4;38657:20;38653:1;38642:9;38638:17;38631:47;38695:131;38821:4;38695:131;:::i;:::-;38687:139;;38585:248;;;:::o;38839:419::-;;39043:2;39032:9;39028:18;39020:26;;39092:9;39086:4;39082:20;39078:1;39067:9;39063:17;39056:47;39120:131;39246:4;39120:131;:::i;:::-;39112:139;;39010:248;;;:::o;39264:419::-;;39468:2;39457:9;39453:18;39445:26;;39517:9;39511:4;39507:20;39503:1;39492:9;39488:17;39481:47;39545:131;39671:4;39545:131;:::i;:::-;39537:139;;39435:248;;;:::o;39689:419::-;;39893:2;39882:9;39878:18;39870:26;;39942:9;39936:4;39932:20;39928:1;39917:9;39913:17;39906:47;39970:131;40096:4;39970:131;:::i;:::-;39962:139;;39860:248;;;:::o;40114:419::-;;40318:2;40307:9;40303:18;40295:26;;40367:9;40361:4;40357:20;40353:1;40342:9;40338:17;40331:47;40395:131;40521:4;40395:131;:::i;:::-;40387:139;;40285:248;;;:::o;40539:419::-;;40743:2;40732:9;40728:18;40720:26;;40792:9;40786:4;40782:20;40778:1;40767:9;40763:17;40756:47;40820:131;40946:4;40820:131;:::i;:::-;40812:139;;40710:248;;;:::o;40964:419::-;;41168:2;41157:9;41153:18;41145:26;;41217:9;41211:4;41207:20;41203:1;41192:9;41188:17;41181:47;41245:131;41371:4;41245:131;:::i;:::-;41237:139;;41135:248;;;:::o;41389:419::-;;41593:2;41582:9;41578:18;41570:26;;41642:9;41636:4;41632:20;41628:1;41617:9;41613:17;41606:47;41670:131;41796:4;41670:131;:::i;:::-;41662:139;;41560:248;;;:::o;41814:419::-;;42018:2;42007:9;42003:18;41995:26;;42067:9;42061:4;42057:20;42053:1;42042:9;42038:17;42031:47;42095:131;42221:4;42095:131;:::i;:::-;42087:139;;41985:248;;;:::o;42239:419::-;;42443:2;42432:9;42428:18;42420:26;;42492:9;42486:4;42482:20;42478:1;42467:9;42463:17;42456:47;42520:131;42646:4;42520:131;:::i;:::-;42512:139;;42410:248;;;:::o;42664:419::-;;42868:2;42857:9;42853:18;42845:26;;42917:9;42911:4;42907:20;42903:1;42892:9;42888:17;42881:47;42945:131;43071:4;42945:131;:::i;:::-;42937:139;;42835:248;;;:::o;43089:419::-;;43293:2;43282:9;43278:18;43270:26;;43342:9;43336:4;43332:20;43328:1;43317:9;43313:17;43306:47;43370:131;43496:4;43370:131;:::i;:::-;43362:139;;43260:248;;;:::o;43514:419::-;;43718:2;43707:9;43703:18;43695:26;;43767:9;43761:4;43757:20;43753:1;43742:9;43738:17;43731:47;43795:131;43921:4;43795:131;:::i;:::-;43787:139;;43685:248;;;:::o;43939:222::-;;44070:2;44059:9;44055:18;44047:26;;44083:71;44151:1;44140:9;44136:17;44127:6;44083:71;:::i;:::-;44037:124;;;;:::o;44167:332::-;;44326:2;44315:9;44311:18;44303:26;;44339:71;44407:1;44396:9;44392:17;44383:6;44339:71;:::i;:::-;44420:72;44488:2;44477:9;44473:18;44464:6;44420:72;:::i;:::-;44293:206;;;;;:::o;44505:129::-;;44566:20;;:::i;:::-;44556:30;;44595:33;44623:4;44615:6;44595:33;:::i;:::-;44546:88;;;:::o;44640:75::-;;44706:2;44700:9;44690:19;;44680:35;:::o;44721:311::-;;44888:18;44880:6;44877:30;44874:2;;;44910:18;;:::i;:::-;44874:2;44960:4;44952:6;44948:17;44940:25;;45020:4;45014;45010:15;45002:23;;44803:229;;;:::o;45038:311::-;;45205:18;45197:6;45194:30;45191:2;;;45227:18;;:::i;:::-;45191:2;45277:4;45269:6;45265:17;45257:25;;45337:4;45331;45327:15;45319:23;;45120:229;;;:::o;45355:307::-;;45506:18;45498:6;45495:30;45492:2;;;45528:18;;:::i;:::-;45492:2;45566:29;45588:6;45566:29;:::i;:::-;45558:37;;45650:4;45644;45640:15;45632:23;;45421:241;;;:::o;45668:308::-;;45820:18;45812:6;45809:30;45806:2;;;45842:18;;:::i;:::-;45806:2;45880:29;45902:6;45880:29;:::i;:::-;45872:37;;45964:4;45958;45954:15;45946:23;;45735:241;;;:::o;45982:132::-;;46072:3;46064:11;;46102:4;46097:3;46093:14;46085:22;;46054:60;;;:::o;46120:141::-;;46192:3;46184:11;;46215:3;46212:1;46205:14;46249:4;46246:1;46236:18;46228:26;;46174:87;;;:::o;46267:114::-;;46368:5;46362:12;46352:22;;46341:40;;;:::o;46387:98::-;;46472:5;46466:12;46456:22;;46445:40;;;:::o;46491:99::-;;46577:5;46571:12;46561:22;;46550:40;;;:::o;46596:113::-;;46698:4;46693:3;46689:14;46681:22;;46671:38;;;:::o;46715:184::-;;46848:6;46843:3;46836:19;46888:4;46883:3;46879:14;46864:29;;46826:73;;;;:::o;46905:168::-;;47022:6;47017:3;47010:19;47062:4;47057:3;47053:14;47038:29;;47000:73;;;;:::o;47079:147::-;;47217:3;47202:18;;47192:34;;;;:::o;47232:169::-;;47350:6;47345:3;47338:19;47390:4;47385:3;47381:14;47366:29;;47328:73;;;;:::o;47407:148::-;;47546:3;47531:18;;47521:34;;;;:::o;47561:305::-;;47620:20;47638:1;47620:20;:::i;:::-;47615:25;;47654:20;47672:1;47654:20;:::i;:::-;47649:25;;47808:1;47740:66;47736:74;47733:1;47730:81;47727:2;;;47814:18;;:::i;:::-;47727:2;47858:1;47855;47851:9;47844:16;;47605:261;;;;:::o;47872:185::-;;47929:20;47947:1;47929:20;:::i;:::-;47924:25;;47963:20;47981:1;47963:20;:::i;:::-;47958:25;;48002:1;47992:2;;48007:18;;:::i;:::-;47992:2;48049:1;48046;48042:9;48037:14;;47914:143;;;;:::o;48063:348::-;;48126:20;48144:1;48126:20;:::i;:::-;48121:25;;48160:20;48178:1;48160:20;:::i;:::-;48155:25;;48348:1;48280:66;48276:74;48273:1;48270:81;48265:1;48258:9;48251:17;48247:105;48244:2;;;48355:18;;:::i;:::-;48244:2;48403:1;48400;48396:9;48385:20;;48111:300;;;;:::o;48417:191::-;;48477:20;48495:1;48477:20;:::i;:::-;48472:25;;48511:20;48529:1;48511:20;:::i;:::-;48506:25;;48550:1;48547;48544:8;48541:2;;;48555:18;;:::i;:::-;48541:2;48600:1;48597;48593:9;48585:17;;48462:146;;;;:::o;48614:96::-;;48680:24;48698:5;48680:24;:::i;:::-;48669:35;;48659:51;;;:::o;48716:90::-;;48793:5;48786:13;48779:21;48768:32;;48758:48;;;:::o;48812:77::-;;48878:5;48867:16;;48857:32;;;:::o;48895:149::-;;48971:66;48964:5;48960:78;48949:89;;48939:105;;;:::o;49050:126::-;;49127:42;49120:5;49116:54;49105:65;;49095:81;;;:::o;49182:77::-;;49248:5;49237:16;;49227:32;;;:::o;49265:86::-;;49340:4;49333:5;49329:16;49318:27;;49308:43;;;:::o;49357:154::-;49441:6;49436:3;49431;49418:30;49503:1;49494:6;49489:3;49485:16;49478:27;49408:103;;;:::o;49517:307::-;49585:1;49595:113;49609:6;49606:1;49603:13;49595:113;;;49694:1;49689:3;49685:11;49679:18;49675:1;49670:3;49666:11;49659:39;49631:2;49628:1;49624:10;49619:15;;49595:113;;;49726:6;49723:1;49720:13;49717:2;;;49806:1;49797:6;49792:3;49788:16;49781:27;49717:2;49566:258;;;;:::o;49830:320::-;;49911:1;49905:4;49901:12;49891:22;;49958:1;49952:4;49948:12;49979:18;49969:2;;50035:4;50027:6;50023:17;50013:27;;49969:2;50097;50089:6;50086:14;50066:18;50063:38;50060:2;;;50116:18;;:::i;:::-;50060:2;49881:269;;;;:::o;50156:281::-;50239:27;50261:4;50239:27;:::i;:::-;50231:6;50227:40;50369:6;50357:10;50354:22;50333:18;50321:10;50318:34;50315:62;50312:2;;;50380:18;;:::i;:::-;50312:2;50420:10;50416:2;50409:22;50199:238;;;:::o;50443:233::-;;50505:24;50523:5;50505:24;:::i;:::-;50496:33;;50551:66;50544:5;50541:77;50538:2;;;50621:18;;:::i;:::-;50538:2;50668:1;50661:5;50657:13;50650:20;;50486:190;;;:::o;50682:167::-;;50742:22;50758:5;50742:22;:::i;:::-;50733:31;;50786:4;50779:5;50776:15;50773:2;;;50794:18;;:::i;:::-;50773:2;50841:1;50834:5;50830:13;50823:20;;50723:126;;;:::o;50855:79::-;;50923:5;50912:16;;50902:32;;;:::o;50940:176::-;;50989:20;51007:1;50989:20;:::i;:::-;50984:25;;51023:20;51041:1;51023:20;:::i;:::-;51018:25;;51062:1;51052:2;;51067:18;;:::i;:::-;51052:2;51108:1;51105;51101:9;51096:14;;50974:142;;;;:::o;51122:180::-;51170:77;51167:1;51160:88;51267:4;51264:1;51257:15;51291:4;51288:1;51281:15;51308:180;51356:77;51353:1;51346:88;51453:4;51450:1;51443:15;51477:4;51474:1;51467:15;51494:180;51542:77;51539:1;51532:88;51639:4;51636:1;51629:15;51663:4;51660:1;51653:15;51680:180;51728:77;51725:1;51718:88;51825:4;51822:1;51815:15;51849:4;51846:1;51839:15;51866:183;;51939:1;51921:16;51918:23;51915:2;;;51977:1;51974;51971;51956:23;51999:34;52030:1;52024:8;51999:34;:::i;:::-;51992:41;;51915:2;51905:144;:::o;52055:102::-;;52147:2;52143:7;52138:2;52131:5;52127:14;52123:28;52113:38;;52103:54;;;:::o;52163:106::-;;52256:5;52251:3;52247:15;52226:36;;52216:53;;;:::o;52275:239::-;52415:34;52411:1;52403:6;52399:14;52392:58;52484:22;52479:2;52471:6;52467:15;52460:47;52381:133;:::o;52520:171::-;52660:23;52656:1;52648:6;52644:14;52637:47;52626:65;:::o;52697:227::-;52837:34;52833:1;52825:6;52821:14;52814:58;52906:10;52901:2;52893:6;52889:15;52882:35;52803:121;:::o;52930:214::-;53070:66;53066:1;53058:6;53054:14;53047:90;53036:108;:::o;53150:230::-;53290:34;53286:1;53278:6;53274:14;53267:58;53359:13;53354:2;53346:6;53342:15;53335:38;53256:124;:::o;53386:225::-;53526:34;53522:1;53514:6;53510:14;53503:58;53595:8;53590:2;53582:6;53578:15;53571:33;53492:119;:::o;53617:223::-;53757:34;53753:1;53745:6;53741:14;53734:58;53826:6;53821:2;53813:6;53809:15;53802:31;53723:117;:::o;53846:230::-;53986:34;53982:1;53974:6;53970:14;53963:58;54055:13;54050:2;54042:6;54038:15;54031:38;53952:124;:::o;54082:228::-;54222:34;54218:1;54210:6;54206:14;54199:58;54291:11;54286:2;54278:6;54274:15;54267:36;54188:122;:::o;54316:224::-;54456:34;54452:1;54444:6;54440:14;54433:58;54525:7;54520:2;54512:6;54508:15;54501:32;54422:118;:::o;54546:237::-;54686:34;54682:1;54674:6;54670:14;54663:58;54755:20;54750:2;54742:6;54738:15;54731:45;54652:131;:::o;54789:222::-;54929:34;54925:1;54917:6;54913:14;54906:58;54998:5;54993:2;54985:6;54981:15;54974:30;54895:116;:::o;55017:229::-;55157:34;55153:1;55145:6;55141:14;55134:58;55226:12;55221:2;55213:6;55209:15;55202:37;55123:123;:::o;55252:182::-;55392:34;55388:1;55380:6;55376:14;55369:58;55358:76;:::o;55440:172::-;55580:24;55576:1;55568:6;55564:14;55557:48;55546:66;:::o;55618:167::-;55758:19;55754:1;55746:6;55742:14;55735:43;55724:61;:::o;55791:169::-;55931:21;55927:1;55919:6;55915:14;55908:45;55897:63;:::o;55966:166::-;56106:18;56102:1;56094:6;56090:14;56083:42;56072:60;:::o;56138:114::-;56244:8;:::o;56258:166::-;56398:18;56394:1;56386:6;56382:14;56375:42;56364:60;:::o;56430:174::-;56570:26;56566:1;56558:6;56554:14;56547:50;56536:68;:::o;56610:162::-;56750:14;56746:1;56738:6;56734:14;56727:38;56716:56;:::o;56778:228::-;56918:34;56914:1;56906:6;56902:14;56895:58;56987:11;56982:2;56974:6;56970:15;56963:36;56884:122;:::o;57012:228::-;57152:34;57148:1;57140:6;57136:14;57129:58;57221:11;57216:2;57208:6;57204:15;57197:36;57118:122;:::o;57246:229::-;57386:34;57382:1;57374:6;57370:14;57363:58;57455:12;57450:2;57442:6;57438:15;57431:37;57352:123;:::o;57481:227::-;57621:34;57617:1;57609:6;57605:14;57598:58;57690:10;57685:2;57677:6;57673:15;57666:35;57587:121;:::o;57714:220::-;57854:34;57850:1;57842:6;57838:14;57831:58;57923:3;57918:2;57910:6;57906:15;57899:28;57820:114;:::o;57940:159::-;58080:11;58076:1;58068:6;58064:14;58057:35;58046:53;:::o;58105:158::-;58245:10;58241:1;58233:6;58229:14;58222:34;58211:52;:::o;58269:711::-;;58346:4;58328:16;58325:26;58322:2;;;58354:5;;58322:2;58383:20;;:::i;:::-;58458:1;58440:16;58436:24;58433:1;58427:4;58412:49;58491:4;58485:11;58590:16;58583:4;58575:6;58571:17;58568:39;58535:18;58527:6;58524:30;58508:113;58505:2;;;58636:5;;;;58505:2;58682:6;58676:4;58672:17;58718:3;58712:10;58745:18;58737:6;58734:30;58731:2;;;58767:5;;;;;;58731:2;58815:6;58808:4;58803:3;58799:14;58795:27;58874:1;58856:16;58852:24;58846:4;58842:35;58837:3;58834:44;58831:2;;;58881:5;;;;;;;58831:2;58898:57;58946:6;58940:4;58936:17;58928:6;58924:30;58918:4;58898:57;:::i;:::-;58971:3;58964:10;;58312:668;;;;;;;:::o;58986:122::-;59059:24;59077:5;59059:24;:::i;:::-;59052:5;59049:35;59039:2;;59098:1;59095;59088:12;59039:2;59029:79;:::o;59114:116::-;59184:21;59199:5;59184:21;:::i;:::-;59177:5;59174:32;59164:2;;59220:1;59217;59210:12;59164:2;59154:76;:::o;59236:120::-;59308:23;59325:5;59308:23;:::i;:::-;59301:5;59298:34;59288:2;;59346:1;59343;59336:12;59288:2;59278:78;:::o;59362:122::-;59435:24;59453:5;59435:24;:::i;:::-;59428:5;59425:35;59415:2;;59474:1;59471;59464:12;59415:2;59405:79;:::o

Swarm Source

ipfs://52388d5a9f92178cdfdfdabddf7f4393e06d1c8b614df4e0582967aa8290ee06
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.