Contract 0xC9a67eD1472A76d064C826B54c144Ca00DAE4015

 
Ad
Ad
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x27bccf0f7d9cd0ff84114f97eee13c47a1374bd4741989dd27dc91eb7133fe81Execute Meta Tra...218952202021-11-28 10:10:5755 mins ago0x24e2d55d5ab48093ee196b7b65eb456dcdfca369 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017283483
0xeaf2e7c7322ebbaae70679827a886912dc12915235ffb9e5dad9650adf32db96Execute Meta Tra...218948042021-11-28 9:52:101 hr 13 mins ago0xefe2897665a7ca382b9079edeb4a4dbd85d0d939 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017565975
0xedf2910e5f197825ae194263732e7a665bf773a93002b3525b42b3b96a02a7eaUpgrade Token218941032021-11-28 9:28:041 hr 37 mins ago0x1710c9e0a329660e566ee4e4c269b06b69ae3da1 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1264704
0xbf88292d3e4689d9aa21677bc7cec52a04bfce03cd2cf97e416ed52b0fe6c52bExecute Meta Tra...218924302021-11-28 8:26:162 hrs 39 mins ago0x7e90a4ed8cd922d29315edb3b583d13dfd50aac2 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.015290079
0x5a757f8ae0265da8d8853be8dbff918dd352e831221fa3a0b7ff1846d812001bExecute Meta Tra...218924022021-11-28 8:25:162 hrs 40 mins ago0xfecf70181d62466aa28913627370b94e9ac746bf IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.019559379
0xa73072321b0c283f6bf8cc8ebb376380640eac3af7a4c1484753a63d528b89f7Execute Meta Tra...218920282021-11-28 8:10:162 hrs 55 mins ago0x7253c014a303ba1b811e42624c3891f6dca3dff8 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017565975
0xe5c7d03179e8d86656020eb2f950726303c8c9358c9881f75f5d95f6a945064fUpgrade Token218912062021-11-28 7:42:043 hrs 23 mins ago0xd51687a86eba69ae8a5358054129408535c54781 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1235304
0xeff113b91acb575e3d756d4788a2b1a706656be4ad732bc8e6b634877c14203cExecute Meta Tra...218906772021-11-28 7:21:183 hrs 44 mins ago0x91b282c9d2285f24e9ba43e43d12be9ccc85145e IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017288271
0xaa7dd9d8f53adfcf25b45df680a54f75a1d25f3793fb8db82e513b80fbb2038aExecute Meta Tra...218906562021-11-28 7:20:363 hrs 45 mins ago0x5cf5f873ade0874e39f092c443f753776a7d523b IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017567571
0x0ba73a577ac23442bc4232af3bf513c9393922ce6ea4918cd4208b884bea9697Execute Meta Tra...218901362021-11-28 7:02:444 hrs 3 mins ago0x9eda582d77a1fdba48925975dec1c79b4ba554a3 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017565975
0x69f360972959f61812b07e604ddcf8a84c17be9fff5327c8b03c0c44ecd10fcbExecute Meta Tra...218872812021-11-28 5:15:585 hrs 50 mins ago0x4f5494e4fa6a8d96edc33748e195d3a5a9c3684f IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.019560975
0x5150390134cd38883bd26bbfcb248e45af7027ca3c29a7f5600f05fc178b8520Execute Meta Tra...218867652021-11-28 4:56:066 hrs 9 mins ago0x0ad44590669ccd4f8993bbfb035a42f045f2786f IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017288271
0xaad97f6a73fa75b76de68f8d0ff113bb9b3bf044d04a90fc6f2a89d8a0e9ca44Execute Meta Tra...218867562021-11-28 4:55:486 hrs 10 mins ago0x9bc5a62d832fdb6980f1e505079ceea155080e5b IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.019562571
0xeddacac0eeb5d58b3657d8614228673ec4944d2cd76db8b26f6b160ad653ea9dUpgrade Token218853242021-11-28 4:04:267 hrs 1 min ago0xdc5b5ac8d6147e6e26fd614facf9cb7fdfb6401b IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1235268
0xfd0596435bf302373762c5b298b763fa8515280ef8dbdef47a287dea0790defdExecute Meta Tra...218852952021-11-28 4:03:247 hrs 2 mins ago0x8fd9d6a0f9a37cd4a7f4c4d609326d88b530fa6d IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017285079
0x4189ad1549afca1da00abe2c69a538b12fe2fa15eed082e7185e1372e3a4362cExecute Meta Tra...218851672021-11-28 3:56:527 hrs 9 mins ago0x24e2d55d5ab48093ee196b7b65eb456dcdfca369 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.019562571
0x655114c0823f23a986220e807b9c824bc4fb315855550e4b65c90e8fb115d66eExecute Meta Tra...218814652021-11-28 1:38:459 hrs 27 mins ago0x2ece270d5a1c3e5bc95712fb960ccec9db5e9290 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.01429857
0xcad2b7d84b0ac0219542b3fd9a37c897402a5c755cca74a393cc96b07e8c5478Upgrade Token218801782021-11-28 0:49:4010 hrs 16 mins ago0x6b2ac8529e56d49a9c277aaaaf5102eb7ee9567e IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1264704
0x700fc285acd19e48b27f524f0633e0a5d3a343e712265839573df713f4847bd9Execute Meta Tra...218801222021-11-28 0:46:0210 hrs 20 mins ago0x7f208b8adc1271b35072dc77015828d959d53109 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.019560975
0x56087e624fcd51e78cfaefe87c0828011f4201b21560c8b0935e4433741a5dbaUpgrade Token218793532021-11-28 0:15:1410 hrs 50 mins ago0x461c839107d5f8bc51d3e33f413e3bbfa0655158 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1190304
0x1061f581b0c3e2418c3acba8791aad217eb00951474d36eff42354c253f8e1dbUpgrade Token218792792021-11-28 0:12:4010 hrs 53 mins ago0xc8f214d0e193a799191424a79cd27adce45e8db7 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1264704
0x0c0fccebe14c649a07c077450b280e4227a819218d803b8d7ff8ed763c7e53d2Upgrade Token218792402021-11-28 0:11:2210 hrs 54 mins ago0x6b2ac8529e56d49a9c277aaaaf5102eb7ee9567e IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1235304
0x578979798299f00b837a7c631941a3216ffafbffd4427fafc6724acf9b63e349Upgrade Token218792222021-11-28 0:10:4210 hrs 55 mins ago0x78660008ab2136fb71f97d0fcd6469aeae054656 IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1190304
0x44fd738ebd9e5b9b3fcfe505bc2fa94f117db9426b40ca1466460f0857945c4aUpgrade Token218784532021-11-27 23:39:5811 hrs 26 mins ago0xb6d21a2261e3a8f74fabf341909b7296049573eb IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.1264704
0x212e1d68ce8f1bb1cc1a9f6166a9e674a3cf732ca734c2236df170f789569a27Execute Meta Tra...218773842021-11-27 22:59:1812 hrs 6 mins ago0x0b1c215ad51a784d028be4acd5da8f274292d59e IN  0xc9a67ed1472a76d064c826b54c144ca00dae40150 MATIC0.017288271
[ 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.