old_contents: from __future__ import print_function, division, absolute_import
  from fontTools.misc.py23 import *
  from . import DefaultTable
  import struct
  
  tsi0Format = '>HHl'
  
  def fixlongs(glyphID, textLength, textOffset):
  	return int(glyphID), int(textLength), textOffset
  
  
  class table_T_S_I__0(DefaultTable.DefaultTable):
  
  	dependencies = ["TSI1"]
  
  	def decompile(self, data, ttFont):
  		numGlyphs = ttFont['maxp'].numGlyphs
  		indices = []
  		size = struct.calcsize(tsi0Format)
  		for i in range(numGlyphs + 5):
  			glyphID, textLength, textOffset = fixlongs(*struct.unpack(tsi0Format, data[:size]))
  			indices.append((glyphID, textLength, textOffset))
  			data = data[size:]
  		assert len(data) == 0
  		assert indices[-5] == (0XFFFE, 0, -1409540300), "bad magic number"  # 0xABFC1F34
  		self.indices = indices[:-5]
  		self.extra_indices = indices[-4:]
  
  	def compile(self, ttFont):
  		if not hasattr(self, "indices"):
  			# We have no corresponding table (TSI1 or TSI3); let's return
  			# no data, which effectively means "ignore us".
  			return ""
  		data = b""
  		for index, textLength, textOffset in self.indices:
  			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
  		data = data + struct.pack(tsi0Format, 0XFFFE, 0, -1409540300)  # 0xABFC1F34
  		for index, textLength, textOffset in self.extra_indices:
  			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
  		return data
  
  	def set(self, indices, extra_indices):
  		# gets called by 'TSI1' or 'TSI3'
  		self.indices = indices
  		self.extra_indices = extra_indices
  
  	def toXML(self, writer, ttFont):
  		writer.comment("This table will be calculated by the compiler")
  		writer.newline()
  
new_contents: from __future__ import print_function, division, absolute_import
  from fontTools.misc.py23 import *
  from . import DefaultTable
  import struct
  
  tsi0Format = '>HHL'
  
  def fixlongs(glyphID, textLength, textOffset):
  	return int(glyphID), int(textLength), textOffset
  
  
  class table_T_S_I__0(DefaultTable.DefaultTable):
  
  	dependencies = ["TSI1"]
  
  	def decompile(self, data, ttFont):
  		numGlyphs = ttFont['maxp'].numGlyphs
  		indices = []
  		size = struct.calcsize(tsi0Format)
  		for i in range(numGlyphs + 5):
  			glyphID, textLength, textOffset = fixlongs(*struct.unpack(tsi0Format, data[:size]))
  			indices.append((glyphID, textLength, textOffset))
  			data = data[size:]
  		assert len(data) == 0
  		assert indices[-5] == (0XFFFE, 0, 0xABFC1F34), "bad magic number"
  		self.indices = indices[:-5]
  		self.extra_indices = indices[-4:]
  
  	def compile(self, ttFont):
  		if not hasattr(self, "indices"):
  			# We have no corresponding table (TSI1 or TSI3); let's return
  			# no data, which effectively means "ignore us".
  			return ""
  		data = b""
  		for index, textLength, textOffset in self.indices:
  			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
  		data = data + struct.pack(tsi0Format, 0XFFFE, 0, 0xABFC1F34)
  		for index, textLength, textOffset in self.extra_indices:
  			data = data + struct.pack(tsi0Format, index, textLength, textOffset)
  		return data
  
  	def set(self, indices, extra_indices):
  		# gets called by 'TSI1' or 'TSI3'
  		self.indices = indices
  		self.extra_indices = extra_indices
  
  	def toXML(self, writer, ttFont):
  		writer.comment("This table will be calculated by the compiler")
  		writer.newline()
  
subject: use unsigned 'L' instead of signed 'l' as textOffset format