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

/*            
                      
........~BY:^PB~............................................................................~?5B##B?
......:?#&&B#&&#?!!~^:...................................................................:?G&&&&&&&&
....~YB&&&&&&&&&@&&&&#G5?~:............................................................:J#@&&&&&&@&J
...:B@&&&&&&&&&&&&&&&&&@@&#P?~........................................................!B@&&&&&@&#5~.
.:Y#&&&&&&&&&&&&&&&&&&&&&&&@@&BY!:..................................................:Y&&&&@&#PJ!:...
.^B@@&&&&&&&&&&&&&&&&&&&&&&&&&&@&B5!:..............................................:P@&&&BY!:.......
..:!Y&@@&&&&@&&&&&&&&&&&&&&&&&&&&&@&B5!:..........................................:G@&@G7:..........
.....^?J7~~!Y#&&&&&&&&&&&&&&&&&&&&&&&@&BY~........................................P@&#?.............
...........  5@&&&&&&&&&&&&&&&&&&&&&&&&&@&P7:....................................Y@@B~..............
.:!YPGBBBGG5P&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@&BY~.................................Y@@B^...............
JB&@&@@@@&&@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@&G?^.............................Y&@B^................
#@&&&#J5B&&@&&&&&&&&&&&&@&&@&&&&&&&&&&&&&&&&&&&&@#P7:........................^P@@B^.................
~5B##? .:^7YPB#&@@@@@@&#P!^Y#@&&&&&&&&&&&&&&&&&&&&@&BY~:...................:?#@@#~..................
..:^:........:^!7?JYJ?7^....^JB&@&&&&&&&&&&&&&&&&&&&&@&B5?~:.............^JB@&@G^...................
..............................:7P#@@&&&&&&&&&&&&&&&&&&&&@@&BGY?7!~~~~!?YG&@@@&Y:....................
.................................^?P#&@@&&&&&&&&&&&&&&&&&&&&&@@&&&&&&&@@&&&BY^......................
....................................:!JPB#&&@@@@@@@@@&&&&&&&&&&&&&&&&&&&&P!:........................
........................................:^~7?JY55PPPPPG#&@&&&&&&&&&&&&&&&#5:........................
.......................................................:~?P&@&&&&&&&&&&&&&@G:.......................
...........................................................~Y&&&&&&&&&&&&&&@Y.......................
.............................................................~P@&&&&&&&&&&&&#^......................
...............................................................Y&&&&&&&&&&&&@?......................
................................................................5@&&&&&&&&&&@P......................
................................................................:G@&&&&&&&&&&B:.....................
.................................................................^G@&&&&&&&&&#^.....................
..................................................................:Y&&&&&&&&&&~.....................
....................................................................7#@&&&&&&&!.....................
.....................................................................^5&@&&&&&P.....................
.......................................................................~P&@&&&&G!:..................
.........................................................................~Y#&@&&&B5~................
...........................................................................:!5#&&&@P................
............................................................................. ?@&&&#:...............
..............................................................................Y@&&&@5...............
..............................................................................5@&&&&@5..............
..............................................................................7@&&&&&J..............
...............................................................................Y&&&&&!..............
................................................................................!P#&&7..............
                                                                                        
*/
                                         

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

interface IERC721 {
    function transferFrom(address, address, uint256) external;
}
contract MaterializerBurn is Ownable, ReentrancyGuard {
    event Materialized(address user, uint256[] tokenIds);

    address public MaterializerContract = 0xD7504d848d3b83F0B0D2ef67F1ca14Ec13F05904;
    IERC721 public Materializer = IERC721(MaterializerContract);

    constructor() {
    }

    function burnMaterializer(uint256[] calldata _tokenIds) external nonReentrant {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            Materializer.transferFrom(msg.sender, 0x000000000000000000000000000000000000dEaD, _tokenIds[i]);
        }
        emit Materialized(msg.sender, _tokenIds);
    }

    function setMaterializerContract(address _contract) external onlyOwner {
        MaterializerContract = _contract;
        Materializer = IERC721(_contract);
    }

    function withdrawMoney() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Withdraw failed.");
    }
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"Materialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"Materializer","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaterializerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"burnMaterializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setMaterializerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]