Contract 0xC9a67eD1472A76d064C826B54c144Ca00DAE4015

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd3f3e5619f5c1328ddfebb0116837347893aa63853c98ef895e30f601f24d083Mint Token360884132022-11-26 11:15:2636 mins ago0xc1eecf69913cefbb1565523d3d75322485cb91c1 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0227639165
0x07aed333e269f67fbc59091f4f9587869093cec32935e5f1f08ade61a313475cExecute Meta Tra...360879682022-11-26 10:59:0552 mins ago0x3d6d80d2efd8e24f8c06aab565f930b0b4e2e656 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.005341613261 35.689271476
0x2e4091ae21a57e3332210102fd0767f10ccf55c9a2a909a2290cd4d24b61afbeMint Token360866682022-11-26 10:13:121 hr 38 mins ago0x1657e758d36ce52b71200bc15d5338e7e04f7865 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.02431819873
0x999a4bc71ccedaebb6e9edc94be28607945a6dcfe337eb81bff1926ee2aa8422Mint Token360857882022-11-26 9:42:562 hrs 8 mins ago0x9a7e574c89531f8b784e7b901fe2406eb2b8d7ad IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.018834450
0xcfd484586a55096f9c8d18d54b58d9416f92e47050a79ddb651fd0755e488975Upgrade Token360856202022-11-26 9:37:082 hrs 14 mins ago0x21f9ed82a0b29549295c2d21150f1ebb2c183073 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0263427550
0x48d9e624a00b676aad92827925a1cbe0562d229c6e45f7f379cb6ac907d7b71bMint Token360844342022-11-26 8:56:212 hrs 55 mins ago0xa625265c1d7b4ec1941f79c9df733080c55045c5 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.01883550
0x76834ddb59e30fc4020bd4172a881a0919a06614209d271b6a4a47b6c6d978c0Mint Token360844162022-11-26 8:55:452 hrs 55 mins ago0x3790bbc287f18452f72b84326f041e08639b1e76 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.01883550
0x9d591ae885280ba4972422bc29daf4745852b62d89791b16d6ac5fb60c399133Upgrade Token360834812022-11-26 8:23:353 hrs 28 mins ago0x893c1360362f1cecd984e1045fdc755be303994a IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x396731c3ede817f779fc67aa2dad96eaf1bd651168a45ff26af523a7ac655306Execute Meta Tra...360823042022-11-26 7:43:094 hrs 8 mins ago0x7b031f4da991b412734b46877486088a385c2912 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.005951899775 35.689271307
0x1470e1a378e6c1b3dff1c8439285a29f89bae00c040da91099ccb6872cb55f34Upgrade Token360814872022-11-26 7:15:034 hrs 36 mins ago0xf6e6c40ae9024b0d3fc493155ef0b46209b484d6 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0263427550
0x6c408b50330c464b1b92005a647bcba55b81f537021f40e8e59aa15d38d634edUpgrade Token360797512022-11-26 6:15:235 hrs 36 mins ago0xd133c4770c970d542368285a2b4081b4dc8090b8 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0xa9bb8ac0b63e31c38029b6cdc5d0e0cb1a9ee123d47276c3a3c2f5c7a50a7074Upgrade Token360797272022-11-26 6:14:315 hrs 37 mins ago0x2499ce0775f4f9711c72049e34ebdd88dfff8026 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x69b4ef01add861203bd061f0814f4bf68b9eff3acd32a7fc933b29400df7a5ebUpgrade Token360797002022-11-26 6:13:375 hrs 38 mins ago0xc1eecf69913cefbb1565523d3d75322485cb91c1 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0xc0c131d12ffc81757e9196c5a3d0fe84e5a83a04d1c0a2d22d6f249f1d043b42Upgrade Token360796812022-11-26 6:12:355 hrs 39 mins ago0xa625265c1d7b4ec1941f79c9df733080c55045c5 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0xb70f3a0d6e2a63682a2bd4b2995f459504408828d7849680d87cc6fa7c353c02Mint Token360796562022-11-26 6:11:375 hrs 40 mins ago0x06e03a9570a038c6c31ad363d71f8cc94711d8a4 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.016656350
0x9053a9c362347142d2d138fbf13ee98ba45e3422cdb9e1ed13d705c3abbeae8dExecute Meta Tra...360781692022-11-26 5:20:316 hrs 31 mins ago0x84d6ab55a17d64ba38c4ec7c08211a972ce2c750 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.005606748832 35.689271304
0xd2d577c8a857fb03b2095035ed87a580f29f5a9d9c3b0f09db4f22c697390d1cUpgrade Token360775022022-11-26 4:57:336 hrs 54 mins ago0x91dfef2d75d1af2f58bf5f3dade6154f5942f019 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x2c6035e790ec35e6990d828569fd025214deac5251e2d11c77d2cc820f926f77Upgrade Token360758882022-11-26 4:02:007 hrs 49 mins ago0xd3f9e30f81048bf7252bd2b2bfa7dcfb44979f38 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x7fb170583f3a9b122c678756d1ceea7a4743dddc7ff57aab868e62fd81df9595Upgrade Token360758632022-11-26 4:01:107 hrs 50 mins ago0xd169976fa511c02ccbf3a56e6b0cbfa9946671c8 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x4a14b1886e72aa7abdd98a2bf793c757174de0cd948811f33e1e0d7f738f9457Upgrade Token360758392022-11-26 4:00:187 hrs 51 mins ago0x8d805f619b2c2732a770c6c15f6893efc0e92119 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0xfff5d96ecffb17531f6e17997f6311b282ec48f7f0d134095d617a66c1a1772fUpgrade Token360758052022-11-26 3:59:107 hrs 52 mins ago0x8aa79cffba967a228a3e6b544dc471e3791d9e5b IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x699386979adf8a6547dd3cd4847b6672d1794d2de139284dd38ea0c3e22fa60eExecute Meta Tra...360757002022-11-26 3:55:327 hrs 56 mins ago0xd908834b3e55e665086cf1916dc09a0ebc82d111 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.005341613259 35.689271459
0xc6f2eb659860b6ec33fa9d47dbf1589ed92372d6020245c510d94267233137c3Upgrade Token360750892022-11-26 3:34:348 hrs 17 mins ago0x650dc06844c4f83fd2b94232922822fc1c8b8f4b IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x30748837c14c64320142a27d9b31f98327689faea5ecde6543aba694d11b80a9Upgrade Token360750432022-11-26 3:32:588 hrs 18 mins ago0x32ed3e33bd49be275ebd3edf9b159f7cd1839619 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0259507550
0x24a1a14020c52029d4d696eb057ab21378e7a92c65b67b81c5ccd979fb9a73c1Upgrade Token360750072022-11-26 3:31:428 hrs 19 mins ago0x05a00008c93e011067c72c1430a17af73a96e460 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.0263427550
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IceRegistrant

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: iceRegistrant.sol
// SPDX-License-Identifier: -- 🧊 --

pragma solidity ^0.8.7;

import "./EIP712MetaTransaction.sol";
import "./AccessController.sol";
import "./TransferHelper.sol";
import "./Interfaces.sol";
import "./Events.sol";

contract IceRegistrant is AccessController, TransferHelper, EIP712MetaTransaction, Events {

    uint256 public upgradeCount;
    uint256 public upgradeRequestCount;

    address public tokenAddressDG;
    address public tokenAddressICE;

    address public depositAddressDG;
    address public depositAddressNFT;

    address public paymentToken;
    uint256 public mintingPrice;

    uint256 public saleCount;

    uint256 public saleLimit;
    uint256 public saleFrame;

    bool public allowChangeSaleLimit;

    struct Level {
        bool isActive;
        uint256 costAmountDG;
        uint256 moveAmountDG;
        uint256 costAmountICE;
        uint256 moveAmountICE;
        uint256 floorBonus;
        uint256 deltaBonus;
    }

    struct Upgrade {
        uint256 level;
        uint256 bonus;
    }

    struct Request {
        uint256 itemId;
        uint256 tokenId;
        address tokenAddress;
        address tokenOwner;
    }

    mapping (bytes32 => address) public owners;
    mapping (address => address) public targets;

    mapping (address => uint256) public frames;
    mapping (uint256 => uint256) public limits;

    mapping (uint256 => Level) public levels;
    mapping (uint256 => Request) public requests;

    mapping (address => mapping (bytes32 => Upgrade)) public registrer;

    constructor(
        uint256 _mintingPrice,
        address _paymentToken,
        address _tokenAddressDG,
        address _tokenAddressICE,
        address _accessoriesContract
    )
        EIP712Base('IceRegistrant', 'v1.3')
    {
        saleLimit = 500;
        saleFrame = 1 hours;

        paymentToken = _paymentToken;
        mintingPrice = _mintingPrice;

        tokenAddressDG = _tokenAddressDG;
        tokenAddressICE = _tokenAddressICE;

        allowChangeSaleLimit = true;

        targets[_accessoriesContract] = _accessoriesContract;

        levels[0].floorBonus = 1;
        levels[0].deltaBonus = 6;

        limits[0] = 100;
    }

    function changeTokenAddressICE(
        address _newTokenAddressICE
    )
        external
        onlyCEO
    {
        tokenAddressICE = _newTokenAddressICE;
    }

    function changeTokenAddressDG(
        address _newTokenAddressDG
    )
        external
        onlyCEO
    {
        tokenAddressDG = _newTokenAddressDG;
    }

    function changeDepositAddressDG(
        address _newDepositAddressDG
    )
        external
        onlyCEO
    {
        depositAddressDG = _newDepositAddressDG;
    }

    function changeDepositAddressNFT(
        address _newDepositAddressNFT
    )
        external
        onlyCEO
    {
        depositAddressNFT = _newDepositAddressNFT;
    }

    function changeMintingPrice(
        uint256 _newMintingPrice
    )
        external
        onlyCEO
    {
        mintingPrice = _newMintingPrice;
    }

    function changeMintLimits(
        uint256 _itemId,
        uint256 _newLimit
    )
        external
        onlyCEO
    {
        limits[_itemId] = _newLimit;
    }

    function changeSaleFrame(
        uint256 _newSaleFrame
    )
        external
        onlyCEO
    {
        saleFrame = _newSaleFrame;
    }

    function changeSaleLimit(
        uint256 _newSaleLimit
    )
        external
        onlyCEO
    {
        require(
            allowChangeSaleLimit == true,
            'iceRegistrant: change disabled'
        );

        saleLimit = _newSaleLimit;
    }

    function disabledSaleLimitChange()
        external
        onlyCEO
    {
        allowChangeSaleLimit = false;
    }

    function changePaymentToken(
        address _newPaymentToken
    )
        external
        onlyCEO
    {
        paymentToken = _newPaymentToken;
    }

    function changeTargetContract(
        address _tokenAddress,
        address _accessoriesContract
    )
        external
        onlyCEO
    {
        targets[_tokenAddress] = _accessoriesContract;
    }

    function manageLevel(
        uint256 _level,
        uint256 _costAmountDG,
        uint256 _moveAmountDG,
        uint256 _costAmountICE,
        uint256 _moveAmountICE,
        uint256 _floorBonus,
        uint256 _deltaBonus,
        bool _isActive
    )
        external
        onlyCEO
    {
        levels[_level].costAmountDG = _costAmountDG;
        levels[_level].moveAmountDG = _moveAmountDG;

        levels[_level].costAmountICE = _costAmountICE;
        levels[_level].moveAmountICE = _moveAmountICE;

        levels[_level].floorBonus = _floorBonus;
        levels[_level].deltaBonus = _deltaBonus;

        levels[_level].isActive = _isActive;

        emit LevelEdit(
            _level,
            _costAmountDG,
            _moveAmountDG,
            _costAmountICE,
            _moveAmountICE,
            _isActive
        );
    }

    function mintToken(
        uint256 _itemId,
        address _minterAddress,
        address _tokenAddress
    )
        external
        onlyWorker
    {
        require(
            saleLimit > saleCount,
            'iceRegistrant: sold-out'
        );

        unchecked {
            saleCount =
            saleCount + 1;
        }

        require(
            limits[_itemId] > 0,
            'iceRegistrant: limited'
        );

        unchecked {
            limits[_itemId] =
            limits[_itemId] - 1;
        }

        require(
            canPurchaseAgain(_minterAddress) == true,
            'iceRegistrant: cool-down detected'
        );

        frames[_minterAddress] = block.timestamp;

        safeTransferFrom(
            paymentToken,
            _minterAddress,
            ceoAddress,
            mintingPrice
        );

        DGAccessories target = DGAccessories(
            targets[_tokenAddress]
        );

        uint256 newTokenId = target.encodeTokenId(
            _itemId,
            getSupply(_itemId, targets[_tokenAddress]) + 1
        );

        bytes32 newHash = getHash(
            targets[_tokenAddress],
            newTokenId
        );

        owners[newHash] = _minterAddress;

        registrer[_minterAddress][newHash].level = 1;
        registrer[_minterAddress][newHash].bonus = getNumber(
            levels[0].floorBonus,
            levels[0].deltaBonus,
            saleCount,
            block.timestamp
        );

        address[] memory beneficiaries = new address[](1);
        beneficiaries[0] = _minterAddress;

        uint256[] memory itemIds = new uint256[](1);
        itemIds[0] = _itemId;

        target.issueTokens(
            beneficiaries,
            itemIds
        );

        emit InitialMinting(
            newTokenId,
            saleCount,
            _minterAddress
        );
    }

    function upgradeToken(
        address _tokenOwner,
        address _tokenAddress,
        uint256 _tokenId,
        uint256 _itemId
    )
        external
        onlyWorker
    {
        require(
            targets[_tokenAddress] != address(0x0),
            'iceRegistrant: invalid token target'
        );

        ERC721 tokenNFT = ERC721(_tokenAddress);
        address tokenOwner = _tokenOwner;

        require(
            tokenNFT.ownerOf(_tokenId) == tokenOwner,
            'iceRegistrant: invalid owner'
        );

        bytes32 tokenHash = getHash(
            _tokenAddress,
            _tokenId
        );

        uint256 nextLevel = getLevel(
            tokenOwner,
            tokenHash
        ) + 1;

        require(
            levels[nextLevel].isActive,
            'iceRegistrant: inactive level'
        );

        uint256 requestIndex = upgradeRequestCount;

        tokenNFT.transferFrom(
            tokenOwner,
            address(this),
            _tokenId
        );

        DGAccessories target = DGAccessories(
            targets[_tokenAddress]
        );

        (uint256 itemId, uint256 issuedId) = target.decodeTokenId(
            _tokenId
        );

        requests[requestIndex].itemId = itemId;
        requests[requestIndex].tokenId = _tokenId;
        requests[requestIndex].tokenAddress = _tokenAddress;
        requests[requestIndex].tokenOwner = tokenOwner;

        unchecked {
            upgradeRequestCount =
            upgradeRequestCount + 1;
        }

        emit UpgradeItem(
            itemId,
            issuedId,
            tokenOwner,
            _tokenId,
            _tokenAddress,
            requestIndex
        );

        _resolveUpgradeMint(
            requestIndex,
            _itemId
        );
    }

    function _resolveUpgradeMint(
        uint256 _requestIndex,
        uint256 _itemId
    )
        internal
    {
        uint256 tokenId = requests[_requestIndex].tokenId;
        address tokenAddress = requests[_requestIndex].tokenAddress;
        address tokenOwner = requests[_requestIndex].tokenOwner;

        delete requests[_requestIndex];

        bytes32 tokenHash = getHash(
            tokenAddress,
            tokenId
        );

        uint256 nextLevel = getLevel(
            tokenOwner,
            tokenHash
        ) + 1;

        delete owners[tokenHash];
        delete registrer[tokenOwner][tokenHash];

        _takePayment(
            tokenOwner,
            levels[nextLevel].costAmountDG,
            levels[nextLevel].costAmountICE
        );

        ERC721(tokenAddress).transferFrom(
            address(this),
            depositAddressNFT,
            tokenId
        );

        DGAccessories target = DGAccessories(
            targets[tokenAddress]
        );

        uint256 newTokenId = target.encodeTokenId(
            _itemId,
            getSupply(_itemId, targets[tokenAddress]) + 1
        );

        bytes32 newHash = getHash(
            targets[tokenAddress],
            newTokenId
        );

        owners[newHash] = tokenOwner;

        registrer[tokenOwner][newHash].level = nextLevel;
        registrer[tokenOwner][newHash].bonus = getNumber(
            levels[nextLevel].floorBonus,
            levels[nextLevel].deltaBonus,
            upgradeCount,
            block.timestamp
        );

        unchecked {
            upgradeCount =
            upgradeCount + 1;
        }

        address[] memory beneficiaries = new address[](1);
        beneficiaries[0] = tokenOwner;

        uint256[] memory itemIds = new uint256[](1);
        itemIds[0] = _itemId;

        target.issueTokens(
            beneficiaries,
            itemIds
        );

        emit UpgradeResolved(
            _itemId,
            tokenOwner,
            newTokenId,
            tokenAddress
        );
    }

    function reIceNFT(
        address _oldOwner,
        address _tokenAddress,
        uint256 _tokenId
    )
        external
    {
        require(
            targets[_tokenAddress] != address(0x0),
            'iceRegistrant: invalid token'
        );

        ERC721 token = ERC721(_tokenAddress);
        address newOwner = msgSender();

        require(
            token.ownerOf(_tokenId) == newOwner,
            'iceRegistrant: invalid owner'
        );

        bytes32 tokenHash = getHash(
            _tokenAddress,
            _tokenId
        );

        uint256 currentLevel = getLevelById(
            _oldOwner,
            _tokenAddress,
            _tokenId
        );

        _takePayment(
            newOwner,
            levels[currentLevel].moveAmountDG,
            levels[currentLevel].moveAmountICE
        );

        uint256 reIceLevel = registrer[_oldOwner][tokenHash].level;
        uint256 reIceBonus = registrer[_oldOwner][tokenHash].bonus;

        require(
            reIceLevel > registrer[newOwner][tokenHash].level,
            'iceRegistrant: preventing level downgrade'
        );

        require(
            reIceBonus > registrer[newOwner][tokenHash].bonus,
            'iceRegistrant: preventing bonus downgrade'
        );

        delete registrer[_oldOwner][tokenHash];

        registrer[newOwner][tokenHash].level = reIceLevel;
        registrer[newOwner][tokenHash].bonus = reIceBonus;

        owners[tokenHash] = newOwner;

        emit IceLevelTransfer(
            _oldOwner,
            newOwner,
            _tokenAddress,
            _tokenId
        );
    }

    function adjustRegistrantEntry(
        address _tokenOwner,
        address _tokenAddress,
        uint256 _tokenId,
        uint256 _bonusValue,
        uint256 _levelValue
    )
        external
        onlyWorker
    {
        bytes32 tokenHash = getHash(
            _tokenAddress,
            _tokenId
        );

        owners[tokenHash] = _tokenOwner;

        registrer[_tokenOwner][tokenHash].level = _levelValue;
        registrer[_tokenOwner][tokenHash].bonus = _bonusValue;
    }

    function getSupply(
        uint256 _itemId,
        address _accessoriesContract
    )
        public
        returns (uint256)
    {
        (   string memory rarity,
            uint256 maxSupply,
            uint256 totalSupply,
            uint256 price,
            address beneficiary,
            string memory metadata,
            string memory contentHash

        ) = DGAccessories(_accessoriesContract).items(_itemId);

        emit SupplyCheck(
            rarity,
            maxSupply,
            price,
            beneficiary,
            metadata,
            contentHash
        );

        return totalSupply;
    }

    function _takePayment(
        address _payer,
        uint256 _dgAmount,
        uint256 _iceAmount
    )
        internal
    {
        if (_dgAmount > 0) {
            safeTransferFrom(
                tokenAddressDG,
                _payer,
                depositAddressDG,
                _dgAmount
            );
        }

        if (_iceAmount > 0) {
            safeTransferFrom(
                tokenAddressICE,
                _payer,
                address(this),
                _iceAmount
            );

            ERC20 iceToken = ERC20(tokenAddressICE);
            iceToken.burn(_iceAmount);
        }
    }

    function getLevel(
        address _tokenOwner,
        bytes32 _tokenHash
    )
        public
        view
        returns (uint256)
    {
        return registrer[_tokenOwner][_tokenHash].level;
    }

    function getLevelById(
        address _tokenOwner,
        address _tokenAddress,
        uint256 _tokenId
    )
        public
        view
        returns (uint256)
    {
        bytes32 tokenHash = getHash(
            _tokenAddress,
            _tokenId
        );

        return registrer[_tokenOwner][tokenHash].level;
    }

    function getIceBonus(
        address _tokenOwner,
        address _tokenAddress,
        uint256 _tokenId
    )
        public
        view
        returns (uint256)
    {
        bytes32 tokenHash = getHash(
            _tokenAddress,
            _tokenId
        );

        return registrer[_tokenOwner][tokenHash].bonus;
    }

    function isIceEnabled(
        address _tokenOwner,
        address _tokenAddress,
        uint256 _tokenId
    )
        public
        view
        returns (bool)
    {
        uint256 iceBonus = getIceBonus(
            _tokenOwner,
            _tokenAddress,
            _tokenId
        );

        return iceBonus > 0;
    }

    function canPurchaseAgain(
        address _minterAddress
    )
        public
        view
        returns (bool)
    {
        return block.timestamp - frames[_minterAddress] > saleFrame;
    }

    function getHash(
        address _tokenAddress,
        uint256 _tokenId
    )
        public
        pure
        returns (bytes32)
    {
        return keccak256(abi.encodePacked(
            _tokenAddress,
            _tokenId
        ));
    }

    function getNumber(
        uint256 _floorValue,
        uint256 _deltaValue,
        uint256 _nonceValue,
        uint256 _randomValue
    )
        public
        pure
        returns (uint256)
    {
        return _floorValue + uint256(keccak256(abi.encodePacked(_nonceValue, _randomValue))) % (_deltaValue + 1);
    }
}

File 2 of 7: AccessController.sol
// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.8.7;

contract AccessController {

    address public ceoAddress;

    mapping (address => bool) public isWorker;

    event CEOSet(
        address newCEO
    );

    event WorkerAdded(
        address newWorker
    );

    event WorkerRemoved(
        address existingWorker
    );

    constructor() {

        address creator = msg.sender;

        ceoAddress = creator;

        isWorker[creator] = true;

        emit CEOSet(
            creator
        );

        emit WorkerAdded(
            creator
        );
    }

    modifier onlyCEO() {
        require(
            msg.sender == ceoAddress,
            'AccessControl: CEO access denied'
        );
        _;
    }

    modifier onlyWorker() {
        require(
            isWorker[msg.sender] == true,
            'AccessControl: worker access denied'
        );
        _;
    }

    modifier nonZeroAddress(address checkingAddress) {
        require(
            checkingAddress != address(0x0),
            'AccessControl: invalid address'
        );
        _;
    }

    function setCEO(
        address _newCEO
    )
        external
        nonZeroAddress(_newCEO)
        onlyCEO
    {
        ceoAddress = _newCEO;

        emit CEOSet(
            ceoAddress
        );
    }

    function addWorker(
        address _newWorker
    )
        external
        onlyCEO
    {
        _addWorker(
            _newWorker
        );
    }

    function addWorkerBulk(
        address[] calldata _newWorkers
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _newWorkers.length; index++) {
            _addWorker(_newWorkers[index]);
        }
    }

    function _addWorker(
        address _newWorker
    )
        internal
        nonZeroAddress(_newWorker)
    {
        require(
            isWorker[_newWorker] == false,
            'AccessControl: worker already exist'
        );

        isWorker[_newWorker] = true;

        emit WorkerAdded(
            _newWorker
        );
    }

    function removeWorker(
        address _existingWorker
    )
        external
        onlyCEO
    {
        _removeWorker(
            _existingWorker
        );
    }

    function removeWorkerBulk(
        address[] calldata _workerArray
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _workerArray.length; index++) {
            _removeWorker(_workerArray[index]);
        }
    }

    function _removeWorker(
        address _existingWorker
    )
        internal
        nonZeroAddress(_existingWorker)
    {
        require(
            isWorker[_existingWorker] == true,
            "AccessControl: worker not detected"
        );

        isWorker[_existingWorker] = false;

        emit WorkerRemoved(
            _existingWorker
        );
    }
}

File 3 of 7: EIP712Base.sol
// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.8.7;

contract EIP712Base {

    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));
    bytes32 internal domainSeperator;

    constructor(string memory name, string memory version) {
        domainSeperator = keccak256(abi.encode(
			EIP712_DOMAIN_TYPEHASH,
			keccak256(bytes(name)),
			keccak256(bytes(version)),
			getChainID(),
			address(this)
		));
    }

    function getChainID() internal pure returns (uint256 id) {
		assembly {
			id := 1 // set to Goerli for now, Mainnet later
		}
	}

    function getDomainSeperator() private view returns(bytes32) {
		return domainSeperator;
	}

    /**
    * Accept message hash and returns hash message in EIP712 compatible form
    * So that it can be used to recover signer from signature signed using EIP712 formatted data
    * https://eips.ethereum.org/EIPS/eip-712
    * "\\x19" makes the encoding deterministic
    * "\\x01" is the version byte to make it compatible to EIP-191
    */
    function toTypedMessageHash(bytes32 messageHash) internal view returns(bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash));
    }
}

File 4 of 7: EIP712MetaTransaction.sol
// SPDX-License-Identifier: -- 💎 --

pragma solidity ^0.8.7;

import "./EIP712Base.sol";

abstract contract EIP712MetaTransaction is EIP712Base {

    bytes32 private constant META_TRANSACTION_TYPEHASH =
        keccak256(
            bytes(
                "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
            )
        );

    event MetaTransactionExecuted(
        address userAddress,
        address payable relayerAddress,
        bytes functionSignature
    );

    mapping(address => uint256) internal nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
		uint256 nonce;
		address from;
        bytes functionSignature;
	}

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        public
        payable
        returns(bytes memory)
    {
        MetaTransaction memory metaTx = MetaTransaction(
            {
                nonce: nonces[userAddress],
                from: userAddress,
                functionSignature: functionSignature
            }
        );

        require(
            verify(
                userAddress,
                metaTx,
                sigR,
                sigS,
                sigV
            ), "Signer and signature do not match"
        );

	    nonces[userAddress] =
	    nonces[userAddress] + 1;

        // Append userAddress at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(
            abi.encodePacked(
                functionSignature,
                userAddress
            )
        );

        require(
            success,
            'Function call not successful'
        );

        emit MetaTransactionExecuted(
            userAddress,
            payable(msg.sender),
            functionSignature
        );

        return returnData;
    }

    function hashMetaTransaction(
        MetaTransaction memory metaTx
    )
        internal
        pure
        returns (bytes32)
    {
		return keccak256(
		    abi.encode(
                META_TRANSACTION_TYPEHASH,
                metaTx.nonce,
                metaTx.from,
                keccak256(metaTx.functionSignature)
            )
        );
	}

    function verify(
        address user,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    )
        internal
        view
        returns (bool)
    {
        address signer = ecrecover(
            toTypedMessageHash(
                hashMetaTransaction(metaTx)
            ),
            sigV,
            sigR,
            sigS
        );

        require(
            signer != address(0x0),
            'Invalid signature'
        );
		return signer == user;
	}

    function msgSender() internal view returns(address sender) {
        if(msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }

    function getNonce(
        address _user
    )
        external
        view
        returns(uint256 nonce)
    {
        nonce = nonces[_user];
    }
}

File 5 of 7: Events.sol
// SPDX-License-Identifier: -- 💎 --

pragma solidity ^0.8.7;

contract Events {

    event UpgradeItem(
        uint256 indexed itemId,
        uint256 issuedId,
        address indexed tokenOwner,
        uint256 indexed tokenId,
        address tokenAddress,
        uint256 requestIndex
    );

    event UpgradeResolved(
        uint256 indexed newItemId,
        address indexed tokenOwner,
        uint256 indexed newTokenId,
        address tokenAddress
    );

    event LevelEdit(
        uint256 indexed level,
        uint256 dgCostAmount,
        uint256 dgMoveAmount,
        uint256 iceCostAmount,
        uint256 iceMoveAmount,
        bool isActive
    );

    event IceLevelTransfer(
        address oldOwner,
        address indexed newOwner,
        address indexed tokenAddress,
        uint256 indexed tokenId
    );

    event InitialMinting(
        uint256 indexed tokenId,
        uint256 indexed mintCount,
        address indexed tokenOwner
    );

    event SupplyCheck(
        string rarity,
        uint256 maxSupply,
        uint256 price,
        address indexed beneficiary,
        string indexed metadata,
        string indexed contentHash
    );
}

File 6 of 7: Interfaces.sol
// SPDX-License-Identifier: -- 💎 --

pragma solidity ^0.8.7;

interface ERC721 {

    function ownerOf(
        uint256 _tokenId
    )
        external
        view
        returns (address);

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        external;
}

interface ERC20 {

    function burn(
        uint256 _amount
    )
        external;
}

interface DGAccessories  {

    function issueTokens(
        address[] calldata _beneficiaries,
        uint256[] calldata _itemIds
    )
        external;

    function encodeTokenId(
        uint256 _itemId,
        uint256 _issuedId
    )
        external
        pure
        returns (uint256 id);

    function decodeTokenId(
        uint256 _tokenId
    )
        external
        pure
        returns (
            uint256 itemId,
            uint256 issuedId
        );

    function items(
        uint256 _id
    )
        external
        view
        returns (
            string memory rarity,
            uint256 maxSupply,
            uint256 totalSupply,
            uint256 price,
            address beneficiary,
            string memory metadata,
            string memory contentHash
        );

    function itemsCount()
        external
        view
        returns (uint256);
}

File 7 of 7: TransferHelper.sol
// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.8.7;

contract TransferHelper {

    bytes4 private constant TRANSFER = bytes4(
        keccak256(
            bytes(
                'transfer(address,uint256)' // 0xa9059cbb
            )
        )
    );

    bytes4 private constant TRANSFER_FROM = bytes4(
        keccak256(
            bytes(
                'transferFrom(address,address,uint256)' // 0x23b872dd
            )
        )
    );

    function safeTransfer(
        address _token,
        address _to,
        uint256 _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER, // 0xa9059cbb
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FAILED'
        );
    }

    function safeTransferFrom(
        address _token,
        address _from,
        address _to,
        uint _value
    )
        internal
    {
        (bool success, bytes memory data) = _token.call(
            abi.encodeWithSelector(
                TRANSFER_FROM,
                _from,
                _to,
                _value
            )
        );

        require(
            success && (
                data.length == 0 || abi.decode(
                    data, (bool)
                )
            ),
            'TransferHelper: TRANSFER_FROM_FAILED'
        );
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_mintingPrice","type":"uint256"},{"internalType":"address","name":"_paymentToken","type":"address"},{"internalType":"address","name":"_tokenAddressDG","type":"address"},{"internalType":"address","name":"_tokenAddressICE","type":"address"},{"internalType":"address","name":"_accessoriesContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"IceLevelTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"mintCount","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"}],"name":"InitialMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dgCostAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dgMoveAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"iceCostAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"iceMoveAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"LevelEdit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"rarity","type":"string"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"string","name":"metadata","type":"string"},{"indexed":true,"internalType":"string","name":"contentHash","type":"string"}],"name":"SupplyCheck","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"issuedId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"requestIndex","type":"uint256"}],"name":"UpgradeItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newItemId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"newTokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"UpgradeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"existingWorker","type":"address"}],"name":"WorkerRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"addWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_newWorkers","type":"address[]"}],"name":"addWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_bonusValue","type":"uint256"},{"internalType":"uint256","name":"_levelValue","type":"uint256"}],"name":"adjustRegistrantEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowChangeSaleLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minterAddress","type":"address"}],"name":"canPurchaseAgain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newDepositAddressDG","type":"address"}],"name":"changeDepositAddressDG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDepositAddressNFT","type":"address"}],"name":"changeDepositAddressNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"changeMintLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintingPrice","type":"uint256"}],"name":"changeMintingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPaymentToken","type":"address"}],"name":"changePaymentToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSaleFrame","type":"uint256"}],"name":"changeSaleFrame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSaleLimit","type":"uint256"}],"name":"changeSaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_accessoriesContract","type":"address"}],"name":"changeTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTokenAddressDG","type":"address"}],"name":"changeTokenAddressDG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTokenAddressICE","type":"address"}],"name":"changeTokenAddressICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAddressDG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositAddressNFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disabledSaleLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getIceBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"bytes32","name":"_tokenHash","type":"bytes32"}],"name":"getLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getLevelById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_floorValue","type":"uint256"},{"internalType":"uint256","name":"_deltaValue","type":"uint256"},{"internalType":"uint256","name":"_nonceValue","type":"uint256"},{"internalType":"uint256","name":"_randomValue","type":"uint256"}],"name":"getNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"address","name":"_accessoriesContract","type":"address"}],"name":"getSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isIceEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWorker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levels","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"costAmountDG","type":"uint256"},{"internalType":"uint256","name":"moveAmountDG","type":"uint256"},{"internalType":"uint256","name":"costAmountICE","type":"uint256"},{"internalType":"uint256","name":"moveAmountICE","type":"uint256"},{"internalType":"uint256","name":"floorBonus","type":"uint256"},{"internalType":"uint256","name":"deltaBonus","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"limits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_level","type":"uint256"},{"internalType":"uint256","name":"_costAmountDG","type":"uint256"},{"internalType":"uint256","name":"_moveAmountDG","type":"uint256"},{"internalType":"uint256","name":"_costAmountICE","type":"uint256"},{"internalType":"uint256","name":"_moveAmountICE","type":"uint256"},{"internalType":"uint256","name":"_floorBonus","type":"uint256"},{"internalType":"uint256","name":"_deltaBonus","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"manageLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"address","name":"_minterAddress","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"reIceNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"registrer","outputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_existingWorker","type":"address"}],"name":"removeWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_workerArray","type":"address[]"}],"name":"removeWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requests","outputs":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"tokenOwner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleFrame","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"targets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddressDG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddressICE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upgradeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upgradeRequestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_itemId","type":"uint256"}],"name":"upgradeToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200389d3803806200389d8339810160408190526200003491620002a4565b604080518082018252600d81526c1258d9549959da5cdd1c985b9d609a1b60208083019190915282518084018452600481526376312e3360e01b81830152600080546001600160a01b031916339081178255808252600180855291869020805460ff191690921790915593518481529293909290917ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0910160405180910390a16040516001600160a01b03821681527fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9060200160405180910390a1506040518060800160405280605281526020016200384b605291398051906020012082805190602001208280519060200120620001526200028260201b60201c565b604080516020810195909552840192909252606083015260808201523060a082015260c00160408051808303601f1901815291815281516020928301206002556101f4600d55610e10600e55600a80546001600160a01b03199081166001600160a01b039a8b1617909155600b99909955600680548a16978916979097178755600780548a1696891696909617909555600f805460ff1916600190811790915593909616600081815260118852948520805490981617909655509080527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba9a1557f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba9a255601390525060647f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c556200030b565b600190565b80516001600160a01b03811681146200029f57600080fd5b919050565b600080600080600060a08688031215620002bd57600080fd5b85519450620002cf6020870162000287565b9350620002df6040870162000287565b9250620002ef6060870162000287565b9150620002ff6080870162000287565b90509295509295909350565b613530806200031b6000396000f3fe6080604052600436106102ff5760003560e01c80637da43de911610190578063b5241835116100dc578063e6adfe3711610095578063ee1c135b1161006f578063ee1c135b14610a4f578063f2fa80e014610a6f578063f8fabfe814610a8f578063fb8ad6ff14610aaf57600080fd5b8063e6adfe37146109ef578063eb96a43b14610a0f578063ed05582b14610a2f57600080fd5b8063b52418351461093f578063c31700071461095f578063c4128b6d1461097f578063c4f987a514610995578063cc34bff8146109b5578063d62669d1146109cf57600080fd5b80638a0e11e211610149578063aa15664511610123578063aa1566451461083c578063b10d8e461461086c578063b2596a671461088c578063b2f33e3f1461091f57600080fd5b80638a0e11e2146107e65780639589126914610806578063a1e89aec1461082657600080fd5b80637da43de9146106e75780637e26639f146106fc578063806ad57e1461071257806381d12c5814610732578063834a4084146107b0578063895fa239146107c657600080fd5b80633df9fa661161024f5780636055d68b116102085780636d528f79116101e25780636d528f79146106265780636f67b2941461064657806379356bae146106665780637a5025001461069357600080fd5b80636055d68b146105d0578063674950a9146105f05780636777d4191461060657600080fd5b80633df9fa66146104fa5780633fbd81221461051a5780634558d7171461053a5780634e5ee3861461055a578063562c47841461057a5780635a5adf97146105b057600080fd5b806320e9daf1116102bc5780633013ce29116102965780633013ce29146104845780633338500d146104a457806335db70b5146104c45780633bc6383b146104da57600080fd5b806320e9daf1146103f357806327d7874c1461042e5780632d0335ab1461044e57600080fd5b8063020a1504146103045780630a0f8168146103265780630c53c51c146103635780631268bdec1461038357806314769c08146103a35780631fd27cd1146103d3575b600080fd5b34801561031057600080fd5b5061032461031f366004612c27565b610ae5565b005b34801561033257600080fd5b50600054610346906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610376610371366004612da5565b610b3a565b60405161035a919061324c565b34801561038f57600080fd5b5061032461039e366004612ff9565b610d1c565b3480156103af57600080fd5b506103c36103be366004612c27565b61117f565b604051901515815260200161035a565b3480156103df57600080fd5b506103246103ee366004612ee9565b6111af565b3480156103ff57600080fd5b5061042061040e366004612ee9565b60136020526000908152604090205481565b60405190815260200161035a565b34801561043a57600080fd5b50610324610449366004612c27565b6111de565b34801561045a57600080fd5b50610420610469366004612c27565b6001600160a01b031660009081526003602052604090205490565b34801561049057600080fd5b50600a54610346906001600160a01b031681565b3480156104b057600080fd5b50600954610346906001600160a01b031681565b3480156104d057600080fd5b50610420600b5481565b3480156104e657600080fd5b506104206104f5366004612ca1565b611285565b34801561050657600080fd5b50610420610515366004613081565b6112bf565b34801561052657600080fd5b50610324610535366004612ca1565b611316565b34801561054657600080fd5b50610324610555366004612c27565b61167a565b34801561056657600080fd5b50610324610575366004612c27565b6116c6565b34801561058657600080fd5b50610346610595366004612c27565b6011602052600090815260409020546001600160a01b031681565b3480156105bc57600080fd5b506103246105cb366004612c27565b611712565b3480156105dc57600080fd5b506103246105eb366004612ce2565b61175e565b3480156105fc57600080fd5b5061042060055481565b34801561061257600080fd5b50610324610621366004612ee9565b611b90565b34801561063257600080fd5b50600854610346906001600160a01b031681565b34801561065257600080fd5b50610324610661366004612ee9565b611bbf565b34801561067257600080fd5b50610420610681366004612c27565b60126020526000908152604090205481565b34801561069f57600080fd5b506106d26106ae366004612d79565b60166020908152600092835260408084209091529082529020805460019091015482565b6040805192835260208301919091520161035a565b3480156106f357600080fd5b50610324611c45565b34801561070857600080fd5b50610420600d5481565b34801561071e57600080fd5b5061032461072d366004612c27565b611c7b565b34801561073e57600080fd5b5061078161074d366004612ee9565b6015602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03918216911684565b6040805194855260208501939093526001600160a01b039182169284019290925216606082015260800161035a565b3480156107bc57600080fd5b50610420600e5481565b3480156107d257600080fd5b506104206107e1366004612d79565b611cb1565b3480156107f257600080fd5b50610420610801366004612ca1565b611cd9565b34801561081257600080fd5b506103246108213660046130b3565b611d16565b34801561083257600080fd5b50610420600c5481565b34801561084857600080fd5b506103c3610857366004612c27565b60016020526000908152604090205460ff1681565b34801561087857600080fd5b50610324610887366004612c27565b611de2565b34801561089857600080fd5b506108e86108a7366004612ee9565b601460205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff9095169593949293919290919087565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161035a565b34801561092b57600080fd5b50600654610346906001600160a01b031681565b34801561094b57600080fd5b5061032461095a366004612d28565b611e2e565b34801561096b57600080fd5b5061032461097a366004612e57565b611ebe565b34801561098b57600080fd5b5061042060045481565b3480156109a157600080fd5b506103246109b0366004612c27565b611f3f565b3480156109c157600080fd5b50600f546103c39060ff1681565b3480156109db57600080fd5b506103246109ea36600461303b565b611f72565b3480156109fb57600080fd5b50610324610a0a366004612e57565b611fae565b348015610a1b57600080fd5b50600754610346906001600160a01b031681565b348015610a3b57600080fd5b50610420610a4a366004612d79565b61202a565b348015610a5b57600080fd5b506103c3610a6a366004612ca1565b612071565b348015610a7b57600080fd5b50610420610a8a366004612fd4565b61208a565b348015610a9b57600080fd5b50610324610aaa366004612c68565b6121a5565b348015610abb57600080fd5b50610346610aca366004612ee9565b6010602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610b185760405162461bcd60e51b8152600401610b0f906132bb565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60408051606081810183526001600160a01b03881660008181526003602090815290859020548452830152918101869052610b7887828787876121fd565b610bce5760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b6064820152608401610b0f565b6001600160a01b038716600090815260036020526040902054610bf290600161338c565b6001600160a01b0388166000908152600360209081526040808320939093559151909182913091610c27918b918d9101613165565b60408051601f1981840301815290829052610c4191613149565b6000604051808303816000865af19150503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b509150915081610cd55760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c000000006044820152606401610b0f565b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b89338a604051610d089392919061319c565b60405180910390a198975050505050505050565b3360009081526001602081905260409091205460ff16151514610d515760405162461bcd60e51b8152600401610b0f906132f0565b600c54600d5411610da45760405162461bcd60e51b815260206004820152601760248201527f69636552656769737472616e743a20736f6c642d6f75740000000000000000006044820152606401610b0f565b600c80546001019055600083815260136020526040902054610e015760405162461bcd60e51b81526020600482015260166024820152751a58d9549959da5cdd1c985b9d0e881b1a5b5a5d195960521b6044820152606401610b0f565b60008381526013602052604090208054600019019055610e208261117f565b1515600114610e7b5760405162461bcd60e51b815260206004820152602160248201527f69636552656769737472616e743a20636f6f6c2d646f776e20646574656374656044820152601960fa1b6064820152608401610b0f565b6001600160a01b038083166000908152601260205260408120429055600a549054600b54610eb09392831692869216906122d9565b6001600160a01b03808216600090815260116020526040812054909116908163ebd46d6486610edf818461208a565b610eea90600161338c565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190612fbb565b6001600160a01b0380851660009081526011602052604081205492935091610f8791168361202a565b600081815260106020908152604080832080546001600160a01b0319166001600160a01b038b169081179091558352601682528083208484528252822060019055908052601490527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba9a1547f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba9a254600c5492935061102392426112bf565b6001600160a01b0386166000908152601660209081526040808320858452825280832060019081019490945580518481528082019091529192908281019080368337019050509050858160008151811061107f5761107f613443565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905087816000815181106110d0576110d0613443565b6020908102919091010152604051637c8f76a160e01b81526001600160a01b03861690637c8f76a19061110990859085906004016131c8565b600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b50505050866001600160a01b0316600c54857f440b73ca4ec223e0913b585156117149f96d6c961ee52c83623331dd6085e1ff60405160405180910390a45050505050505050565b600e546001600160a01b0382166000908152601260205260408120549091906111a890426133a4565b1192915050565b6000546001600160a01b031633146111d95760405162461bcd60e51b8152600401610b0f906132bb565b600b55565b806001600160a01b0381166112055760405162461bcd60e51b8152600401610b0f90613284565b6000546001600160a01b0316331461122f5760405162461bcd60e51b8152600401610b0f906132bb565b600080546001600160a01b0319166001600160a01b0384169081179091556040519081527ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0906020015b60405180910390a15050565b600080611292848461202a565b6001600160a01b038616600090815260166020908152604080832093835292905220549150509392505050565b60006112cc84600161338c565b60408051602081018690529081018490526060016040516020818303038152906040528051906020012060001c611303919061340b565b61130d908661338c565b95945050505050565b6001600160a01b038281166000908152601160205260409020541661137d5760405162461bcd60e51b815260206004820152601c60248201527f69636552656769737472616e743a20696e76616c696420746f6b656e000000006044820152606401610b0f565b816000611388612435565b9050806001600160a01b0316826001600160a01b0316636352211e856040518263ffffffff1660e01b81526004016113c291815260200190565b60206040518083038186803b1580156113da57600080fd5b505afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190612c4b565b6001600160a01b0316146114685760405162461bcd60e51b815260206004820152601c60248201527f69636552656769737472616e743a20696e76616c6964206f776e6572000000006044820152606401610b0f565b6000611474858561202a565b90506000611483878787611285565b600081815260146020526040902060028101546004909101549192506114ab91859190612492565b6001600160a01b03808816600090815260166020818152604080842087855282528084208054600190910154958916855292825280842087855290915290912054909190821161154f5760405162461bcd60e51b815260206004820152602960248201527f69636552656769737472616e743a2070726576656e74696e67206c6576656c20604482015268646f776e677261646560b81b6064820152608401610b0f565b6001600160a01b038516600090815260166020908152604080832087845290915290206001015481116115d65760405162461bcd60e51b815260206004820152602960248201527f69636552656769737472616e743a2070726576656e74696e6720626f6e757320604482015268646f776e677261646560b81b6064820152608401610b0f565b6001600160a01b0389811660008181526016602081815260408084208a8552825280842084815560019081018590558b87168086529383528185208b8652835281852089815501879055601082529283902080546001600160a01b0319168317905591519283528a938c169290917fa3bb50f1c742c7841b8660288c3e343fa9efaf3304d8588443d4f6cada900e5c910160405180910390a4505050505050505050565b6000546001600160a01b031633146116a45760405162461bcd60e51b8152600401610b0f906132bb565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116f05760405162461bcd60e51b8152600401610b0f906132bb565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461173c5760405162461bcd60e51b8152600401610b0f906132bb565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602081905260409091205460ff161515146117935760405162461bcd60e51b8152600401610b0f906132f0565b6001600160a01b03838116600090815260116020526040902054166118065760405162461bcd60e51b815260206004820152602360248201527f69636552656769737472616e743a20696e76616c696420746f6b656e2074617260448201526219d95d60ea1b6064820152608401610b0f565b6040516331a9108f60e11b815260048101839052839085906001600160a01b038083169190841690636352211e9060240160206040518083038186803b15801561184f57600080fd5b505afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118879190612c4b565b6001600160a01b0316146118dd5760405162461bcd60e51b815260206004820152601c60248201527f69636552656769737472616e743a20696e76616c6964206f776e6572000000006044820152606401610b0f565b60006118e9868661202a565b905060006118f78383611cb1565b61190290600161338c565b60008181526014602052604090205490915060ff166119635760405162461bcd60e51b815260206004820152601d60248201527f69636552656769737472616e743a20696e616374697665206c6576656c0000006044820152606401610b0f565b6005546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018990528616906323b872dd90606401600060405180830381600087803b1580156119b657600080fd5b505af11580156119ca573d6000803e3d6000fd5b505050506001600160a01b03888116600090815260116020526040808220549051633f7ec88960e11b8152600481018b905292169181908390637efd911290602401604080518083038186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b919061305d565b915091508160156000868152602001908152602001600020600001819055508960156000868152602001908152602001600020600101819055508a6015600086815260200190815260200160002060020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550866015600086815260200190815260200160002060030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060055460010160058190555089876001600160a01b0316837f6b3a0eb6f472be7b1a6a42043fec3cc1408d23e12b2510d9f4cb5f376c17906a848f89604051611b70939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a4611b82848a61253b565b505050505050505050505050565b6000546001600160a01b03163314611bba5760405162461bcd60e51b8152600401610b0f906132bb565b600e55565b6000546001600160a01b03163314611be95760405162461bcd60e51b8152600401610b0f906132bb565b600f5460ff161515600114611c405760405162461bcd60e51b815260206004820152601e60248201527f69636552656769737472616e743a206368616e67652064697361626c656400006044820152606401610b0f565b600d55565b6000546001600160a01b03163314611c6f5760405162461bcd60e51b8152600401610b0f906132bb565b600f805460ff19169055565b6000546001600160a01b03163314611ca55760405162461bcd60e51b8152600401610b0f906132bb565b611cae81612930565b50565b6001600160a01b03919091166000908152601660209081526040808320938352929052205490565b600080611ce6848461202a565b6001600160a01b038616600090815260166020908152604080832093835292905220600101549150509392505050565b6000546001600160a01b03163314611d405760405162461bcd60e51b8152600401610b0f906132bb565b600088815260146020908152604091829020600181018a90556002810189905560038101889055600481018790556005810186905560068101859055805484151560ff19909116811790915582518a8152918201899052818301889052606082018790526080820152905189917f22bb4bd01d13723afd9eeb6e4e2e2727b7c1b0222a0c2d0757d5d137eed217ae919081900360a00190a25050505050505050565b6000546001600160a01b03163314611e0c5760405162461bcd60e51b8152600401610b0f906132bb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602081905260409091205460ff16151514611e635760405162461bcd60e51b8152600401610b0f906132f0565b6000611e6f858561202a565b600081815260106020908152604080832080546001600160a01b0319166001600160a01b039b909b169a8b17905598825260168152888220928252919091529590952090815560010155505050565b6000546001600160a01b03163314611ee85760405162461bcd60e51b8152600401610b0f906132bb565b60005b60ff8116821115611f3a57611f2883838360ff16818110611f0e57611f0e613443565b9050602002016020810190611f239190612c27565b612930565b80611f32816133eb565b915050611eeb565b505050565b6000546001600160a01b03163314611f695760405162461bcd60e51b8152600401610b0f906132bb565b611cae81612a21565b6000546001600160a01b03163314611f9c5760405162461bcd60e51b8152600401610b0f906132bb565b60009182526013602052604090912055565b6000546001600160a01b03163314611fd85760405162461bcd60e51b8152600401610b0f906132bb565b60005b60ff8116821115611f3a5761201883838360ff16818110611ffe57611ffe613443565b90506020020160208101906120139190612c27565b612a21565b80612022816133eb565b915050611fdb565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b60008061207f858585611cd9565b151595945050505050565b600080600080600080600080886001600160a01b031663bfb231d28b6040518263ffffffff1660e01b81526004016120c491815260200190565b60006040518083038186803b1580156120dc57600080fd5b505afa1580156120f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121189190810190612f02565b9650965096509650965096509650806040516121349190613149565b60405180910390208260405161214a9190613149565b6040518091039020846001600160a01b03167f40e5bd8ad1272f4c93b13faa940bd91579c3bda02c4556a5bd0503179e0d95bb8a8a8960405161218f9392919061325f565b60405180910390a4509298975050505050505050565b6000546001600160a01b031633146121cf5760405162461bcd60e51b8152600401610b0f906132bb565b6001600160a01b03918216600090815260116020526040902080546001600160a01b03191691909216179055565b600080600161221361220e88612b12565b612b8f565b6040805160008152602081018083529290925260ff861690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015612261573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166122b85760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b0f565b866001600160a01b0316816001600160a01b03161491505095945050505050565b600080856001600160a01b03166040518060600160405280602581526020016134936025913980516020909101206040516001600160a01b038089166024830152871660448201526064810186905260840160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123699190613149565b6000604051808303816000865af19150503d80600081146123a6576040519150601f19603f3d011682016040523d82523d6000602084013e6123ab565b606091505b50915091508180156123d55750805115806123d55750808060200190518101906123d59190612ecc565b61242d5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610b0f565b505050505050565b60003330141561248c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061248f9050565b50335b90565b81156124b7576006546008546124b7916001600160a01b0390811691869116856122d9565b8015611f3a576007546124d5906001600160a01b03168430846122d9565b600754604051630852cd8d60e31b8152600481018390526001600160a01b039091169081906342966c6890602401600060405180830381600087803b15801561251d57600080fd5b505af1158015612531573d6000803e3d6000fd5b5050505050505050565b600082815260156020526040812060018101805460028301805460038501805495879055938690556001600160a01b0319808216909255908416909255926001600160a01b039182169290911690612593838561202a565b905060006125a18383611cb1565b6125ac90600161338c565b600083815260106020908152604080832080546001600160a01b03191690556001600160a01b0387168352601682528083208684528252808320838155600190810184905584845260149092529091209081015460039091015491925061261591859190612492565b6009546040516323b872dd60e01b81523060048201526001600160a01b03918216602482015260448101879052908516906323b872dd90606401600060405180830381600087803b15801561266957600080fd5b505af115801561267d573d6000803e3d6000fd5b5050506001600160a01b0380861660009081526011602052604081205490911691508163ebd46d64896126b0818461208a565b6126bb90600161338c565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b1580156126f757600080fd5b505afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f9190612fbb565b6001600160a01b038088166000908152601160205260408120549293509161275891168361202a565b600081815260106020908152604080832080546001600160a01b0319166001600160a01b038c1690811790915583526016825280832084845282528083208890558783526014909152902060058101546006909101546004549293506127be92426112bf565b6001600160a01b03871660009081526016602090815260408083208584528252808320600190810194909455600480548501905580518481528082019091529192908281019080368337019050509050868160008151811061282257612822613443565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090508a8160008151811061287357612873613443565b6020908102919091010152604051637c8f76a160e01b81526001600160a01b03861690637c8f76a1906128ac90859085906004016131c8565b600060405180830381600087803b1580156128c657600080fd5b505af11580156128da573d6000803e3d6000fd5b50506040516001600160a01b038c811682528793508b1691508d907fe15408a9780d767534f58a7f034b439cde63875ab59d5cd3cd394a71099b1e9a9060200160405180910390a4505050505050505050505050565b806001600160a01b0381166129575760405162461bcd60e51b8152600401610b0f90613284565b6001600160a01b03821660009081526001602052604090205460ff16156129cc5760405162461bcd60e51b815260206004820152602360248201527f416363657373436f6e74726f6c3a20776f726b657220616c72656164792065786044820152621a5cdd60ea1b6064820152608401610b0f565b6001600160a01b038216600081815260016020818152604092839020805460ff191690921790915590519182527fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9101611279565b806001600160a01b038116612a485760405162461bcd60e51b8152600401610b0f90613284565b6001600160a01b03821660009081526001602081905260409091205460ff16151514612ac15760405162461bcd60e51b815260206004820152602260248201527f416363657373436f6e74726f6c3a20776f726b6572206e6f7420646574656374604482015261195960f21b6064820152608401610b0f565b6001600160a01b038216600081815260016020908152604091829020805460ff1916905590519182527f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d279101611279565b60006040518060800160405280604381526020016134b86043913980516020918201208351848301516040808701518051908601209051612b72950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000612b9a60025490565b60405161190160f01b6020820152602281019190915260428101839052606201612b72565b600082601f830112612bd057600080fd5b8151612be3612bde82613364565b613333565b818152846020838601011115612bf857600080fd5b612c098260208301602087016133bb565b949350505050565b803560ff81168114612c2257600080fd5b919050565b600060208284031215612c3957600080fd5b8135612c448161346f565b9392505050565b600060208284031215612c5d57600080fd5b8151612c448161346f565b60008060408385031215612c7b57600080fd5b8235612c868161346f565b91506020830135612c968161346f565b809150509250929050565b600080600060608486031215612cb657600080fd5b8335612cc18161346f565b92506020840135612cd18161346f565b929592945050506040919091013590565b60008060008060808587031215612cf857600080fd5b8435612d038161346f565b93506020850135612d138161346f565b93969395505050506040820135916060013590565b600080600080600060a08688031215612d4057600080fd5b8535612d4b8161346f565b94506020860135612d5b8161346f565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215612d8c57600080fd5b8235612d978161346f565b946020939093013593505050565b600080600080600060a08688031215612dbd57600080fd5b8535612dc88161346f565b9450602086013567ffffffffffffffff811115612de457600080fd5b8601601f81018813612df557600080fd5b8035612e03612bde82613364565b818152896020838501011115612e1857600080fd5b816020840160208301376000602083830101528096505050506040860135925060608601359150612e4b60808701612c11565b90509295509295909350565b60008060208385031215612e6a57600080fd5b823567ffffffffffffffff80821115612e8257600080fd5b818501915085601f830112612e9657600080fd5b813581811115612ea557600080fd5b8660208260051b8501011115612eba57600080fd5b60209290920196919550909350505050565b600060208284031215612ede57600080fd5b8151612c4481613484565b600060208284031215612efb57600080fd5b5035919050565b600080600080600080600060e0888a031215612f1d57600080fd5b875167ffffffffffffffff80821115612f3557600080fd5b612f418b838c01612bbf565b985060208a0151975060408a0151965060608a0151955060808a01519150612f688261346f565b60a08a015191945080821115612f7d57600080fd5b612f898b838c01612bbf565b935060c08a0151915080821115612f9f57600080fd5b50612fac8a828b01612bbf565b91505092959891949750929550565b600060208284031215612fcd57600080fd5b5051919050565b60008060408385031215612fe757600080fd5b823591506020830135612c968161346f565b60008060006060848603121561300e57600080fd5b8335925060208401356130208161346f565b915060408401356130308161346f565b809150509250925092565b6000806040838503121561304e57600080fd5b50508035926020909101359150565b6000806040838503121561307057600080fd5b505080516020909101519092909150565b6000806000806080858703121561309757600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156130d057600080fd5b883597506020890135965060408901359550606089013594506080890135935060a0890135925060c0890135915060e089013561310c81613484565b809150509295985092959890939650565b600081518084526131358160208601602086016133bb565b601f01601f19169290920160200192915050565b6000825161315b8184602087016133bb565b9190910192915050565b600083516131778184602088016133bb565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b6001600160a01b0384811682528316602082015260606040820181905260009061130d9083018461311d565b604080825283519082018190526000906020906060840190828701845b8281101561320a5781516001600160a01b0316845292840192908401906001016131e5565b5050508381038285015284518082528583019183019060005b8181101561323f57835183529284019291840191600101613223565b5090979650505050505050565b602081526000612c44602083018461311d565b606081526000613272606083018661311d565b60208301949094525060400152919050565b6020808252601e908201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604082015260600190565b6020808252818101527f416363657373436f6e74726f6c3a2043454f206163636573732064656e696564604082015260600190565b60208082526023908201527f416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e6040820152621a595960ea1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561335c5761335c613459565b604052919050565b600067ffffffffffffffff82111561337e5761337e613459565b50601f01601f191660200190565b6000821982111561339f5761339f61342d565b500190565b6000828210156133b6576133b661342d565b500390565b60005b838110156133d65781810151838201526020016133be565b838111156133e5576000848401525b50505050565b600060ff821660ff8114156134025761340261342d565b60010192915050565b60008261342857634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611cae57600080fd5b8015158114611cae57600080fdfe7472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529a2646970667358221220429d5fc54bbb848bd01a49a2f82b7daa85127b5d95f6afd81a49a364fbb17de164736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6190000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b4000000000000000000000000c6c855ad634dcdad23e64da71ba85b8c51e5ad7c000000000000000000000000cb06f6aee0655252a3f6f2884680421d55d3c645

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

000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6190000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b4000000000000000000000000c6c855ad634dcdad23e64da71ba85b8c51e5ad7c000000000000000000000000cb06f6aee0655252a3f6f2884680421d55d3c645

-----Decoded View---------------
Arg [0] : _mintingPrice (uint256): 100000000000000000
Arg [1] : _paymentToken (address): 0x7ceb23fd6bc0add59e62ac25578270cff1b9f619
Arg [2] : _tokenAddressDG (address): 0x2a93172c8dccbfbc60a39d56183b7279a2f647b4
Arg [3] : _tokenAddressICE (address): 0xc6c855ad634dcdad23e64da71ba85b8c51e5ad7c
Arg [4] : _accessoriesContract (address): 0xcb06f6aee0655252a3f6f2884680421d55d3c645

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [1] : 0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619
Arg [2] : 0000000000000000000000002a93172c8dccbfbc60a39d56183b7279a2f647b4
Arg [3] : 000000000000000000000000c6c855ad634dcdad23e64da71ba85b8c51e5ad7c
Arg [4] : 000000000000000000000000cb06f6aee0655252a3f6f2884680421d55d3c645


Deployed ByteCode Sourcemap

228:16606:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2828:180;;;;;;;;;;-1:-1:-1;2828:180:6;;;;;:::i;:::-;;:::i;:::-;;104:25:0;;;;;;;;;;-1:-1:-1;104:25:0;;;;-1:-1:-1;;;;;104:25:0;;;;;;-1:-1:-1;;;;;12029:32:7;;;12011:51;;11999:2;11984:18;104:25:0;;;;;;;;922:1323:2;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5209:1962:6:-;;;;;;;;;;-1:-1:-1;5209:1962:6;;;;;:::i;:::-;;:::i;16020:203::-;;;;;;;;;;-1:-1:-1;16020:203:6;;;;;:::i;:::-;;:::i;:::-;;;14237:14:7;;14230:22;14212:41;;14200:2;14185:18;16020:203:6;14072:187:7;3016:160:6;;;;;;;;;;-1:-1:-1;3016:160:6;;;;;:::i;:::-;;:::i;1374:42::-;;;;;;;;;;-1:-1:-1;1374:42:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15032:25:7;;;15020:2;15005:18;1374:42:6;14886:177:7;1167:221:0;;;;;;;;;;-1:-1:-1;1167:221:0;;;;;:::i;:::-;;:::i;3731:158:2:-;;;;;;;;;;-1:-1:-1;3731:158:2;;;;;:::i;:::-;-1:-1:-1;;;;;3868:13:2;3829;3868;;;:6;:13;;;;;;;3731:158;558:27:6;;;;;;;;;;-1:-1:-1;558:27:6;;;;-1:-1:-1;;;;;558:27:6;;;517:32;;;;;;;;;;-1:-1:-1;517:32:6;;;;-1:-1:-1;;;;;517:32:6;;;592:27;;;;;;;;;;;;;;;;14957:347;;;;;;;;;;-1:-1:-1;14957:347:6;;;;;:::i;:::-;;:::i;16499:332::-;;;;;;;;;;-1:-1:-1;16499:332:6;;;;;:::i;:::-;;:::i;11192:1681::-;;;;;;;;;;-1:-1:-1;11192:1681:6;;;;;:::i;:::-;;:::i;3928:160::-;;;;;;;;;;-1:-1:-1;3928:160:6;;;;;:::i;:::-;;:::i;2468:168::-;;;;;;;;;;-1:-1:-1;2468:168:6;;;;;:::i;:::-;;:::i;1273:43::-;;;;;;;;;;-1:-1:-1;1273:43:6;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1273:43:6;;;2288:172;;;;;;;;;;-1:-1:-1;2288:172:6;;;;;:::i;:::-;;:::i;7179:1865::-;;;;;;;;;;-1:-1:-1;7179:1865:6;;;;;:::i;:::-;;:::i;361:34::-;;;;;;;;;;;;;;;;3365:148;;;;;;;;;;-1:-1:-1;3365:148:6;;;;;:::i;:::-;;:::i;479:31::-;;;;;;;;;;-1:-1:-1;479:31:6;;;;-1:-1:-1;;;;;479:31:6;;;3521:269;;;;;;;;;;-1:-1:-1;3521:269:6;;;;;:::i;:::-;;:::i;1325:42::-;;;;;;;;;;-1:-1:-1;1325:42:6;;;;;:::i;:::-;;;;;;;;;;;;;;1525:66;;;;;;;;;;-1:-1:-1;1525:66:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24388:25:7;;;24444:2;24429:18;;24422:34;;;;24361:18;1525:66:6;24214:248:7;3798:122:6;;;;;;;;;;;;;:::i;661:24::-;;;;;;;;;;;;;;;;1396:160:0;;;;;;;;;;-1:-1:-1;1396:160:0;;;;;:::i;:::-;;:::i;1472:44:6:-;;;;;;;;;;-1:-1:-1;1472:44:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1472:44:6;;;;;;;;;;;24698:25:7;;;24754:2;24739:18;;24732:34;;;;-1:-1:-1;;;;;24840:15:7;;;24820:18;;;24813:43;;;;24892:15;24887:2;24872:18;;24865:43;24685:3;24670:19;1472:44:6;24467:447:7;692:24:6;;;;;;;;;;;;;;;;14737:212;;;;;;;;;;-1:-1:-1;14737:212:6;;;;;:::i;:::-;;:::i;15312:346::-;;;;;;;;;;-1:-1:-1;15312:346:6;;;;;:::i;:::-;;:::i;4316:885::-;;;;;;;;;;-1:-1:-1;4316:885:6;;;;;:::i;:::-;;:::i;628:24::-;;;;;;;;;;;;;;;;138:41:0;;;;;;;;;;-1:-1:-1;138:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2644:176:6;;;;;;;;;;-1:-1:-1;2644:176:6;;;;;:::i;:::-;;:::i;1425:40::-;;;;;;;;;;-1:-1:-1;1425:40:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14598:14:7;;14591:22;14573:41;;14645:2;14630:18;;14623:34;;;;14673:18;;;14666:34;;;;14731:2;14716:18;;14709:34;;;;14774:3;14759:19;;14752:35;14818:3;14803:19;;14796:35;14862:3;14847:19;;14840:35;14560:3;14545:19;1425:40:6;14264:617:7;404:29:6;;;;;;;;;;-1:-1:-1;404:29:6;;;;-1:-1:-1;;;;;404:29:6;;;12881:512;;;;;;;;;;-1:-1:-1;12881:512:6;;;;;:::i;:::-;;:::i;1564:245:0:-;;;;;;;;;;-1:-1:-1;1564:245:0;;;;;:::i;:::-;;:::i;327:27:6:-;;;;;;;;;;;;;;;;2178:176:0;;;;;;;;;;-1:-1:-1;2178:176:0;;;;;:::i;:::-;;:::i;725:32:6:-;;;;;;;;;;-1:-1:-1;725:32:6;;;;;;;;3184:173;;;;;;;;;;-1:-1:-1;3184:173:6;;;;;:::i;:::-;;:::i;2362:254:0:-;;;;;;;;;;-1:-1:-1;2362:254:0;;;;;:::i;:::-;;:::i;440:30:6:-;;;;;;;;;;-1:-1:-1;440:30:6;;;;-1:-1:-1;;;;;440:30:6;;;16231:260;;;;;;;;;;-1:-1:-1;16231:260:6;;;;;:::i;:::-;;:::i;15666:346::-;;;;;;;;;;-1:-1:-1;15666:346:6;;;;;:::i;:::-;;:::i;13401:664::-;;;;;;;;;;-1:-1:-1;13401:664:6;;;;;:::i;:::-;;:::i;4096:212::-;;;;;;;;;;-1:-1:-1;4096:212:6;;;;;:::i;:::-;;:::i;1224:42::-;;;;;;;;;;-1:-1:-1;1224:42:6;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1224:42:6;;;2828:180;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;;;;;;;;;2959:17:6::1;:41:::0;;-1:-1:-1;;;;;;2959:41:6::1;-1:-1:-1::0;;;;;2959:41:6;;;::::1;::::0;;;::::1;::::0;;2828:180::o;922:1323:2:-;1211:192;;;1149:12;1211:192;;;;;-1:-1:-1;;;;;1267:19:2;;1179:29;1267:19;;;:6;:19;;;;;;;;;1211:192;;;;;;;;;;;1438:145;1274:11;1211:192;1518:4;1541;1564;1438:6;:145::i;:::-;1416:215;;;;-1:-1:-1;;;1416:215:2;;22315:2:7;1416:215:2;;;22297:21:7;22354:2;22334:18;;;22327:30;22393:34;22373:18;;;22366:62;-1:-1:-1;;;22444:18:7;;;22437:31;22485:19;;1416:215:2;22113:397:7;1416:215:2;-1:-1:-1;;;;;1669:19:2;;;;;;:6;:19;;;;;;:23;;1691:1;1669:23;:::i;:::-;-1:-1:-1;;;;;1641:19:2;;;;;;:6;:19;;;;;;;;:51;;;;1857:97;;1641:19;;;;1832:4;;1857:97;;1892:17;;1648:11;;1857:97;;:::i;:::-;;;;-1:-1:-1;;1857:97:2;;;;;;;;;;1824:141;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:183;;;;2000:7;1978:85;;;;-1:-1:-1;;;1978:85:2;;18253:2:7;1978:85:2;;;18235:21:7;18292:2;18272:18;;;18265:30;18331;18311:18;;;18304:58;18379:18;;1978:85:2;18051:352:7;1978:85:2;2081:126;2119:11;2153:10;2179:17;2081:126;;;;;;;;:::i;:::-;;;;;;;;2227:10;922:1323;-1:-1:-1;;;;;;;;922:1323:2:o;5209:1962:6:-;858:10:0;849:20;;;;:8;:20;;;;;;;;;;;:28;;;827:113;;;;-1:-1:-1;;;827:113:0;;;;;;;:::i;:::-;5414:9:6::1;;5402;;:21;5380:94;;;::::0;-1:-1:-1;;;5380:94:6;;23532:2:7;5380:94:6::1;::::0;::::1;23514:21:7::0;23571:2;23551:18;;;23544:30;23610:25;23590:18;;;23583:53;23653:18;;5380:94:6::1;23330:347:7::0;5380:94:6::1;5537:9;::::0;;5549:1:::1;5537:13;5512:38:::0;;-1:-1:-1;5596:15:6;;;:6:::1;:15;::::0;;;;;5574:91:::1;;;::::0;-1:-1:-1;;;5574:91:6;;18967:2:7;5574:91:6::1;::::0;::::1;18949:21:7::0;19006:2;18986:18;;;18979:30;-1:-1:-1;;;19025:18:7;;;19018:52;19087:18;;5574:91:6::1;18765:346:7::0;5574:91:6::1;5734:15;::::0;;;:6:::1;:15;::::0;;;;;;-1:-1:-1;;5734:19:6;5703:50;;5799:32:::1;5816:14:::0;5799:16:::1;:32::i;:::-;:40;;5835:4;5799:40;5777:123;;;::::0;-1:-1:-1;;;5777:123:6;;19318:2:7;5777:123:6::1;::::0;::::1;19300:21:7::0;19357:2;19337:18;;;19330:30;19396:34;19376:18;;;19369:62;-1:-1:-1;;;19447:18:7;;;19440:31;19488:19;;5777:123:6::1;19116:397:7::0;5777:123:6::1;-1:-1:-1::0;;;;;5913:22:6;;::::1;;::::0;;;:6:::1;:22;::::0;;;;5938:15:::1;5913:40:::0;;5997:12:::1;::::0;6053:10;;6078:12:::1;::::0;5966:135:::1;::::0;5997:12;;::::1;::::0;5920:14;;6053:10:::1;::::0;5966:16:::1;:135::i;:::-;-1:-1:-1::0;;;;;6165:22:6;;::::1;6114:20;6165:22:::0;;;:7:::1;:22;::::0;;;;;;;::::1;::::0;;6232:20:::1;6267:7:::0;6289:42:::1;6267:7:::0;6165:22;6289:9:::1;:42::i;:::-;:46;::::0;6334:1:::1;6289:46;:::i;:::-;6232:114;::::0;-1:-1:-1;;;;;;6232:114:6::1;::::0;;;;;;::::1;::::0;::::1;24388:25:7::0;;;;24429:18;;;24422:34;24361:18;;6232:114:6::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6399:22:6;;::::1;6359:15;6399:22:::0;;;:7:::1;:22;::::0;;;;;6211:135;;-1:-1:-1;6359:15:6;6377:80:::1;::::0;6399:22:::1;6211:135:::0;6377:7:::1;:80::i;:::-;6470:15;::::0;;;:6:::1;:15;::::0;;;;;;;:32;;-1:-1:-1;;;;;;6470:32:6::1;-1:-1:-1::0;;;;;6470:32:6;::::1;::::0;;::::1;::::0;;;6515:25;;:9:::1;:25:::0;;;;;:34;;;;;;;-1:-1:-1;6515:44:6;;6637:9;;;:6:::1;:9:::0;;:20;;6672;;6707:9:::1;::::0;6470:15;;-1:-1:-1;6613:144:6::1;::::0;6731:15:::1;6613:9;:144::i;:::-;-1:-1:-1::0;;;;;6570:25:6;::::1;;::::0;;;:9:::1;:25;::::0;;;;;;;:34;;;;;;;;:40:::1;::::0;;::::1;:187:::0;;;;6803:16;;;;;;;::::1;::::0;;;6570:25;;:40;6803:16;;::::1;::::0;6570:25;6803:16:::1;::::0;::::1;;::::0;-1:-1:-1;6803:16:6::1;6770:49;;6849:14;6830:13;6844:1;6830:16;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6830:33:6;;;::::1;:16;::::0;;::::1;::::0;;;;;;;:33;6903:16:::1;::::0;;6917:1:::1;6903:16:::0;;;;;::::1;::::0;;;6876:24:::1;::::0;6903:16:::1;;;;;;;;;;;::::0;-1:-1:-1;6903:16:6::1;6876:43;;6943:7;6930;6938:1;6930:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;6963:79:::1;::::0;-1:-1:-1;;;6963:79:6;;-1:-1:-1;;;;;6963:18:6;::::1;::::0;::::1;::::0;:79:::1;::::0;6996:13;;7024:7;;6963:79:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7138:14;-1:-1:-1::0;;;;;7060:103:6::1;7114:9;;7089:10;7060:103;;;;;;;;;;5369:1802;;;;;5209:1962:::0;;;:::o;16020:203::-;16206:9;;-1:-1:-1;;;;;16181:22:6;;16134:4;16181:22;;;:6;:22;;;;;;16134:4;;16206:9;16163:40;;:15;:40;:::i;:::-;:52;;16020:203;-1:-1:-1;;16020:203:6:o;3016:160::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;3137:12:6::1;:31:::0;3016:160::o;1167:221:0:-;1258:7;-1:-1:-1;;;;;1050:31:0;;1028:111;;;;-1:-1:-1;;;1028:111:0;;;;;;;:::i;:::-;696:10:::1;::::0;-1:-1:-1;;;;;696:10:0::1;682;:24;660:106;;;;-1:-1:-1::0;;;660:106:0::1;;;;;;;:::i;:::-;1300:10:::2;:20:::0;;-1:-1:-1;;;;;;1300:20:0::2;-1:-1:-1::0;;;;;1300:20:0;::::2;::::0;;::::2;::::0;;;1338:42:::2;::::0;12011:51:7;;;1338:42:0::2;::::0;11999:2:7;11984:18;1338:42:0::2;;;;;;;;1167:221:::0;;:::o;14957:347:6:-;15123:7;15148:17;15168:69;15190:13;15218:8;15168:7;:69::i;:::-;-1:-1:-1;;;;;15257:22:6;;;;;;:9;:22;;;;;;;;:33;;;;;;;:39;;-1:-1:-1;;14957:347:6;;;;;:::o;16499:332::-;16694:7;16807:15;:11;16821:1;16807:15;:::i;:::-;16758:43;;;;;;11770:19:7;;;11805:12;;;11798:28;;;11842:12;;16758:43:6;;;;;;;;;;;;16748:54;;;;;;16740:63;;:83;;;;:::i;:::-;16726:97;;:11;:97;:::i;:::-;16719:104;16499:332;-1:-1:-1;;;;;16499:332:6:o;11192:1681::-;-1:-1:-1;;;;;11360:22:6;;;11394:3;11360:22;;;:7;:22;;;;;;;11338:116;;;;-1:-1:-1;;;11338:116:6;;21196:2:7;11338:116:6;;;21178:21:7;21235:2;21215:18;;;21208:30;21274;21254:18;;;21247:58;21322:18;;11338:116:6;20994:352:7;11338:116:6;11489:13;11467:12;11533:11;:9;:11::i;:::-;11514:30;;11606:8;-1:-1:-1;;;;;11579:35:6;:5;-1:-1:-1;;;;;11579:13:6;;11593:8;11579:23;;;;;;;;;;;;;15032:25:7;;15020:2;15005:18;;14886:177;11579:23:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11579:35:6;;11557:113;;;;-1:-1:-1;;;11557:113:6;;18610:2:7;11557:113:6;;;18592:21:7;18649:2;18629:18;;;18622:30;18688;18668:18;;;18661:58;18736:18;;11557:113:6;18408:352:7;11557:113:6;11683:17;11703:69;11725:13;11753:8;11703:7;:69::i;:::-;11683:89;;11785:20;11808:98;11835:9;11859:13;11887:8;11808:12;:98::i;:::-;11969:20;;;;:6;:20;;;;;:33;;;;12017:34;;;;;11785:121;;-1:-1:-1;11919:143:6;;11946:8;;11969:33;11919:12;:143::i;:::-;-1:-1:-1;;;;;12096:20:6;;;12075:18;12096:20;;;:9;:20;;;;;;;;:31;;;;;;;;:37;;12165;;;;;12250:19;;;;;;;;;;;:30;;;;;;;;;:36;12096:37;;12165;12237:49;;12215:140;;;;-1:-1:-1;;;12215:140:6;;20079:2:7;12215:140:6;;;20061:21:7;20118:2;20098:18;;;20091:30;20157:34;20137:18;;;20130:62;-1:-1:-1;;;20208:18:7;;;20201:39;20257:19;;12215:140:6;19877:405:7;12215:140:6;-1:-1:-1;;;;;12403:19:6;;;;;;:9;:19;;;;;;;;:30;;;;;;;;:36;;;12390:49;;12368:140;;;;-1:-1:-1;;;12368:140:6;;23122:2:7;12368:140:6;;;23104:21:7;23161:2;23141:18;;;23134:30;23200:34;23180:18;;;23173:62;-1:-1:-1;;;23251:18:7;;;23244:39;23300:19;;12368:140:6;22920:405:7;12368:140:6;-1:-1:-1;;;;;12528:20:6;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;12521:38;;;;;;;;;;12572:19;;;;;;;;;;;;:30;;;;;;;;:49;;;12632:36;:49;;;12694:6;:17;;;;;;:28;;-1:-1:-1;;;;;;12694:28:6;;;;;12740:125;;12011:51:7;;;12846:8:6;;12740:125;;;12572:19;;12740:125;;11984:18:7;12740:125:6;;;;;;;11327:1546;;;;;;11192:1681;;;:::o;3928:160::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;4049:12:6::1;:31:::0;;-1:-1:-1;;;;;;4049:31:6::1;-1:-1:-1::0;;;;;4049:31:6;;;::::1;::::0;;;::::1;::::0;;3928:160::o;2468:168::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;2593:14:6::1;:35:::0;;-1:-1:-1;;;;;;2593:35:6::1;-1:-1:-1::0;;;;;2593:35:6;;;::::1;::::0;;;::::1;::::0;;2468:168::o;2288:172::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;2415:15:6::1;:37:::0;;-1:-1:-1;;;;;;2415:37:6::1;-1:-1:-1::0;;;;;2415:37:6;;;::::1;::::0;;;::::1;::::0;;2288:172::o;7179:1865::-;858:10:0;849:20;;;;:8;:20;;;;;;;;;;;:28;;;827:113;;;;-1:-1:-1;;;827:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7399:22:6;;::::1;7433:3;7399:22:::0;;;:7:::1;:22;::::0;;;;;::::1;7377:123;;;::::0;-1:-1:-1;;;7377:123:6;;16683:2:7;7377:123:6::1;::::0;::::1;16665:21:7::0;16722:2;16702:18;;;16695:30;16761:34;16741:18;;;16734:62;-1:-1:-1;;;16812:18:7;;;16805:33;16855:19;;7377:123:6::1;16481:399:7::0;7377:123:6::1;7630:26;::::0;-1:-1:-1;;;7630:26:6;;::::1;::::0;::::1;15032:25:7::0;;;7538:13:6;;7584:11;;-1:-1:-1;;;;;7630:40:6;;::::1;::::0;:16;;::::1;::::0;::::1;::::0;15005:18:7;;7630:26:6::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7630:40:6::1;;7608:118;;;::::0;-1:-1:-1;;;7608:118:6;;18610:2:7;7608:118:6::1;::::0;::::1;18592:21:7::0;18649:2;18629:18;;;18622:30;18688;18668:18;;;18661:58;18736:18;;7608:118:6::1;18408:352:7::0;7608:118:6::1;7739:17;7759:69;7781:13;7809:8;7759:7;:69::i;:::-;7739:89;;7841:17;7861:68;7884:10;7909:9;7861:8;:68::i;:::-;:72;::::0;7932:1:::1;7861:72;:::i;:::-;7968:17;::::0;;;:6:::1;:17;::::0;;;;:26;7841:92;;-1:-1:-1;7968:26:6::1;;7946:105;;;::::0;-1:-1:-1;;;7946:105:6;;21553:2:7;7946:105:6::1;::::0;::::1;21535:21:7::0;21592:2;21572:18;;;21565:30;21631:31;21611:18;;;21604:59;21680:18;;7946:105:6::1;21351:353:7::0;7946:105:6::1;8087:19;::::0;8119:108:::1;::::0;-1:-1:-1;;;8119:108:6;;-1:-1:-1;;;;;12767:15:7;;;8119:108:6::1;::::0;::::1;12749:34:7::0;8188:4:6::1;12799:18:7::0;;;12792:43;12851:18;;;12844:34;;;8119:21:6;::::1;::::0;::::1;::::0;12684:18:7;;8119:108:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;8291:22:6;;::::1;8240:20;8291:22:::0;;;:7:::1;:22;::::0;;;;;;8374:54;;-1:-1:-1;;;8374:54:6;;::::1;::::0;::::1;15032:25:7::0;;;8291:22:6;::::1;::::0;8240:20;;8291:22;;8374:20:::1;::::0;15005:18:7;;8374:54:6::1;::::0;::::1;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8337:91;;;;8473:6;8441:8;:22;8450:12;8441:22;;;;;;;;;;;:29;;:38;;;;8523:8;8490;:22;8499:12;8490:22;;;;;;;;;;;:30;;:41;;;;8580:13;8542:8;:22;8551:12;8542:22;;;;;;;;;;;:35;;;:51;;;;;-1:-1:-1::0;;;;;8542:51:6::1;;;;;-1:-1:-1::0;;;;;8542:51:6::1;;;;;;8640:10;8604:8;:22;8613:12;8604:22;;;;;;;;;;;:33;;;:46;;;;;-1:-1:-1::0;;;;;8604:46:6::1;;;;;-1:-1:-1::0;;;;;8604:46:6::1;;;;;;8723:19;;8745:1;8723:23;8688:19;:58;;;;8870:8;8845:10;-1:-1:-1::0;;;;;8775:169:6::1;8801:6;8775:169;8822:8;8893:13;8921:12;8775:169;;;;;;;24066:25:7::0;;;-1:-1:-1;;;;;24127:32:7;;;;24122:2;24107:18;;24100:60;24191:2;24176:18;;24169:34;24054:2;24039:18;;23864:345;8775:169:6::1;;;;;;;;8957:79;8991:12;9018:7;8957:19;:79::i;:::-;7366:1678;;;;;;;;7179:1865:::0;;;;:::o;3365:148::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;3480:9:6::1;:25:::0;3365:148::o;3521:269::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;3658:20:6::1;::::0;::::1;;:28;;:20:::0;:28:::1;3636:108;;;::::0;-1:-1:-1;;;3636:108:6;;19720:2:7;3636:108:6::1;::::0;::::1;19702:21:7::0;19759:2;19739:18;;;19732:30;19798:32;19778:18;;;19771:60;19848:18;;3636:108:6::1;19518:354:7::0;3636:108:6::1;3757:9;:25:::0;3521:269::o;3798:122::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;3884:20:6::1;:28:::0;;-1:-1:-1;;3884:28:6::1;::::0;;3798:122::o;1396:160:0:-;696:10;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;1502:46:::1;1527:10;1502;:46::i;:::-;1396:160:::0;:::o;14737:212:6:-;-1:-1:-1;;;;;14901:22:6;;;;14869:7;14901:22;;;:9;:22;;;;;;;;:34;;;;;;;:40;;14737:212::o;15312:346::-;15477:7;15502:17;15522:69;15544:13;15572:8;15522:7;:69::i;:::-;-1:-1:-1;;;;;15611:22:6;;;;;;:9;:22;;;;;;;;:33;;;;;;;:39;;;;-1:-1:-1;;15312:346:6;;;;;:::o;4316:885::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;4635:14:6::1;::::0;;;:6:::1;:14;::::0;;;;;;;;:27:::1;::::0;::::1;:43:::0;;;4689:27:::1;::::0;::::1;:43:::0;;;4745:28:::1;::::0;::::1;:45:::0;;;4801:28:::1;::::0;::::1;:45:::0;;;4859:25:::1;::::0;::::1;:39:::0;;;4909:25:::1;::::0;::::1;:39:::0;;;4961:35;;;::::1;;-1:-1:-1::0;;4961:35:6;;::::1;::::0;::::1;::::0;;;5014:179;;25172:25:7;;;25213:18;;;25206:34;;;25256:18;;;25249:34;;;25314:2;25299:18;;25292:34;;;25357:3;25342:19;;25335:51;5014:179:6;;4635:14;;5014:179:::1;::::0;;;;;25159:3:7;5014:179:6;;::::1;4316:885:::0;;;;;;;;:::o;2644:176::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;2773:16:6::1;:39:::0;;-1:-1:-1;;;;;;2773:39:6::1;-1:-1:-1::0;;;;;2773:39:6;;;::::1;::::0;;;::::1;::::0;;2644:176::o;12881:512::-;858:10:0;849:20;;;;:8;:20;;;;;;;;;;;:28;;;827:113;;;;-1:-1:-1;;;827:113:0;;;;;;;:::i;:::-;13122:17:6::1;13142:69;13164:13;13192:8;13142:7;:69::i;:::-;13224:17;::::0;;;:6:::1;:17;::::0;;;;;;;:31;;-1:-1:-1;;;;;;13224:31:6::1;-1:-1:-1::0;;;;;13224:31:6;;;::::1;::::0;;::::1;::::0;;13268:22;;;:9:::1;:22:::0;;;;;:33;;;;;;;;;;;:53;;;-1:-1:-1;13332:39:6::1;:53:::0;-1:-1:-1;;;12881:512:6:o;1564:245:0:-;696:10;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;1691:11:::1;1686:116;1708:26;::::0;::::1;::::0;-1:-1:-1;1686:116:0::1;;;1760:30;1771:11;;1783:5;1771:18;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1760:10;:30::i;:::-;1736:7:::0;::::1;::::0;::::1;:::i;:::-;;;;1686:116;;;;1564:245:::0;;:::o;2178:176::-;696:10;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;2292:54:::1;2320:15;2292:13;:54::i;3184:173:6:-:0;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;3322:15:6::1;::::0;;;:6:::1;:15;::::0;;;;;:27;3184:173::o;2362:254:0:-;696:10;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;2493:11:::1;2488:121;2510:27;::::0;::::1;::::0;-1:-1:-1;2488:121:0::1;;;2563:34;2577:12;;2590:5;2577:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2563:13;:34::i;:::-;2539:7:::0;::::1;::::0;::::1;:::i;:::-;;;;2488:121;;16231:260:6::0;16404:78;;-1:-1:-1;;10114:2:7;10110:15;;;10106:53;16404:78:6;;;10094:66:7;10176:12;;;10169:28;;;16362:7:6;;10213:12:7;;16404:78:6;;;;;;;;;;;;16394:89;;;;;;16387:96;;16231:260;;;;:::o;15666:346::-;15832:4;15854:16;15873:99;15899:11;15925:13;15953:8;15873:11;:99::i;:::-;15992:12;;;15666:346;-1:-1:-1;;;;;15666:346:6:o;13401:664::-;13526:7;13555:20;13590:17;13622:19;13656:13;13684:19;13718:22;13755:25;13810:20;-1:-1:-1;;;;;13796:41:6;;13838:7;13796:50;;;;;;;;;;;;;15032:25:7;;15020:2;15005:18;;14886:177;13796:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13796:50:6;;;;;;;;;;;;:::i;:::-;13551:295;;;;;;;;;;;;;;14004:11;13864:162;;;;;;:::i;:::-;;;;;;;;13981:8;13864:162;;;;;;:::i;:::-;;;;;;;;13955:11;-1:-1:-1;;;;;13864:162:6;;13890:6;13911:9;13935:5;13864:162;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;14046:11:6;;13401:664;-1:-1:-1;;;;;;;;13401:664:6:o;4096:212::-;696:10:0;;-1:-1:-1;;;;;696:10:0;682;:24;660:106;;;;-1:-1:-1;;;660:106:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4255:22:6;;::::1;;::::0;;;:7:::1;:22;::::0;;;;:45;;-1:-1:-1;;;;;;4255:45:6::1;::::0;;;::::1;;::::0;;4096:212::o;2631:546:2:-;2834:4;2856:14;2873:171;2897:79;2934:27;2954:6;2934:19;:27::i;:::-;2897:18;:79::i;:::-;2873:171;;;;;;;;;;;;15717:25:7;;;;15790:4;15778:17;;15758:18;;;15751:45;15812:18;;;15805:34;;;15855:18;;;15848:34;;;15689:19;;2873:171:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2873:171:2;;-1:-1:-1;;2873:171:2;;;-1:-1:-1;;;;;;;3079:22:2;;3057:89;;;;-1:-1:-1;;;3057:89:2;;20489:2:7;3057:89:2;;;20471:21:7;20528:2;20508:18;;;20501:30;-1:-1:-1;;;20547:18:7;;;20540:47;20604:18;;3057:89:2;20287:341:7;3057:89:2;3168:4;-1:-1:-1;;;;;3158:14:2;:6;-1:-1:-1;;;;;3158:14:2;;3151:21;;;2631:546;;;;;;;:::o;1057:609:5:-;1218:12;1232:17;1253:6;-1:-1:-1;;;;;1253:11:5;366:92;;;;;;;;;;;;;;;;;342:127;;;;;;;1279:140;;-1:-1:-1;;;;;12767:15:7;;;1279:140:5;;;12749:34:7;12819:15;;12799:18;;;12792:43;12851:18;;;12844:34;;;12684:18;;1279:140:5;;;-1:-1:-1;;1279:140:5;;;;;;;;;;;;;;-1:-1:-1;;;;;1279:140:5;-1:-1:-1;;;;;;1279:140:5;;;;;;;;;;1253:177;;;;1279:140;1253:177;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1217:213;;;;1465:7;:129;;;;-1:-1:-1;1495:11:5;;:16;;:84;;;1548:4;1515:64;;;;;;;;;;;;:::i;:::-;1443:215;;;;-1:-1:-1;;;1443:215:5;;22717:2:7;1443:215:5;;;22699:21:7;22756:2;22736:18;;;22729:30;22795:34;22775:18;;;22768:62;-1:-1:-1;;;22846:18:7;;;22839:34;22890:19;;1443:215:5;22515:400:7;1443:215:5;1206:460;;1057:609;;;;:::o;3185:538:2:-;3228:14;3258:10;3280:4;3258:27;3255:437;;;3302:18;3323:8;;3302:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;3362:8:2;3551:17;3545:24;-1:-1:-1;;;;;3541:73:2;;-1:-1:-1;3255:437:2;;-1:-1:-1;3255:437:2;;-1:-1:-1;3670:10:2;3255:437;3185:538;:::o;14073:656:6:-;14222:13;;14218:198;;14287:14;;14345:16;;14252:152;;-1:-1:-1;;;;;14287:14:6;;;;14320:6;;14345:16;14380:9;14252:16;:152::i;:::-;14432:14;;14428:294;;14498:15;;14463:151;;-1:-1:-1;;;;;14498:15:6;14532:6;14565:4;14589:10;14463:16;:151::i;:::-;14654:15;;14685:25;;-1:-1:-1;;;14685:25:6;;;;;15032::7;;;-1:-1:-1;;;;;14654:15:6;;;;;;14685:13;;15005:18:7;;14685:25:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14448:274;14073:656;;;:::o;9052:2132::-;9180:15;9198:23;;;:8;:23;;;;;:31;;;;;9263:36;;;;;9331:34;;;;;9378:30;;;;;;;;-1:-1:-1;;;;;;9378:30:6;;;;;;;;;;;;9198:31;-1:-1:-1;;;;;9263:36:6;;;;9331:34;;;;9441:67;9263:36;9198:31;9441:7;:67::i;:::-;9421:87;;9521:17;9541:68;9564:10;9589:9;9541:8;:68::i;:::-;:72;;9612:1;9541:72;:::i;:::-;9633:17;;;;:6;:17;;;;;;;;9626:24;;-1:-1:-1;;;;;;9626:24:6;;;-1:-1:-1;;;;;9668:21:6;;;;:9;:21;;;;;:32;;;;;;;;9661:39;;;9626:24;9661:39;;;;;;9765:17;;;:6;:17;;;;;;:30;;;;9810:31;;;;;9521:92;;-1:-1:-1;9713:139:6;;9678:10;;9765:30;9713:12;:139::i;:::-;9941:17;;9865:126;;-1:-1:-1;;;9865:126:6;;9921:4;9865:126;;;12749:34:7;-1:-1:-1;;;;;9941:17:6;;;12799:18:7;;;12792:43;12851:18;;;12844:34;;;9865:33:6;;;;;;12684:18:7;;9865:126:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10055:21:6;;;10004:20;10055:21;;;:7;:21;;;;;;;;;;-1:-1:-1;10055:21:6;10121:20;10156:7;10178:41;10156:7;10055:21;10178:9;:41::i;:::-;:45;;10222:1;10178:45;:::i;:::-;10121:113;;-1:-1:-1;;;;;;10121:113:6;;;;;;;;;;24388:25:7;;;;24429:18;;;24422:34;24361:18;;10121:113:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10287:21:6;;;10247:15;10287:21;;;:7;:21;;;;;;10100:134;;-1:-1:-1;10247:15:6;10265:79;;10287:21;10100:134;10265:7;:79::i;:::-;10357:15;;;;:6;:15;;;;;;;;:28;;-1:-1:-1;;;;;;10357:28:6;-1:-1:-1;;;;;10357:28:6;;;;;;;;10398:21;;:9;:21;;;;;:30;;;;;;;;:48;;;10520:17;;;:6;:17;;;;;:28;;;;10563;;;;;10606:12;;10357:15;;-1:-1:-1;10496:163:6;;10633:15;10496:9;:163::i;:::-;-1:-1:-1;;;;;10457:21:6;;;;;;:9;:21;;;;;;;;:30;;;;;;;;:36;;;;:202;;;;10725:12;;;:16;;10697:44;;10798:16;;;;;;;;;;;10457:21;;:36;10798:16;;;;10457:21;10798:16;;;;;-1:-1:-1;10798:16:6;10765:49;;10844:10;10825:13;10839:1;10825:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10825:29:6;;;;:16;;;;;;;;;;;:29;10894:16;;;10908:1;10894:16;;;;;;;;;10867:24;;10894:16;;;;;;;;;;;;-1:-1:-1;10894:16:6;10867:43;;10934:7;10921;10929:1;10921:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;10954:79;;-1:-1:-1;;;10954:79:6;;-1:-1:-1;;;;;10954:18:6;;;;;:79;;10987:13;;11015:7;;10954:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11051:125:6;;-1:-1:-1;;;;;12029:32:7;;;12011:51;;11128:10:6;;-1:-1:-1;11051:125:6;;;-1:-1:-1;11081:7:6;;11051:125;;11999:2:7;11984:18;11051:125:6;;;;;;;9169:2015;;;;;;;;;;9052:2132;;:::o;1817:353:0:-;1915:10;-1:-1:-1;;;;;1050:31:0;;1028:111;;;;-1:-1:-1;;;1028:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1965:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:29;1943:114;;;::::0;-1:-1:-1;;;1943:114:0;;17490:2:7;1943:114:0::1;::::0;::::1;17472:21:7::0;17529:2;17509:18;;;17502:30;17568:34;17548:18;;;17541:62;-1:-1:-1;;;17619:18:7;;;17612:33;17662:19;;1943:114:0::1;17288:399:7::0;1943:114:0::1;-1:-1:-1::0;;;;;2070:20:0;::::1;;::::0;;;2093:4:::1;2070:20;::::0;;;;;;;;:27;;-1:-1:-1;;2070:27:0::1;::::0;;::::1;::::0;;;2115:47;;12011:51:7;;;2115:47:0::1;::::0;11984:18:7;2115:47:0::1;11865:203:7::0;2624:382:0;2730:15;-1:-1:-1;;;;;1050:31:0;;1028:111;;;;-1:-1:-1;;;1028:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2785:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;;;;;::::1;;:33;;;2763:117;;;::::0;-1:-1:-1;;;2763:117:0;;17087:2:7;2763:117:0::1;::::0;::::1;17069:21:7::0;17126:2;17106:18;;;17099:30;17165:34;17145:18;;;17138:62;-1:-1:-1;;;17216:18:7;;;17209:32;17258:19;;2763:117:0::1;16885:398:7::0;2763:117:0::1;-1:-1:-1::0;;;;;2893:25:0;::::1;2921:5;2893:25:::0;;;:8:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;2893:33:0::1;::::0;;2944:54;;12011:51:7;;;2944:54:0::1;::::0;11984:18:7;2944:54:0::1;11865:203:7::0;2253:370:2;2379:7;248:108;;;;;;;;;;;;;;;;;224:143;;;;;;;2496:12;;2527:11;;;;2567:24;;;;;2557:35;;;;;;2423:184;;;;;15299:25:7;;;15355:2;15340:18;;15333:34;;;;-1:-1:-1;;;;;15403:32:7;15398:2;15383:18;;15376:60;15467:2;15452:18;;15445:34;15286:3;15271:19;;15068:417;2423:184:2;;;;;;;;;;;;;2405:213;;;;;;2398:220;;2253:370;;;:::o;1290:180:1:-;1361:7;1427:20;907:15;;;835:92;1427:20;1398:63;;-1:-1:-1;;;1398:63:1;;;11474:27:7;11517:11;;;11510:27;;;;11553:12;;;11546:28;;;11590:12;;1398:63:1;11216:392:7;14:429;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;168:6;162:13;199:48;215:31;243:2;215:31;:::i;:::-;199:48;:::i;:::-;272:2;263:7;256:19;318:3;311:4;306:2;298:6;294:15;290:26;287:35;284:55;;;335:1;332;325:12;284:55;348:64;409:2;402:4;393:7;389:18;382:4;374:6;370:17;348:64;:::i;:::-;430:7;14:429;-1:-1:-1;;;;14:429:7:o;448:156::-;514:20;;574:4;563:16;;553:27;;543:55;;594:1;591;584:12;543:55;448:156;;;:::o;609:247::-;668:6;721:2;709:9;700:7;696:23;692:32;689:52;;;737:1;734;727:12;689:52;776:9;763:23;795:31;820:5;795:31;:::i;:::-;845:5;609:247;-1:-1:-1;;;609:247:7:o;861:251::-;931:6;984:2;972:9;963:7;959:23;955:32;952:52;;;1000:1;997;990:12;952:52;1032:9;1026:16;1051:31;1076:5;1051:31;:::i;1117:388::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;-1:-1:-1;1427:2:7;1412:18;;1399:32;1440:33;1399:32;1440:33;:::i;:::-;1492:7;1482:17;;;1117:388;;;;;:::o;1510:456::-;1587:6;1595;1603;1656:2;1644:9;1635:7;1631:23;1627:32;1624:52;;;1672:1;1669;1662:12;1624:52;1711:9;1698:23;1730:31;1755:5;1730:31;:::i;:::-;1780:5;-1:-1:-1;1837:2:7;1822:18;;1809:32;1850:33;1809:32;1850:33;:::i;:::-;1510:456;;1902:7;;-1:-1:-1;;;1956:2:7;1941:18;;;;1928:32;;1510:456::o;1971:525::-;2057:6;2065;2073;2081;2134:3;2122:9;2113:7;2109:23;2105:33;2102:53;;;2151:1;2148;2141:12;2102:53;2190:9;2177:23;2209:31;2234:5;2209:31;:::i;:::-;2259:5;-1:-1:-1;2316:2:7;2301:18;;2288:32;2329:33;2288:32;2329:33;:::i;:::-;1971:525;;2381:7;;-1:-1:-1;;;;2435:2:7;2420:18;;2407:32;;2486:2;2471:18;2458:32;;1971:525::o;2501:594::-;2596:6;2604;2612;2620;2628;2681:3;2669:9;2660:7;2656:23;2652:33;2649:53;;;2698:1;2695;2688:12;2649:53;2737:9;2724:23;2756:31;2781:5;2756:31;:::i;:::-;2806:5;-1:-1:-1;2863:2:7;2848:18;;2835:32;2876:33;2835:32;2876:33;:::i;:::-;2501:594;;2928:7;;-1:-1:-1;;;;2982:2:7;2967:18;;2954:32;;3033:2;3018:18;;3005:32;;3084:3;3069:19;;;3056:33;;-1:-1:-1;2501:594:7:o;3100:315::-;3168:6;3176;3229:2;3217:9;3208:7;3204:23;3200:32;3197:52;;;3245:1;3242;3235:12;3197:52;3284:9;3271:23;3303:31;3328:5;3303:31;:::i;:::-;3353:5;3405:2;3390:18;;;;3377:32;;-1:-1:-1;;;3100:315:7:o;3420:1014::-;3522:6;3530;3538;3546;3554;3607:3;3595:9;3586:7;3582:23;3578:33;3575:53;;;3624:1;3621;3614:12;3575:53;3663:9;3650:23;3682:31;3707:5;3682:31;:::i;:::-;3732:5;-1:-1:-1;3788:2:7;3773:18;;3760:32;3815:18;3804:30;;3801:50;;;3847:1;3844;3837:12;3801:50;3870:22;;3923:4;3915:13;;3911:27;-1:-1:-1;3901:55:7;;3952:1;3949;3942:12;3901:55;3988:2;3975:16;4013:48;4029:31;4057:2;4029:31;:::i;4013:48::-;4084:2;4077:5;4070:17;4124:7;4119:2;4114;4110;4106:11;4102:20;4099:33;4096:53;;;4145:1;4142;4135:12;4096:53;4200:2;4195;4191;4187:11;4182:2;4175:5;4171:14;4158:45;4244:1;4239:2;4234;4227:5;4223:14;4219:23;4212:34;4265:5;4255:15;;;;;4317:2;4306:9;4302:18;4289:32;4279:42;;4368:2;4357:9;4353:18;4340:32;4330:42;;4391:37;4423:3;4412:9;4408:19;4391:37;:::i;:::-;4381:47;;3420:1014;;;;;;;;:::o;4759:615::-;4845:6;4853;4906:2;4894:9;4885:7;4881:23;4877:32;4874:52;;;4922:1;4919;4912:12;4874:52;4962:9;4949:23;4991:18;5032:2;5024:6;5021:14;5018:34;;;5048:1;5045;5038:12;5018:34;5086:6;5075:9;5071:22;5061:32;;5131:7;5124:4;5120:2;5116:13;5112:27;5102:55;;5153:1;5150;5143:12;5102:55;5193:2;5180:16;5219:2;5211:6;5208:14;5205:34;;;5235:1;5232;5225:12;5205:34;5288:7;5283:2;5273:6;5270:1;5266:14;5262:2;5258:23;5254:32;5251:45;5248:65;;;5309:1;5306;5299:12;5248:65;5340:2;5332:11;;;;;5362:6;;-1:-1:-1;4759:615:7;;-1:-1:-1;;;;4759:615:7:o;5379:245::-;5446:6;5499:2;5487:9;5478:7;5474:23;5470:32;5467:52;;;5515:1;5512;5505:12;5467:52;5547:9;5541:16;5566:28;5588:5;5566:28;:::i;5629:180::-;5688:6;5741:2;5729:9;5720:7;5716:23;5712:32;5709:52;;;5757:1;5754;5747:12;5709:52;-1:-1:-1;5780:23:7;;5629:180;-1:-1:-1;5629:180:7:o;5814:1081::-;5968:6;5976;5984;5992;6000;6008;6016;6069:3;6057:9;6048:7;6044:23;6040:33;6037:53;;;6086:1;6083;6076:12;6037:53;6119:9;6113:16;6148:18;6189:2;6181:6;6178:14;6175:34;;;6205:1;6202;6195:12;6175:34;6228:61;6281:7;6272:6;6261:9;6257:22;6228:61;:::i;:::-;6218:71;;6329:2;6318:9;6314:18;6308:25;6298:35;;6373:2;6362:9;6358:18;6352:25;6342:35;;6417:2;6406:9;6402:18;6396:25;6386:35;;6464:3;6453:9;6449:19;6443:26;6430:39;;6478:31;6503:5;6478:31;:::i;:::-;6579:3;6564:19;;6558:26;6528:5;;-1:-1:-1;6596:16:7;;;6593:36;;;6625:1;6622;6615:12;6593:36;6648:63;6703:7;6692:8;6681:9;6677:24;6648:63;:::i;:::-;6638:73;;6757:3;6746:9;6742:19;6736:26;6720:42;;6787:2;6777:8;6774:16;6771:36;;;6803:1;6800;6793:12;6771:36;;6826:63;6881:7;6870:8;6859:9;6855:24;6826:63;:::i;:::-;6816:73;;;5814:1081;;;;;;;;;;:::o;7085:184::-;7155:6;7208:2;7196:9;7187:7;7183:23;7179:32;7176:52;;;7224:1;7221;7214:12;7176:52;-1:-1:-1;7247:16:7;;7085:184;-1:-1:-1;7085:184:7:o;7274:315::-;7342:6;7350;7403:2;7391:9;7382:7;7378:23;7374:32;7371:52;;;7419:1;7416;7409:12;7371:52;7455:9;7442:23;7432:33;;7515:2;7504:9;7500:18;7487:32;7528:31;7553:5;7528:31;:::i;7594:456::-;7671:6;7679;7687;7740:2;7728:9;7719:7;7715:23;7711:32;7708:52;;;7756:1;7753;7746:12;7708:52;7792:9;7779:23;7769:33;;7852:2;7841:9;7837:18;7824:32;7865:31;7890:5;7865:31;:::i;:::-;7915:5;-1:-1:-1;7972:2:7;7957:18;;7944:32;7985:33;7944:32;7985:33;:::i;:::-;8037:7;8027:17;;;7594:456;;;;;:::o;8055:248::-;8123:6;8131;8184:2;8172:9;8163:7;8159:23;8155:32;8152:52;;;8200:1;8197;8190:12;8152:52;-1:-1:-1;;8223:23:7;;;8293:2;8278:18;;;8265:32;;-1:-1:-1;8055:248:7:o;8308:245::-;8387:6;8395;8448:2;8436:9;8427:7;8423:23;8419:32;8416:52;;;8464:1;8461;8454:12;8416:52;-1:-1:-1;;8487:16:7;;8543:2;8528:18;;;8522:25;8487:16;;8522:25;;-1:-1:-1;8308:245:7:o;8558:385::-;8644:6;8652;8660;8668;8721:3;8709:9;8700:7;8696:23;8692:33;8689:53;;;8738:1;8735;8728:12;8689:53;-1:-1:-1;;8761:23:7;;;8831:2;8816:18;;8803:32;;-1:-1:-1;8882:2:7;8867:18;;8854:32;;8933:2;8918:18;8905:32;;-1:-1:-1;8558:385:7;-1:-1:-1;8558:385:7:o;8948:722::-;9067:6;9075;9083;9091;9099;9107;9115;9123;9176:3;9164:9;9155:7;9151:23;9147:33;9144:53;;;9193:1;9190;9183:12;9144:53;9229:9;9216:23;9206:33;;9286:2;9275:9;9271:18;9258:32;9248:42;;9337:2;9326:9;9322:18;9309:32;9299:42;;9388:2;9377:9;9373:18;9360:32;9350:42;;9439:3;9428:9;9424:19;9411:33;9401:43;;9491:3;9480:9;9476:19;9463:33;9453:43;;9543:3;9532:9;9528:19;9515:33;9505:43;;9598:3;9587:9;9583:19;9570:33;9612:28;9634:5;9612:28;:::i;:::-;9659:5;9649:15;;;8948:722;;;;;;;;;;;:::o;9675:257::-;9716:3;9754:5;9748:12;9781:6;9776:3;9769:19;9797:63;9853:6;9846:4;9841:3;9837:14;9830:4;9823:5;9819:16;9797:63;:::i;:::-;9914:2;9893:15;-1:-1:-1;;9889:29:7;9880:39;;;;9921:4;9876:50;;9675:257;-1:-1:-1;;9675:257:7:o;10236:274::-;10365:3;10403:6;10397:13;10419:53;10465:6;10460:3;10453:4;10445:6;10441:17;10419:53;:::i;:::-;10488:16;;;;;10236:274;-1:-1:-1;;10236:274:7:o;10515:415::-;10672:3;10710:6;10704:13;10726:53;10772:6;10767:3;10760:4;10752:6;10748:17;10726:53;:::i;:::-;10848:2;10844:15;;;;-1:-1:-1;;10840:53:7;10801:16;;;;10826:68;;;10921:2;10910:14;;10515:415;-1:-1:-1;;10515:415:7:o;12073:431::-;-1:-1:-1;;;;;12330:15:7;;;12312:34;;12382:15;;12377:2;12362:18;;12355:43;12434:2;12429;12414:18;;12407:30;;;12255:4;;12454:44;;12479:18;;12471:6;12454:44;:::i;12889:1178::-;13157:2;13169:21;;;13239:13;;13142:18;;;13261:22;;;13109:4;;13336;;13314:2;13299:18;;;13363:15;;;13109:4;13406:195;13420:6;13417:1;13414:13;13406:195;;;13485:13;;-1:-1:-1;;;;;13481:39:7;13469:52;;13541:12;;;;13576:15;;;;13517:1;13435:9;13406:195;;;-1:-1:-1;;;13637:19:7;;;13617:18;;;13610:47;13707:13;;13729:21;;;13805:15;;;;13768:12;;;13840:1;13850:189;13866:8;13861:3;13858:17;13850:189;;;13935:15;;13921:30;;14012:17;;;;13973:14;;;;13894:1;13885:11;13850:189;;;-1:-1:-1;14056:5:7;;12889:1178;-1:-1:-1;;;;;;;12889:1178:7:o;15893:217::-;16040:2;16029:9;16022:21;16003:4;16060:44;16100:2;16089:9;16085:18;16077:6;16060:44;:::i;16115:361::-;16320:2;16309:9;16302:21;16283:4;16340:44;16380:2;16369:9;16365:18;16357:6;16340:44;:::i;:::-;16415:2;16400:18;;16393:34;;;;-1:-1:-1;16458:2:7;16443:18;16436:34;16332:52;16115:361;-1:-1:-1;16115:361:7:o;17692:354::-;17894:2;17876:21;;;17933:2;17913:18;;;17906:30;17972:32;17967:2;17952:18;;17945:60;18037:2;18022:18;;17692:354::o;20633:356::-;20835:2;20817:21;;;20854:18;;;20847:30;20913:34;20908:2;20893:18;;20886:62;20980:2;20965:18;;20633:356::o;21709:399::-;21911:2;21893:21;;;21950:2;21930:18;;;21923:30;21989:34;21984:2;21969:18;;21962:62;-1:-1:-1;;;22055:2:7;22040:18;;22033:33;22098:3;22083:19;;21709:399::o;25397:275::-;25468:2;25462:9;25533:2;25514:13;;-1:-1:-1;;25510:27:7;25498:40;;25568:18;25553:34;;25589:22;;;25550:62;25547:88;;;25615:18;;:::i;:::-;25651:2;25644:22;25397:275;;-1:-1:-1;25397:275:7:o;25677:186::-;25725:4;25758:18;25750:6;25747:30;25744:56;;;25780:18;;:::i;:::-;-1:-1:-1;25846:2:7;25825:15;-1:-1:-1;;25821:29:7;25852:4;25817:40;;25677:186::o;25868:128::-;25908:3;25939:1;25935:6;25932:1;25929:13;25926:39;;;25945:18;;:::i;:::-;-1:-1:-1;25981:9:7;;25868:128::o;26001:125::-;26041:4;26069:1;26066;26063:8;26060:34;;;26074:18;;:::i;:::-;-1:-1:-1;26111:9:7;;26001:125::o;26131:258::-;26203:1;26213:113;26227:6;26224:1;26221:13;26213:113;;;26303:11;;;26297:18;26284:11;;;26277:39;26249:2;26242:10;26213:113;;;26344:6;26341:1;26338:13;26335:48;;;26379:1;26370:6;26365:3;26361:16;26354:27;26335:48;;26131:258;;;:::o;26394:175::-;26431:3;26475:4;26468:5;26464:16;26504:4;26495:7;26492:17;26489:43;;;26512:18;;:::i;:::-;26561:1;26548:15;;26394:175;-1:-1:-1;;26394:175:7:o;26574:209::-;26606:1;26632;26622:132;;26676:10;26671:3;26667:20;26664:1;26657:31;26711:4;26708:1;26701:15;26739:4;26736:1;26729:15;26622:132;-1:-1:-1;26768:9:7;;26574:209::o;26788:127::-;26849:10;26844:3;26840:20;26837:1;26830:31;26880:4;26877:1;26870:15;26904:4;26901:1;26894:15;26920:127;26981:10;26976:3;26972:20;26969:1;26962:31;27012:4;27009:1;27002:15;27036:4;27033:1;27026:15;27052:127;27113:10;27108:3;27104:20;27101:1;27094:31;27144:4;27141:1;27134:15;27168:4;27165:1;27158:15;27184:131;-1:-1:-1;;;;;27259:31:7;;27249:42;;27239:70;;27305:1;27302;27295:12;27320:118;27406:5;27399:13;27392:21;27385:5;27382:32;27372:60;;27428:1;27425;27418:12

Swarm Source

ipfs://429d5fc54bbb848bd01a49a2f82b7daa85127b5d95f6afd81a49a364fbb17de1
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.