contract XID is MiniMeToken {
  uint256 constant D160 = 0x0010000000000000000000000000000000000000000;
  mapping(address => bool) paid;

  function XID(address _tokenFactory)
      MiniMeToken(
        _tokenFactory,
        0x0,          // no parent token
        0,            // no snapshot block number from parent
        "Sphre AIR",  // Token name
        8,            // Decimals
        "XID",        // Symbol
        true          // Enable transfers
      ) {}

  // data is an array of uint256s. Each uint256 represents a transfer.
  // The 160 LSB is the destination of the address that wants to be sent
  // The 96 MSB is the amount of tokens that wants to be sent.
  function multiMint(uint256[] _data) public onlyController {
    for (uint256 i = 0; i < _data.length; i++) {
      address addr = address(_data[i] & (D160 - 1));
      if(!paid[addr]) {
        uint256 amount = _data[i] / D160;

        assert(generateTokens(addr, amount));
        paid[addr] = true;
      }
    }
  }
}
function multiMint(uint256[] _data) public onlyController {
  for (uint256 i = 0; i < _data.length; i++) {
    address addr = address(_data[i] & (D160 - 1));
    if(!paid[addr]) {
      uint256 amount = _data[i] / D160;

      assert(generateTokens(addr, amount));
      paid[addr] = true;
    }
  }
}

// data is an array of uint256s. Each uint256 represents a transfer.
// The 160 LSB is the destination of the address that wants to be sent
// The 96 MSB is the amount of tokens that wants to be sent.