[prev in list] [next in list] [prev in thread] [next in thread] 

List:       koffice-devel
Subject:    Regarding mso ppttoxml parse trailing byte error
From:       amit aggarwal <amitcs06 () gmail ! com>
Date:       2010-03-28 8:23:01
Message-ID: 203ea2fe1003280111u445f24f8i46f693160aab04a7 () mail ! gmail ! com
[Download RAW message or body]

Hello,

I am facing in ppttoxml trailing bytes error for the attached ppt.
During analysis found couple of error in mso.xml but still not able to
found the correct problem.

10601   SlideProgTagsContainer "RecordHeader:recVer: 15(F),
recInstance: 0(0), recType: 5000(1388), recLen: 101(65), "
10609   SlideProgBinaryTagContainer "RecordHeader:recVer: 15(F),
recInstance: 0(0), recType: 5002(138A), recLen: 41(29), "
10617   PP10SlideBinaryTagExtension "RecordHeader:recVer: 0(0),
recInstance: 0(0), recType: 4026(FBA), recLen: 16(10), "
10641   PP10SlideBinaryTagExtension "RecordHeader:recVer: 0(0),
recInstance: 0(0), recType: 4026(FBA), recLen: 16(10), "
188954 trailing bytes in stream  "PowerPoint Document"

Please help me for the same.
-- 
Thanks
Amit Aggarwal

["test.ppt" (application/vnd.ms-powerpoint)]
["mso.xml" (text/xml)]

<?xml version="1.0" encoding="UTF-8"?>
<mso xmlns="http://www.example.org/mso" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  \
xsi:schemaLocation="http://www.example.org/mso mso.xsd">  <struct \
name="RecordHeader">  <uint4 name="recVer" />
		<uint12 name="recInstance" />
		<uint16 name="recType">
			<!--
					this limitation helps debugging
				-->
			<limitation expression="&gt;0" />
		</uint16>
		<uint32 name="recLen" />
	</struct>
	<struct name="CurrentUserAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FF6" />
		</type>
		<uint32 name="size">
			<limitation value="0x14" />
		</uint32>
		<uint32 name="headerToken">
			<limitation value="0xE391C05F|0xF3D1C4DF" />
		</uint32>
		<uint32 name="offsetToCurrentEdit" />
		<uint16 name="lenUserName">
			<limitation expression="&lt;=255" />
		</uint16>
		<uint16 name="docFileVersion">
			<limitation value="0x03F4" />
		</uint16>
		<uint8 name="majorVersion">
			<limitation value="0x03" />
		</uint8>
		<uint8 name="minorVersion">
			<limitation value="0x00" />
		</uint8>
		<uint16 name="unused" />
		<uint8 name="ansiUserName" count="lenUserName" />
		<uint32 name="relVersion">
			<limitation value="0x8|0x9" />
		</uint32>
		<uint16 name="unicodeUserName" count="lenUserName"
			condition="rh.recLen&gt;3*lenUserName+0x18" />
		<uint8 name="unknown" count="rh.recLen-0x18-3*lenUserName"
			condition="rh.recLen-0x18-3*lenUserName&gt;0" />
	</struct>
	<struct name="TODOS">
		<type name="anon" type="Byte" array="true" />
	</struct>
	<struct name="Byte">
		<uint8 name="b" />
	</struct>
	<struct name="CurrentUserStream">
		<type name="anon1" type="CurrentUserAtom" />
		<type name="trailing" type="Byte" array="true" />
	</struct>
	<struct name="PicturesStream">
		<type name="anon1" type="OfficeArtBStoreDelay" />
		<type name="trailing" type="Byte" array="true" />
	</struct>
	<struct name="OfficeArtBStoreDelay">
		<type name="anon1" array="true" type="OfficeArtBStoreContainerFileBlock" />
	</struct>
	<struct name="OfficeArtRecordHeader">
		<uint4 name="recVer" />
		<uint12 name="recInstance" />
		<uint16 name="recType" />
		<uint32 name="recLen" />
	</struct>
	<struct name="OfficeArtFBSE">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x2" />
			<limitation name="recInstance" value="0|1|2|3|4|5|6|7|0x11|0x12" />
			<!--
				<limitation name="recInstance"
				value="0xF01A|0xF01B|0xF01C|0xF01D|0xF01E|0xF01F|0xF029" />
			-->
			<limitation name="recType" value="0xF007" />
		</type>
		<uint8 name="btWin32" />
		<uint8 name="btMacOS" />
		<uint8 name="rgbUid" count="16" />
		<uint16 name="tag" />
		<uint32 name="size" />
		<uint32 name="cRef" />
		<uint32 name="foDelay" />
		<uint8 name="unused1" />
		<uint8 name="cbName" />
		<uint8 name="unused2" />
		<uint8 name="unused3" />
		<uint8 name="nameData" count="cbName" condition="cbName&gt;0" />
		<type name="embeddedBlip" type="OfficeArtBlip" condition="rh.recLen &gt; 36 + \
cbName">  <!--
				this limitation is currently not supported because it requires
				dynamic introspection <limitation name="rh.recInstance"
				value="rh.recInstance" />
			-->
		</type>
	</struct>
	<struct name="OfficeArtBlipEMF">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x3D4|0x3D5" />
			<limitation name="recType" value="0xF01A" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x3D5" />
		<type name="metafileHeader" type="OfficeArtMetafileHeader" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x3D4)?50:66)" />
	</struct>
	<struct name="OfficeArtBlipWMF">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x216|0x217" />
			<limitation name="recType" value="0xF01B" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x217" />
		<type name="metafileHeader" type="OfficeArtMetafileHeader" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x216)?50:66)" />
	</struct>
	<struct name="OfficeArtBlipPICT">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x542|0x543" />
			<limitation name="recType" value="0xF01C" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x543" />
		<type name="metafileHeader" type="OfficeArtMetafileHeader" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x542)?50:66)" />
	</struct>
	<struct name="OfficeArtBlipJPEG">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x46A|0x46B|0x6E2|0x6E3" />
			<limitation name="recType" value="0xF01D" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16"
			condition="rh.recInstance == 0x46B || rh.recInstance == 0x6E3" />
		<uint8 name="tag" />
		<uint8 name="BLIPFileData"
			count="rh.recLen-((rh.recInstance == 0x46A || rh.recInstance == 0x6E2)?17:33)" />
	</struct>
	<struct name="OfficeArtBlipPNG">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x6E0|0x6E1" />
			<limitation name="recType" value="0xF01E" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x6E1" />
		<uint8 name="tag" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x6E0)?17:33)" />
	</struct>
	<struct name="OfficeArtBlipDIB">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x7A8|0x7A9" />
			<limitation name="recType" value="0xF01F" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x7A9" />
		<uint8 name="tag" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x7A8)?17:33)" />
	</struct>
	<struct name="OfficeArtBlipTIFF">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x6E4|0x6E5" />
			<limitation name="recType" value="0xF020" />
		</type>
		<uint8 name="rgbUid1" count="16" />
		<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x6E5" />
		<uint8 name="tag" />
		<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x6E4)?17:33)" />
	</struct>
	<struct name="OfficeArtMetafileHeader">
		<uint32 name="cbSize" />
		<type name="rcBounds" type="RECT" />
		<type name="ptSize" type="POINT" />
		<uint32 name="cbsave" />
		<uint8 name="compression" />
		<uint8 name="filter" />
	</struct>
	<struct name="RECT">
		<int32 name="left" />
		<int32 name="top" />
		<int32 name="right" />
		<int32 name="bottom" />
	</struct>
	<struct name="POINT">
		<int32 name="x" />
		<int32 name="y" />
	</struct>
	<struct name="OfficeArtBlip">
		<choice name="anon">
			<type type="OfficeArtBlipEMF" />
			<type type="OfficeArtBlipWMF" />
			<type type="OfficeArtBlipPICT" />
			<type type="OfficeArtBlipJPEG" />
			<type type="OfficeArtBlipPNG" />
			<type type="OfficeArtBlipDIB" />
			<type type="OfficeArtBlipTIFF" />
		</choice>
	</struct>
	<struct name="OfficeArtBStoreContainerFileBlock">
		<choice name="anon">
			<type type="OfficeArtFBSE" />
			<type type="OfficeArtBlip" />
		</choice>
	</struct>
	<struct name="PowerPointStructs">
		<type name="anon" type="PowerPointStruct" array="true" />
	</struct>
	<struct name="PowerPointStruct">
		<choice name="anon">
			<type type="DocumentContainer" />
			<type type="MasterOrSlideContainer" />
			<type type="PersistDirectoryAtom" />
			<type type="NotesContainer" />
			<type type="HandoutContainer" />
			<type type="SlideContainer" />
			<type type="ExOleObjStg" />
			<type type="ExControlStg" />
			<type type="VbaProjectStg" />
			<type type="UserEditAtom" />
		</choice>
	</struct>
	<struct name="DocumentContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03E8" />
		</type>
		<type name="documentAtom" type="DocumentAtom" />
		<type name="exObjList" type="ExObjListContainer" optional="true" />
		<type name="documentTextInfo" type="DocumentTextInfoContainer" />
		<type name="soundCollection" type="SoundCollectionContainer"
			optional="true" />
		<type name="drawingGroup" type="DrawingGroupContainer" />
		<type name="masterList" type="MasterListWithTextContainer" />
		<type name="docInfoList" type="DocInfoListContainer" optional="true" />
		<type name="slideHF" type="SlideHeadersFootersContainer"
			optional="true" />
		<type name="notesHF" type="NotesHeadersFootersContainer"
			optional="true" />
		<type name="slideList" type="SlideListWithTextContainer"
			optional="true" />
		<!--
			occurrence of a SlideHeadersFootersContainer after slideList is not
			documented
		-->
		<type name="slideHF2" type="SlideHeadersFootersContainer"
			optional="true" />
		<type name="notesList" type="NotesListWithTextContainer"
			optional="true" />
		<type name="slideShowDocInfoAtom" type="SlideShowDocInfoAtom"
			optional="true" />
		<type name="namedShows" type="NamedShowsContainer" optional="true" />
		<type name="summary" type="SummaryContainer" optional="true" />
		<type name="docRoutingSlipAtom" type="DocRoutingSlipAtom"
			optional="true" />
		<type name="printOptionsAtom" type="PrintOptionsAtom" optional="true" />
		<type name="unknown0" type="UnknownDocumentContainerChild" array="true" />
		<type name="rtCustomTableStylesAtom1" type="RoundTripCustomTableStyles12Atom"
			optional="true" />
		<type name="unknown1" type="UnknownDocumentContainerChild" array="true" />
		<type name="endDocumentAtom" type="EndDocumentAtom" />
		<type name="unknown2" type="UnknownDocumentContainerChild" array="true" />
		<type name="rtCustomTableStylesAtom2" type="RoundTripCustomTableStyles12Atom"
			optional="true" />
		<type name="unknown4" type="UnknownDocumentContainerChild" array="true" />
		<type name="unknown5" type="TextMasterStyle10Atom" optional="true" />
	</struct>
	<struct name="SoundCollectionContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<!--
				must be 5 according to the documentation, but a value of 0 has been
				observed
			-->
			<limitation name="recInstance" value="0|5" />
			<limitation name="recType" value="0x7E4" />
		</type>
		<type name="soundCollectionAtom" type="SoundCollectionAtom" />
		<type name="rgSoundContainer" type="SoundContainer" array="true"
			size="rh.recLen-12" />
	</struct>
	<struct name="SoundCollectionAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x7e5" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="soundIdSeed" />
	</struct>
	<struct name="SlideHeadersFootersContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="3" />
			<limitation name="recType" value="0xFD9" />
		</type>
		<type name="hfAtom" type="HeadersFootersAtom" />
		<type name="userDateAtom" type="UserDateAtom" optional="true" />
		<type name="footerAtom" type="FooterAtom" optional="true" />
	</struct>
	<struct name="NotesHeadersFootersContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="4" />
			<limitation name="recType" value="0xFD9" />
		</type>
		<type name="hfAtom" type="HeadersFootersAtom" />
		<type name="userDateAtom" type="UserDateAtom" optional="true" />
		<type name="headerAtom" type="HeaderAtom" optional="true" />
		<type name="footerAtom" type="FooterAtom" optional="true" />
	</struct>
	<struct name="HeadersFootersAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFDA" />
			<limitation name="recLen" value="4" />
		</type>
		<int16 name="formatId">
			<limitation expression="&gt;=0" />
			<limitation expression="&lt;=13" />
		</int16>
		<bit name="fHasDate" />
		<bit name="fHasTodayDate" />
		<bit name="fHasUserDate" />
		<bit name="fHasSlideNumber" />
		<bit name="fHasHeader" />
		<bit name="fHasFooter" />
		<uint2 name="reserved1" />
		<uint8 name="reserved2" />
	</struct>
	<struct name="UserDateAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
			<limitation name="recLen" expression="&lt;=510" />
		</type>
		<uint16 name="userDate" count="rh.recLen/2" />
	</struct>
	<struct name="HeaderAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="header" count="rh.recLen/2" />
	</struct>
	<struct name="FooterAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="2" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="footer" count="rh.recLen/2" />
	</struct>
	<struct name="PerSlideHeadersFootersContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFD9" />
		</type>
		<type name="hfAtom" type="HeadersFootersAtom" />
		<type name="userDateAtom" type="UserDateAtom" optional="true" />
		<!--
			according to Microsoft documentation, there should be no headerAtom
			in this struct, however in some ... documents add one. Adding it as
			an optional field here still allows such files to be parsed.
		-->
		<type name="headerAtom" type="HeaderAtom" optional="true" />
		<type name="footerAtom" type="FooterAtom" optional="true" />
		<!--
			according to Microsoft documentation, the userDateAtom must precede
			footerAtom, however in some ... documents their order is swapped.
			userDateAtom2 allows such files to still be parsed.
		-->
		<type name="userDateAtom2" type="UserDateAtom" optional="true" />
	</struct>
	<struct name="EndDocumentAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3EA" />
			<limitation name="recLen" value="0" />
		</type>
	</struct>
	<struct name="DocInfoListContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x7D0" />
		</type>
		<type name="rgChildRec" type="DocInfoListSubContainerOrAtom"
			array="true" />
	</struct>
	<struct name="DocInfoListSubContainerOrAtom">
		<choice name="anon">
			<type type="DocProgTagsContainer" />
			<type type="NormalViewSetInfoContainer" />
			<type type="NotesTextViewInfoContainer" />
			<type type="OutlineViewInfoContainer" />
			<type type="SlideViewInfoInstance" />
			<type type="SorterViewInfoContainer" />
			<type type="VBAInfoContainer" />
		</choice>
	</struct>
	<struct name="SlideViewInfoInstance">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0|1" />
			<limitation name="recType" value="0x3FA" />
		</type>
		<type name="slideViewInfoAtom" type="SlideViewInfoAtom" />
		<type name="zoomViewInfoAtom" type="ZoomViewInfoAtom" />
		<type name="rgGuideAtom" type="GuideAtom" array="true" />
	</struct>
	<struct name="SlideViewInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3FE" />
			<limitation name="recLen" value="3" />
		</type>
		<uint8 name="unused1" />
		<uint8 name="fSnapToGrid" />
		<uint8 name="fSnapToShape" />
	</struct>
	<struct name="ZoomViewInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3FD" />
			<limitation name="recLen" value="0x34" />
		</type>
		<type name="curScale" type="ScalingStruct" />
		<uint8 name="unused1" count="24" />
		<type name="origin" type="PointStruct" />
		<uint8 name="fUseVarScale">
			<limitation value="0|1" />
		</uint8>
		<uint8 name="fDraftMode" />
		<uint16 name="unused2" />
	</struct>
	<struct name="ScalingStruct">
		<type name="x" type="RatioStruct" />
		<type name="y" type="RatioStruct" />
	</struct>
	<struct name="GuideAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="7" />
			<limitation name="recType" value="0x3FB" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="type">
			<limitation value="0|1" />
		</uint32>
		<int32 name="pos">
			<limitation expression="&gt;=-15840" />
			<limitation expression="&lt;=32255" />
		</int32>
	</struct>
	<struct name="DocProgTagsContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0|1" />
			<limitation name="recType" value="0x1388" />
		</type>
		<type name="rgChildRec" type="DocProgTagsSubContainerOrAtom"
			array="true" size="rh.recLen" />
	</struct>
	<struct name="DocProgTagsSubContainerOrAtom">
		<choice name="anon">
			<type type="ProgStringTagContainer" />
			<type type="DocProgBinaryTagContainer" />
		</choice>
	</struct>
	<struct name="DocProgBinaryTagContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138A" />
		</type>
		<type name="rec" type="DocProgBinaryTagSubContainerOrAtom" />
	</struct>
	<struct name="DocProgBinaryTagSubContainerOrAtom">
		<choice name="anon">
			<type name="__PPT9" type="PP9DocBinaryTagExtension" />
			<type name="__PPT10" type="PP10DocBinaryTagExtension" />
			<type name="__PPT11" type="PP11DocBinaryTagExtension" />
			<type name="__PPT12" type="PP12DocBinaryTagExtension" />
			<type name="__unknown" type="UnknownBinaryTag" />
		</choice>
	</struct>
	<struct name="PP9DocBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" value="0x0E" />
		</type>
		<uint8 name="tagName" count="14" />
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="rgTextMasterStyle9" type="TextMasterStyle9Atom"
			array="true" />
		<type name="blipCollectionContainer" type="BlipCollection9Container"
			optional="true" />
		<type name="textDefaultsAtom" type="TextDefaults9Atom" optional="true" />
		<type name="kinsokuContainer" type="Kinsoku9Container" optional="true" />
		<type name="rgExternalHyperlink9" type="ExHyperlink9Container"
			array="true" />
		<type name="presAdvisorFlagsAtom" type="PresAdvisorFlags9Atom"
			optional="true" />
		<type name="envelopeDataAtom" type="EnvelopeData9Atom" optional="true" />
		<type name="envelopeFlagsAtom" type="EnvelopeFlags9Atom"
			optional="true" />
		<type name="htmlDocInfoAtom" type="HTMLDocInfo9Atom" optional="true" />
		<type name="htmlPublishInfoAtom" type="HTMLPublishInfo9Container"
			optional="true" />
		<type name="rgBroadcastDocInfo9" type="BroadcastDocInfo9Container"
			array="true" />
		<type name="outlineTextPropsContainer" type="OutlineTextProps9Container"
			optional="true" />
	</struct>
	<struct name="TextMasterStyle9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
			<limitation name="recType" value="0x0FAD" />
		</type>
		<uint16 name="cLevels">
			<limitation expression="&lt;=5" />
		</uint16>
		<type name="lstLvl1" type="TextMasterStyle9Level" condition="cLevels&gt;0" />
		<type name="lstLvl2" type="TextMasterStyle9Level" condition="cLevels&gt;1" />
		<type name="lstLvl3" type="TextMasterStyle9Level" condition="cLevels&gt;2" />
		<type name="lstLvl4" type="TextMasterStyle9Level" condition="cLevels&gt;3" />
		<type name="lstLvl5" type="TextMasterStyle9Level" condition="cLevels&gt;4" />
	</struct>
	<struct name="TextMasterStyle9Level">
		<type name="pf9" type="TextPFException9" />
		<type name="cf9" type="TextCFException9" />
	</struct>
	<struct name="TextPFException9">
		<type name="masks" type="PFMasks">
			<limitation name="hasBullet" value="false" />
			<limitation name="bulletHasFont" value="false" />
			<limitation name="bulletHasColor" value="false" />
			<limitation name="bulletHasSize" value="false" />
			<limitation name="bulletFont" value="false" />
			<limitation name="bulletColor" value="false" />
			<limitation name="bulletSize" value="false" />
			<limitation name="bulletChar" value="false" />
			<limitation name="leftMargin" value="false" />
			<limitation name="indent" value="false" />
			<limitation name="align" value="false" />
			<limitation name="lineSpacing" value="false" />
			<limitation name="spaceBefore" value="false" />
			<limitation name="spaceAfter" value="false" />
			<limitation name="defaultTabSize" value="false" />
			<limitation name="fontAlign" value="false" />
			<limitation name="charWrap" value="false" />
			<limitation name="wordWrap" value="false" />
			<limitation name="overflow" value="false" />
			<limitation name="tabStops" value="false" />
			<limitation name="textDirection" value="false" />
		</type>
		<uint16 name="bulletBlipRef" condition="masks.bulletBlip" />
		<uint16 name="fBulletHasAutoNumber" condition="masks.bulletHasScheme">
			<limitation value="0|1" />
		</uint16>
		<type name="bulletAutoNumberScheme" condition="masks.bulletScheme"
			type="TextAutoNumberScheme" />
	</struct>
	<struct name="TextAutoNumberScheme">
		<uint16 name="scheme">
			<limitation
				value="0x0000|0x0001|0x0002|0x0003|0x0004|0x0005|0x0006|0x0007|0x0008" />
		</uint16>
		<uint16 name="startNum">
			<limitation expression="&gt;=1" />
		</uint16>
	</struct>
	<struct name="TextCFException9">
		<type name="masks" type="CFMasks">
			<limitation name="bold" value="false" />
			<limitation name="italic" value="false" />
			<limitation name="underline" value="false" />
			<limitation name="shadow" value="false" />
			<limitation name="fehint" value="false" />
			<limitation name="kumi" value="false" />
			<limitation name="emboss" value="false" />
			<limitation name="reserved" value="0" />
			<limitation name="typeface" value="false" />
			<limitation name="size" value="false" />
			<limitation name="color" value="false" />
			<limitation name="position" value="false" />
			<limitation name="oldEATypeface" value="false" />
			<limitation name="ansiTypeface" value="false" />
			<limitation name="symbolTypeface" value="false" />
			<limitation name="newEATypeface" value="false" />
			<limitation name="csTypeface" value="false" />
			<limitation name="pp11ext" value="false" />
		</type>
		<uint4 name="pp10runid" condition="masks.pp10ext" />
		<uint20 name="unuseda" condition="masks.pp10ext" />
		<uint8 name="unusedb" condition="masks.pp10ext" />
	</struct>
	<struct name="BlipCollection9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x07F8" />
		</type>
		<type name="rgBlipEntityAtom" type="BlipEntityAtom" array="true"
			size="rh.recLen" />
		<!--
			ToDo gBlipEntityAtom (variable): An array of BlipEntityAtom record
			that specifies picture bullets. It MUST NOT contain more than one
			BlipEntityAtom record with the same value of rh.recInstance.
		-->
	</struct>
	<struct name="BlipEntityAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" expression="&lt;=128" />
			<limitation name="recType" value="0x07F9" />
		</type>
		<uint8 name="winBlipType">
			<limitation value="0x02|0x03|0x05|0x06" />
		</uint8>
		<uint8 name="unused" />
		<type name="blip" type="OfficeArtBStoreContainerFileBlock" />
	</struct>
	<struct name="TextDefaults9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x00" />
			<limitation name="recType" value="0x0FB0" />
		</type>
		<type name="cf9" type="TextCFException9" />
		<type name="pf9" type="TextPFException9" />
	</struct>
	<struct name="Kinsoku9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x2" />
			<limitation name="recType" value="0x0FC8" />
		</type>
		<type name="kinsoku9Atom" type="Kinsoku9Atom" />
		<!--
			condition for this field is too complex so we just say it is optional
		-->
		<type name="kinsokuLeadingAtom" type="KinsokuLeadingAtom"
			optional="true" />
		<!--
			condition for this field is too complex so we just say it is optional
		-->
		<type name="kinsokuFollowingAtom" type="KinsokuFollowingAtom"
			optional="true" />
	</struct>
	<struct name="Kinsoku9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x3" />
			<limitation name="recType" value="0x0FD2" />
			<limitation name="recLen" value="0x0004" />
		</type>
		<uint2 name="korLevel">
			<limitation value="0x0|0x2" />
		</uint2>
		<uint2 name="scLevel">
			<limitation value="0x0|0x2" />
		</uint2>
		<uint2 name="tcLevel">
			<limitation value="0x0|0x2" />
		</uint2>
		<uint2 name="jpnLevel">
			<limitation value="0x0|0x1|0x2" />
		</uint2>
		<uint4 name="reserveda">
			<limitation value="0" />
		</uint4>
		<uint20 name="reservedb">
			<limitation value="0" />
		</uint20>
	</struct>
	<struct name="ExHyperlink9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFE4" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="PresAdvisorFlags9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x177A" />
			<limitation name="recLen" value="0x4" />
		</type>
		<bit name="fDisableCaseStyleTitleRule" />
		<bit name="fDisableCaseStyleBodyRule" />
		<bit name="fDisableEndPunctuationTitleRule" />
		<bit name="fDisableEndPunctuationBodyRule" />
		<bit name="fDisableTooManyBulletsRule" />
		<bit name="fDisableFontSizeTitleRule" />
		<bit name="fDisableFontSizeBodyRule" />
		<bit name="fDisableNumberOfLinesTitleRule" />
		<bit name="fDisableNumberOfLinesBodyRule" />
		<bit name="fDisableTooManyFontsRule" />
		<bit name="fDisablePrintTip" />
		<uint5 name="reserveda">
			<limitation value="0" />
		</uint5>
		<uint16 name="reservedb">
			<limitation value="0" />
		</uint16>
	</struct>
	<struct name="EnvelopeData9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1785" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="EnvelopeFlags9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1784" />
			<limitation name="recLen" value="4" />
		</type>
		<bit name="fHasEnvelope" />
		<bit name="fEnvelopeVisible" />
		<uint2 name="reserved1">
			<limitation value="0" />
		</uint2>
		<bit name="fEnvelopeDirty" />
		<uint3 name="reserved2a">
			<limitation value="0" />
		</uint3>
		<uint8 name="reserved2b">
			<limitation value="0" />
		</uint8>
		<uint16 name="reserved2c">
			<limitation value="0" />
		</uint16>
	</struct>
	<struct name="HTMLDocInfo9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x177B" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint32 name="unused1" />
		<uint32 name="encoding" />
		<!--ToDo Encoding limitation -->
		<uint16 name="frameColorType">
			<limitation value="0|1|2|3|4|5" />
		</uint16>
		<uint8 name="screenSize" />
		<uint8 name="unused2" />
		<uint8 name="outputType" />
		<bit name="fShowFrame" />
		<bit name="fResizeGraphics" />
		<bit name="fOrganizeInFolder" />
		<bit name="fUseLongFileNames" />
		<bit name="fRelyOnVML" />
		<bit name="fAllowPNG" />
		<bit name="fShowSlideAnimation" />
		<bit name="reserved1">
			<limitation value='false' />
		</bit>
		<uint16 name="unused3" />
	</struct>
	<struct name="HTMLPublishInfo9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x177D" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="BroadcastDocInfo9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x177E" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="OutlineTextProps9Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FAE" />
		</type>
		<type name="rgOutlineTextProps9Entry" type="OutlineTextProps9Entry"
			array="true" />
	</struct>
	<struct name="OutlineTextProps9Entry">
		<type name="outlineTextHeaderAtom" type="OutlineTextPropsHeaderExAtom" />
		<type name="styleTextProp9Atom" type="StyleTextProp9Atom" />
	</struct>
	<struct name="OutlineTextPropsHeaderExAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" expression="&lt;=5" />
			<limitation name="recType" value="0xFAF" />
		</type>
		<uint32 name="slideIdRef" />
		<uint32 name="txType" />
	</struct>
	<struct name="StyleTextProp9Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFAC" />
		</type>
		<type name="rgStyleTextProp9" type="StyleTextProp9" array="true"
			size="rh.recLen" />
	</struct>
	<struct name="StyleTextProp9">
		<type name="pf9" type="TextPFException9" />
		<type name="cf9" type="TextCFException9" />
		<type name="si" type="TextSIException">
			<limitation name="spell" value="false" />
			<limitation name="lang" value="false" />
			<limitation name="altLang" value="false" />
			<limitation name="smartTag" value="false" />
		</type>
	</struct>
	<struct name="PP10DocBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint8 name="tagName" count="16" />
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="fontCollectionContainer" type="FontCollection10Container"
			optional="true" />
		<type name="rgTextMasterStyle10" type="TextMasterStyle10Atom"
			array="true" />
		<type name="textDefaultsAtom" type="TextDefaults10Atom" optional="true" />
		<type name="gridSpacingAtom" type="GridSpacing10Atom" />
		<type name="rgCommentIndex10" type="CommentIndex10Container"
			array="true" />
		<type name="fontEmbedFlagsAtom" type="FontEmbedFlags10Atom"
			optional="true" />
		<type name="copyrightAtom" type="CopyrightAtom" optional="true" />
		<type name="keywordsAtom" type="KeywordsAtom" optional="true" />
		<type name="filterPrivacyFlagsAtom" type="FilterPrivacyFlags10Atom"
			optional="true" />
		<type name="outlineTextPropsContainer" type="OutlineTextProps10Container"
			optional="true" />
		<type name="docToolbarStatesAtom" type="DocToolbarStates10Atom"
			optional="true" />
		<type name="slideListTableContainer" type="SlideListTable10Container"
			optional="true" />
		<type name="rgDiffTree10Container" type="DiffTree10Container"
			optional="true" />
		<type name="modifyPasswordAtom" type="ModifyPasswordAtom"
			optional="true" />
		<type name="photoAlbumInfoAtom" type="PhotoAlbumInfo10Atom"
			optional="true" />
	</struct>
	<struct name="FontCollection10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x07D6" />
		</type>
		<!-- <uint8 name="todo" count="rh.recLen" /> -->
		<type name="rgFontCollectionEntry" type="FontCollectionEntry"
			array="true" size="rh.recLen" />
	</struct>
	<struct name="TextMasterStyle10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
			<limitation name="recType" value="0x0FB2" />
		</type>
		<uint16 name="cLevels">
			<limitation expression="&lt;=5" />
		</uint16>
		<!--
			level field of TextMasterStyleLevel is put here, because its presence
			depends on this structure and currently child access to parent
			properties is not supported
		-->
		<uint16 name="lstLvl1level" condition="cLevels&gt;0 &amp;&amp; \
rh.recInstance&gt;=5" />  <type name="lstLvl1" type="TextMasterStyle10Level" \
condition="cLevels&gt;0" />  <uint16 name="lstLvl2level" condition="cLevels&gt;1 \
&amp;&amp; rh.recInstance&gt;=5" />  <type name="lstLvl2" \
type="TextMasterStyle10Level" condition="cLevels&gt;1" />  <uint16 \
name="lstLvl3level" condition="cLevels&gt;2 &amp;&amp; rh.recInstance&gt;=5" />  \
<type name="lstLvl3" type="TextMasterStyle10Level" condition="cLevels&gt;2" />  \
<uint16 name="lstLvl4level" condition="cLevels&gt;3 &amp;&amp; rh.recInstance&gt;=5" \
/>  <type name="lstLvl4" type="TextMasterStyle10Level" condition="cLevels&gt;3" />
		<uint16 name="lstLvl5level" condition="cLevels&gt;4 &amp;&amp; \
rh.recInstance&gt;=5" />  <type name="lstLvl5" type="TextMasterStyle10Level" \
condition="cLevels&gt;4" />  </struct>
	<struct name="TextMasterStyle10Level">
		<type name="cf10" type="TextCFException10" />
	</struct>
	<struct name="TextCFException10">
		<type name="masks" type="CFMasks">
			<limitation name="bold" value="false" />
			<limitation name="italic" value="false" />
			<limitation name="underline" value="false" />
			<limitation name="shadow" value="false" />
			<limitation name="fehint" value="false" />
			<limitation name="kumi" value="false" />
			<limitation name="emboss" value="false" />
			<limitation name="reserved" value="0" />
			<limitation name="typeface" value="false" />
			<limitation name="size" value="false" />
			<limitation name="color" value="false" />
			<limitation name="position" value="false" />
			<limitation name="pp10ext" value="false" />
			<limitation name="oldEATypeface" value="false" />
			<limitation name="ansiTypeface" value="false" />
			<limitation name="symbolTypeface" value="false" />
		</type>
		<!--ToDo check it is correct or not -->
		<uint16 name="newEAFontRef" condition="masks.newEATypeface" />
		<uint16 name="csFontRef" condition="masks.csTypeface" />
		<uint32 name="pp11ext" condition="masks.pp11ext" />
	</struct>
	<struct name="TextDefaults10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FB4" />
		</type>
		<type name="cf10" type="TextCFException10" />
	</struct>
	<struct name="GridSpacing10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x040D" />
			<limitation name="recLen" value="0x08" />
		</type>
		<uint32 name="x">
			<limitation expression="&gt;=23224" />
			<limitation expression="&lt;=1179648" />
		</uint32>
		<uint32 name="y">
			<!--
				TODO: fix generator to handle this expression <limitation
				expression="x==y" />
			-->
			<limitation expression="&gt;=23224" />
			<limitation expression="&lt;=1179648" />
		</uint32>
	</struct>
	<struct name="CommentIndex10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x2EE4" />
		</type>
		<type name="authorNameAtom" type="AuthorNameAtom" optional="true" />
		<type name="authorIndexAtom" type="CommentIndex10Atom" optional="true" />
	</struct>
	<struct name="AuthorNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="&lt;=104" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint8 name="authorName" count="rh.recLen" />
	</struct>
	<struct name="CommentIndex10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x2EE5" />
			<limitation name="recLen" value="0x08" />
		</type>
		<int32 name="colorIndex">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="commentIndexSeed">
			<limitation expression="&gt;=0" />
			<!-- To Do limitation seems tough to do -->
		</int32>
	</struct>
	<struct name="FontEmbedFlags10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x32C8" />
			<limitation name="recLen" value="0x04" />
		</type>
		<bit name="fSubset" />
		<bit name="fSubsetOptionConfirmed" />
		<uint14 name="unuseda" />
		<uint16 name="unusedb" />
	</struct>
	<struct name="CopyrightAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x1" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="&lt;=510" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint8 name="copyright" count="rh.recLen" />
	</struct>
	<struct name="KeywordsAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x2" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="&lt;=510" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint8 name="keywords" count="rh.recLen" />
	</struct>
	<struct name="FilterPrivacyFlags10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x36B0" />
			<limitation name="recLen" value="0x04" />
		</type>
		<bit name="fRemovePII" />
		<uint7 name="reserved2a">
			<limitation value="0x0" />
		</uint7>
		<uint8 name="reserved2b">
			<limitation value="0x0" />
		</uint8>
		<uint16 name="reserved2c">
			<limitation value="0x0" />
		</uint16>
	</struct>
	<struct name="OutlineTextProps10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FB3" />
		</type>
		<type name="rgOutlineTextProps10Entry" type="OutlineTextProps10Entry"
			array="true" />
	</struct>
	<struct name="OutlineTextProps10Entry">
		<type name="outlineTextHeaderAtom" type="OutlineTextPropsHeaderExAtom" />
		<type name="styleTextProp10Atom" type="StyleTextProp10Atom" />
	</struct>
	<struct name="StyleTextProp10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0xFB1" />
		</type>
		<type name="rgStyleTextProp10" type="TextCFException10" array="true" />
	</struct>
	<struct name="DocToolbarStates10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x36B1" />
			<limitation name="recLen" value="0x01" />
		</type>
		<bit name="fShowReviewingToolbar" />
		<bit name="fShowReviewingGallery" />
		<uint6 name="reserved">
			<limitation value="0x0" />
		</uint6>
	</struct>
	<struct name="SlideListTable10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EF1" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="DiffTree10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EEC" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ModifyPasswordAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x03" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="&lt;=510" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint8 name="modifyPassword" count="rh.recLen" />
	</struct>
	<struct name="PhotoAlbumInfo10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x036B2" />
			<limitation name="recLen" value="0x06" />
		</type>
		<uint8 name="fUseBlackWhite" />
		<uint8 name="fHasCaption" />
		<uint8 name="layout">
			<limitation value="0|1|2|3|4|5|6" />
		</uint8>
		<uint8 name="unused" />
		<uint16 name="frameShape">
			<limitation value="0x0000|0x0001|0x0002|0x0003|0x0004|0x0005|0x0006" />
		</uint16>
	</struct>
	<struct name="PP11DocBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint8 name="tagName" count="16" />
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="smartTagStore11" type="SmartTagStore11Container" />
		<type name="outlineTextProps" type="OutlineTextProps11Container" />
	</struct>
	<struct name="SmartTagStore11Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x36B3" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="OutlineTextProps11Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FB5" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="UnknownBinaryTag">
		<type name="tagNameAtom" type="TagNameAtom" />
		<type name="tagData" type="BinaryTagDataBlob" />
	</struct>
	<struct name="BinaryTagDataBlob">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<uint8 name="data" count="rh.recLen" />
	</struct>
	<struct name="PP12DocBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint8 name="tagName" count="16" />
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<uint8 name="todo" count="rhData.recLen" />
	</struct>
	<struct name="NotesTextViewInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0x413" />
		</type>
		<type name="zoomViewInfo" type="ZoomViewInfoAtom" />
	</struct>
	<struct name="OutlineViewInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<!-- OpenOffice writes 0 here. -->
			<limitation name="recInstance" value="0|1" />
			<limitation name="recType" value="0x407" />
		</type>
		<type name="noZoomViewInfo" type="NoZoomViewInfoAtom" />
	</struct>
	<struct name="NoZoomViewInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3FD" />
			<limitation name="recLen" value="0x34" />
		</type>
		<type name="curScale" type="ScalingStruct" />
		<uint8 name="unused1" count="24" />
		<type name="origin" type="PointStruct" />
		<uint8 name="unused2" />
		<uint8 name="fDraftMode" />
		<uint16 name="unused3" />
	</struct>
	<struct name="SorterViewInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0x408" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="VBAInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0x3FF" />
			<limitation name="recLen" value="0x14" />
		</type>
		<type name="vbaInfoAtom" type="VBAInfoAtom" />
	</struct>
	<struct name="VBAInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="2" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x400" />
			<limitation name="recLen" value="0xC" />
		</type>
		<uint32 name="persistIdRef" />
		<uint32 name="fHasMacros">
			<limitation value="0|1" />
		</uint32>
		<uint32 name="version">
			<!-- OpenOffice writes 0 or 1 instead of 2 -->
			<limitation value="0|1|2" />
		</uint32>
	</struct>
	<struct name="NormalViewSetInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0x414" />
			<limitation name="recLen" value="0x1C" />
		</type>
		<type name="normalViewSetInfoAtom" type="NormalViewSetInfoAtom" />
	</struct>
	<struct name="NormalViewSetInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x415" />
			<limitation name="recLen" value="0x14" />
		</type>
		<type name="leftPortion" type="RatioStruct">
			<!--
				This is not true in a sample doc <limitation
				expression="numer*denom&gt;=0" /> <limitation
				expression="denom/numer&gt;=1" />
			-->
		</type>
		<type name="topPortion" type="RatioStruct">
			<!--
				This is not true in a sample doc <limitation
				expression="numer*denom&gt;=0" /> <limitation
				expression="denom/numer&gt;=1" />
			-->
		</type>
		<uint8 name="vertBarState" />
		<uint8 name="horizBarState" />
		<uint8 name="fPreferSingleSet">
			<limitation value="0|1" />
		</uint8>
		<bit name="fHideThumbnails" />
		<bit name="fBarSnapped" />
		<uint6 name="reserved">
			<limitation value="0" />
		</uint6>
	</struct>
	<struct name="MasterListWithTextContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x1" />
			<limitation name="recType" value="0x0FF0" />
			<limitation name="recLen" expression="%28==0" />
		</type>
		<type name="rgMasterPersistAtom" type="MasterPersistAtom" count="rh.recLen/28" />
	</struct>
	<struct name="MasterPersistAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3F3" />
			<limitation name="recLen" value="0x14" />
		</type>
		<uint32 name="persistIdRef" />
		<uint2 name="reserved1">
			<limitation value="0" />
		</uint2>
		<bit name="fNonOutLineData" />
		<uint5 name="reserved2">
			<limitation value="0" />
		</uint5>
		<uint8 name="reserved3">
			<limitation value="0" />
		</uint8>
		<uint16 name="reserved4">
			<limitation value="0" />
		</uint16>
		<uint32 name="reserved5">
			<limitation value="0" />
		</uint32>
		<uint32 name="masterId" />
		<uint32 name="reserved6">
			<limitation value="0" />
		</uint32>
	</struct>
	<struct name="SlideListWithTextContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FF0" />
		</type>
		<type name="rgChildRec" type="SlideListWithTextSubContainerOrAtom"
			array="true" />
	</struct>
	<struct name="NotesListWithTextContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="2" />
			<limitation name="recType" value="0x0FF0" />
		</type>
		<type name="rgNotesPersistAtom" type="NotesPersistAtom" array="true" />
	</struct>
	<struct name="NotesPersistAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x03F3" />
			<limitation name="recLen" value="0x14" />
		</type>
		<uint32 name="persistIdRef" />
		<uint2 name="reserved1">
			<limitation value="0" />
		</uint2>
		<bit name="fNonOutlineData" />
		<uint5 name="reserved2a">
			<limitation value="0" />
		</uint5>
		<uint8 name="reserved2b">
			<limitation value="0" />
		</uint8>
		<uint16 name="reserved2c">
			<limitation value="0" />
		</uint16>
		<uint32 name="reserved3">
			<limitation value="0" />
		</uint32>
		<uint32 name="notesId" />
		<uint32 name="reserved4">
			<limitation value="0" />
		</uint32>
	</struct>
	<struct name="SlideListWithTextSubContainerOrAtom">
		<type name="slidePersistAtom" type="SlidePersistAtom" />
		<type name="atoms" type="TextContainer" array="true" />
	</struct>
	<!-- our own invention -->
	<struct name="TextContainer">
		<!--
			this is an interpretation of the ABNF in the MS-PPT doc
		-->
		<type name="textHeaderAtom" type="TextHeaderAtom" />
		<choice name="text" optional="true">
			<type type="TextCharsAtom" />
			<type type="TextBytesAtom" />
		</choice>
		<type name="style" type="StyleTextPropAtom" optional="true" />
		<type name="meta" type="TextContainerMeta" array="true" />
		<!--
			perhaps this does not belong here, see
			TextClientDataSubContainerOrAtom
		-->
		<type name="master" type="MasterTextPropAtom" optional="true" />
		<type name="bookmark" type="TextBookmarkAtom" array="true" />
		<!--  this textRuler is not according to the specification -->
		<type name="textRuler" type="TextRulerAtom" optional="true" />
		<type name="specialinfo" type="TextSpecialInfoAtom" optional="true" />
		<type name="interactive" type="TextContainerInteractiveInfo"
			array="true" />
		<!--  this second occurance is not according to the specification -->
		<type name="specialinfo2" type="TextSpecialInfoAtom" optional="true" />
	</struct>
	<!-- our own invention -->
	<struct name="TextContainerMeta">
		<choice name="meta">
			<type type="SlideNumberMCAtom" />
			<type type="DateTimeMCAtom" />
			<type type="GenericDateMCAtom" />
			<type type="HeaderMCAtom" />
			<type type="FooterMCAtom" />
			<type type="RTFDateTimeMCAtom" />
		</choice>
	</struct>
	<!-- our own invention -->
	<struct name="TextContainerInteractiveInfo">
		<choice name="interactive">
			<type type="MouseClickTextInfo" />
			<type type="MouseOverTextInfo" />
		</choice>
	</struct>
	<!-- our own invention -->
	<struct name="MouseClickTextInfo">
		<type name="interactive" type="MouseClickInteractiveInfoContainer" />
		<type name="text" type="MouseClickTextInteractiveInfoAtom" />
	</struct>
	<!-- our own invention -->
	<struct name="MouseOverTextInfo">
		<type name="interactive" type="MouseOverInteractiveInfoContainer" />
		<type name="text" type="MouseOverTextInteractiveInfoAtom" />
	</struct>
	<!-- our own invention -->
	<struct name="TextClientDataSubContainerOrAtom">
		<choice name="anon">
			<type type="OutlineTextRefAtom" />
			<type type="TextContainer" />
			<type type="TextRulerAtom" />
		</choice>
	</struct>
	<!-- our own invention -->
	<struct name="SlidePersistAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3F3" />
			<limitation name="recLen" value="0x14" />
		</type>
		<uint32 name="persistIdRef" />
		<bit name="reserved1">
			<limitation value="false" />
		</bit>
		<bit name="fShouldCollapse" />
		<bit name="fNonOutlineData" />
		<uint5 name="reserved2">
			<limitation value="0" />
		</uint5>
		<uint8 name="reserved3">
			<limitation value="0" />
		</uint8>
		<uint16 name="reserved4">
			<limitation value="0" />
		</uint16>
		<int32 name="cTexts">
			<limitation expression="&gt;=0" />
			<limitation expression="&lt;=8" />
		</int32>
		<type name="slideId" type="SlideId" />
		<uint32 name="reserved5">
			<limitation value="0" />
		</uint32>
	</struct>
	<struct name="TextHeaderAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0|1|2|3|4|5" />
			<limitation name="recType" value="0xF9F" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="textType" />
	</struct>
	<struct name="TextCharsAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA0" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="textChars" count="rh.recLen/2">
			<!-- <limitation value="!0" />-->
		</uint16>
	</struct>
	<struct name="TextBytesAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA8" />
		</type>
		<uint8 name="textChars" count="rh.recLen">
			<!-- <limitation value="!0" />-->
		</uint8>
	</struct>
	<struct name="MasterTextPropAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA2" />
		</type>
		<type name="rgMasterTextPropRun" type="MasterTextPropRun" array="true"
			size="rh.recLen" />
	</struct>
	<struct name="MasterTextPropRun">
		<uint32 name="count" />
		<uint16 name="indentLevel">
			<limitation expression="&lt;=4" />
		</uint16>
	</struct>
	<struct name="StyleTextPropAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA1" />
		</type>
		<!--
			<type name="rgTextPFRun" type="TextPFRun" array="true" /> <type
			name="rgTextCFRun" type="TextCFRun" array="true" />
		-->
		<!-- this one seems very hard to do -->
		<uint8 name="todo" count="rh.recLen" />
		<limitation expression="sum(rgTextPFRun/count)=count(../text/textChars)+1" />
		<limitation expression="sum(rgTextCFRun/count)=count(../text/textChars)" />
	</struct>
	<struct name="TextPFRun">
		<uint32 name="count">
			<limitation expression="&gt;0" />
		</uint32>
		<uint16 name="indentLevel">
			<limitation expression="&lt;=4" />
		</uint16>
		<type name="pf" type="TextPFException">
			<limitation name="masks.leftMargin" value="false" />
			<limitation name="masks.indent" value="false" />
			<limitation name="masks.defaultTabSize" value="false" />
			<limitation name="masks.tabStops" value="false" />
		</type>
	</struct>
	<struct name="TextCFRun">
		<uint32 name="count">
			<limitation expression="&gt;0" />
		</uint32>
		<type name="cf" type="TextCFException" />
	</struct>
	<struct name="SlideNumberMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFD8" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="position" />
	</struct>
	<struct name="DateTimeMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFF7" />
			<limitation name="recLen" value="8" />
		</type>
		<int32 name="position" />
		<uint8 name="index" />
		<uint8 name="unused" count="3" />
	</struct>
	<struct name="GenericDateMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFF8" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="position" />
	</struct>
	<struct name="HeaderMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFF9" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="position" />
	</struct>
	<struct name="FooterMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFFA" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="position" />
	</struct>
	<struct name="RTFDateTimeMCAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1015" />
			<limitation name="recLen" value="0x84" />
		</type>
		<int32 name="position" />
		<uint8 name="format" count="128" />
	</struct>
	<struct name="TextBookmarkAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA7" />
			<limitation name="recLen" value="0xC" />
		</type>
		<int32 name="begin" />
		<int32 name="end">
			<!--
				TODO: figure out how to do this <limitation expression="&gt; begin"
				/> <limitation expression="&lt;= begin+255" />
			-->
		</int32>
		<int32 name="bookmarkID" />
	</struct>
	<struct name="TextRange">
		<int32 name="begin" />
		<int32 name="end" />
	</struct>
	<struct name="MouseClickTextInteractiveInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFDF" />
			<limitation name="recLen" value="8" />
		</type>
		<type name="range" type="TextRange" />
	</struct>
	<struct name="MouseOverTextInteractiveInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xFDF" />
			<limitation name="recLen" value="8" />
		</type>
		<type name="range" type="TextRange" />
	</struct>
	<struct name="SlideId">
		<uint32 name="slideId">
			<limitation expression="&gt;=100" />
			<limitation expression="&lt;2147483647" />
		</uint32>
	</struct>
	<struct name="DocumentTextInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03F2" />
		</type>
		<type name="kinsoku" type="KinsokuContainer" optional="true" />
		<type name="fontCollection" type="FontCollectionContainer"
			optional="true" />
		<type name="textCFDefaultsAtom" type="TextCFExceptionAtom"
			optional="true" />
		<type name="textPFDefaultsAtom" type="TextPFExceptionAtom"
			optional="true" />
		<type name="defaultRulerAtom" type="DefaultRulerAtom" optional="true" />
		<type name="textSIDefaultsAtom" type="TextSIExceptionAtom" />
		<type name="textMasterStyleAtom" type="TextMasterStyleAtom" />
		<!--
			a document has been observed that has two TextMasterStyleAtom members
		-->
		<type name="textMasterStyleAtom2" type="TextMasterStyleAtom"
			optional="true" />
	</struct>
	<struct name="TextCFExceptionAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FA4" />
		</type>
		<type name="cf" type="TextCFException" />
	</struct>
	<struct name="DefaultRulerAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FAB" />
		</type>
		<type name="defaultTextRuler" type="TextRuler">
			<limitation name="fDefaultTabSize" value="true" />
			<limitation name="fCLevels" value="true" />
			<limitation name="fTabStops" value="true" />
			<limitation name="fLeftMargin1" value="true" />
			<limitation name="fLeftMargin2" value="true" />
			<limitation name="fLeftMargin3" value="true" />
			<limitation name="fLeftMargin4" value="true" />
			<limitation name="fIndent1" value="true" />
			<limitation name="fIndent2" value="true" />
			<limitation name="fIndent3" value="true" />
			<limitation name="fIndent4" value="true" />
			<limitation name="fIndent5" value="true" />
		</type>
	</struct>
	<struct name="TextRuler">
		<bit name="fDefaultTabSize" />
		<bit name="fCLevels" />
		<bit name="fTabStops" />
		<bit name="fLeftMargin1" />
		<bit name="fLeftMargin2" />
		<bit name="fLeftMargin3" />
		<bit name="fLeftMargin4" />
		<bit name="fLeftMargin5" />
		<bit name="fIndent1" />
		<bit name="fIndent2" />
		<bit name="fIndent3" />
		<bit name="fIndent4" />
		<bit name="fIndent5" />
		<uint3 name="reserved1" />
		<uint16 name="reserved2" />
		<int16 name="cLevels" condition="fCLevels" />
		<uint16 name="defaultTabSize" condition="fDefaultTabSize" />
		<type name="tabs" type="TabStops" condition="fTabStops" />
		<uint16 name="leftMargin1" condition="fLeftMargin1" />
		<uint16 name="indent1" condition="fIndent1" />
		<uint16 name="leftMargin2" condition="fLeftMargin2" />
		<uint16 name="indent2" condition="fIndent2" />
		<uint16 name="leftMargin3" condition="fLeftMargin3" />
		<uint16 name="indent3" condition="fIndent3" />
		<uint16 name="leftMargin4" condition="fLeftMargin4" />
		<uint16 name="indent4" condition="fIndent4" />
		<uint16 name="leftMargin5" condition="fLeftMargin5" />
		<uint16 name="indent5" condition="fIndent5" />
	</struct>
	<struct name="TabStops">
		<uint16 name="count" />
		<type name="rgTabStop" count="count" type="TabStop" />
	</struct>
	<struct name="TabStop">
		<int16 name="position" />
		<uint16 name="type" />
	</struct>
	<struct name="TextPFExceptionAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FA5" />
		</type>
		<uint16 name="reserved" />
		<type name="pf" type="TextPFException" />
	</struct>
	<struct name="TextPFException">
		<type name="masks" type="PFMasks">
			<!--
				it seems ppt files generated with OpenOffice Impress 3.0 can have
				bulletBlip = true
			-->
			<limitation name="bulletBlip" value="false" />
			<!--
				it seems ppt files generated with OpenOffice Impress 3.0 can have
				bulletHasScheme = true
			-->
			<limitation name="bulletHasScheme" value="false" />
			<!--
				it seems ppt files generated with OpenOffice Impress 3.0 can have
				bulletScheme = true
			-->
			<limitation name="bulletScheme" value="false" />
		</type>
		<type name="bulletFlags" type="BulletFlags"
			condition="masks.hasBullet||masks.bulletHasFont||masks.bulletHasColor||masks.bulletHasSize" \
/>  <int16 name="bulletChar" condition="masks.bulletChar">
			<!--
				OpenOffice violates this constraint, so we do not check it
				<limitation value="!0" />
			-->
		</int16>
		<uint16 name="bulletFontRef" condition="masks.bulletFont" />
		<int16 name="bulletSize" condition="masks.bulletSize" />
		<type name="bulletColor" condition="masks.bulletColor" type="ColorIndexStruct" />
		<uint16 name="textAlignment" condition="masks.align" />
		<int16 name="lineSpacing" condition="masks.lineSpacing" />
		<int16 name="spaceBefore" condition="masks.spaceBefore" />
		<int16 name="spaceAfter" condition="masks.spaceAfter" />
		<uint16 name="leftMargin" condition="masks.leftMargin" />
		<uint16 name="indent" condition="masks.indent" />
		<uint16 name="defaultTabSize" condition="masks.defaultTabSize" />
		<type name="tabStops" type="TabStops" condition="masks.tabStops" />
		<uint16 name="fontAlign" condition="masks.fontAlign" />
		<type name="wrapFlags" type="PFWrapFlags"
			condition="masks.charWrap||masks.wordWrap||masks.overflow" />
		<uint16 name="textDirection" condition="masks.textDirection" />
	</struct>
	<struct name="PFWrapFlags">
		<bit name="charWrap" />
		<bit name="wordWrap" />
		<bit name="overflow" />
		<uint5 name="reserved1" />
		<uint8 name="reserved2" />
	</struct>
	<struct name="ColorIndexStruct">
		<uint8 name="red" />
		<uint8 name="green" />
		<uint8 name="blue" />
		<uint8 name="index">
			<!-- limitation expression="&lt;8 || &gt;253" />-->
		</uint8>
	</struct>
	<struct name="BulletFlags">
		<bit name="fHasBullet" />
		<bit name="fBulletHasFont" />
		<bit name="fBulletHasColor" />
		<bit name="fBulletHasSize" />
		<uint12 name="reserved" />
	</struct>
	<struct name="PFMasks">
		<bit name="hasBullet" />
		<bit name="bulletHasFont" />
		<bit name="bulletHasColor" />
		<bit name="bulletHasSize" />
		<bit name="bulletFont" />
		<bit name="bulletColor" />
		<bit name="bulletSize" />
		<bit name="bulletChar" />
		<bit name="leftMargin" />
		<bit name="unused" />
		<bit name="indent" />
		<bit name="align" />
		<bit name="lineSpacing" />
		<bit name="spaceBefore" />
		<bit name="spaceAfter" />
		<bit name="defaultTabSize" />
		<bit name="fontAlign" />
		<bit name="charWrap" />
		<bit name="wordWrap" />
		<bit name="overflow" />
		<bit name="tabStops" />
		<bit name="textDirection" />
		<bit name="reserved" />
		<bit name="bulletBlip" />
		<bit name="bulletScheme" />
		<bit name="bulletHasScheme" />
		<uint6 name="reserved2" />
	</struct>
	<struct name="TextCFException">
		<type name="masks" type="CFMasks">
			<limitation name="pp10ext" value="false" />
			<limitation name="newEATypeface" value="false" />
			<limitation name="csTypeface" value="false" />
			<limitation name="pp11ext" value="false" />
		</type>
		<type name="fontStyle" type="CFStyle"
			condition="masks.bold || masks.italic || masks.underline || masks.shadow || \
masks.fehint || masks.kumi || masks.emboss || masks.fHasStyle != 0" />  <uint16 \
name="fontRef" condition="masks.typeface" />  <uint16 name="oldEAFontRef" \
condition="masks.oldEATypeface" />  <uint16 name="ansiFontRef" \
condition="masks.ansiTypeface" />  <uint16 name="symbolFontRef" \
condition="masks.symbolTypeface" />  <uint16 name="fontSize" condition="masks.size">
			<limitation expression="&gt;=1" />
			<limitation expression="&lt;=4000" />
		</uint16>
		<type name="color" condition="masks.color" type="ColorIndexStruct" />
		<int16 name="position" condition="masks.position">
			<limitation expression="&gt;=-100" />
			<limitation expression="&lt;=100" />
		</int16>
	</struct>
	<struct name="CFMasks">
		<bit name="bold" />
		<bit name="italic" />
		<bit name="underline" />
		<bit name="unused1" />
		<bit name="shadow" />
		<bit name="fehint" />
		<bit name="unused2" />
		<bit name="kumi" />
		<bit name="unused3" />
		<bit name="emboss" />
		<uint4 name="fHasStyle" />
		<uint2 name="unused4" />
		<bit name="typeface" />
		<bit name="size" />
		<bit name="color" />
		<bit name="position" />
		<bit name="pp10ext" />
		<bit name="oldEATypeface" />
		<bit name="ansiTypeface" />
		<bit name="symbolTypeface" />
		<bit name="newEATypeface" />
		<bit name="csTypeface" />
		<bit name="pp11ext" />
		<uint5 name="reserved" />
	</struct>
	<struct name="CFStyle">
		<bit name="bold" />
		<bit name="italic" />
		<bit name="underline" />
		<bit name="unused1" />
		<bit name="shadow" />
		<bit name="fehint" />
		<bit name="unused2" />
		<bit name="kumi" />
		<bit name="unused3" />
		<bit name="emboss" />
		<uint4 name="pp9rt" />
		<uint2 name="unused4" />
	</struct>
	<struct name="FontCollectionContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x07D5" />
		</type>
		<type name="rgFontCollectionEntry" type="FontCollectionEntry"
			array="true" size="rh.recLen" />
	</struct>
	<struct name="FontCollectionEntry">
		<type name="fontEntityAtom" type="FontEntityAtom" />
		<type name="fontEmbedData1" type="FontEmbedDataBlob" optional="true" />
		<type name="fontEmbedData2" type="FontEmbedDataBlob" optional="true" />
		<type name="fontEmbedData3" type="FontEmbedDataBlob" optional="true" />
		<type name="fontEmbedData4" type="FontEmbedDataBlob" optional="true" />
	</struct>
	<struct name="FontEntityAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" expression="&lt;=128" />
			<limitation name="recType" value="0xFB7" />
			<limitation name="recLen" value="0x44" />
		</type>
		<uint16 name="lfFaceName" count="32" />
		<uint8 name="lfCharSet" />
		<bit name="fEmbedSubsetted" />
		<uint7 name="unused" />
		<bit name="rasterFontType" />
		<bit name="deviceFontType" />
		<bit name="truetypeFontType" />
		<bit name="fNoFontSubstitution" />
		<uint4 name="reserved">
			<limitation value="0" />
		</uint4>
		<uint8 name="lfPitchAndFamily" />
	</struct>
	<struct name="FontEmbedDataBlob">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" expression="&lt;=3" />
			<limitation name="recType" value="0xFB8" />
		</type>
		<uint8 name="data" count="rh.recLen" />
	</struct>
	<struct name="KinsokuContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x2" />
			<limitation name="recType" value="0x0FC8" />
		</type>
		<type name="kinsokuAtom" type="KinsokuAtom" />
		<type name="kinsokuLeadingAtom" type="KinsokuLeadingAtom"
			condition="kinsokuAtom.level==2" />
		<type name="kinsokuFollowingAtom" type="KinsokuFollowingAtom"
			condition="kinsokuAtom.level==2" />
	</struct>
	<struct name="KinsokuAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x3" />
			<limitation name="recType" value="0x0FD2" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="level">
			<!--  MS documentation does not allow value 128 -->
			<limitation value="0|1|2|128" />
		</uint32>
	</struct>
	<struct name="KinsokuLeadingAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation expression="recLen%2==0" />
		</type>
		<uint16 name="kinsokuLeading" count="rh.recLen/2" />
	</struct>
	<struct name="KinsokuFollowingAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1 " />
			<limitation name="recType" value="0xFBA" />
			<limitation expression="recLen%2==0" />
		</type>
		<uint16 name="kinsokuFollowing" count="rh.recLen/2" />
	</struct>
	<struct name="TextSpecialInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0xFAA" />
		</type>
		<type name="rgSIRun" type="TextSIRun" array="true" size="rh.recLen" />
	</struct>
	<struct name="TextSIRun">
		<uint32 name="count">
			<limitation expression="&gt;=1" />
		</uint32>
		<type name="si" type="TextSIException" />
	</struct>
	<struct name="TextSIExceptionAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FA9" />
		</type>
		<type name="textSIException" type="TextSIException">
			<limitation name="fPp10ext" value="false" />
			<limitation name="fBidi" value="false" />
			<limitation name="smartTag" value="false" />
		</type>
	</struct>
	<struct name="TextSIException">
		<bit name="spell" />
		<bit name="lang" />
		<bit name="altLang" />
		<bit name="unused1" />
		<bit name="unused2" />
		<bit name="fPp10ext" />
		<bit name="fBidi" />
		<bit name="unused3" />
		<bit name="reserved1" />
		<bit name="smartTag" />
		<uint2 name="reserved2a" />
		<uint20 name="reserved2b" />
		<uint16 name="spellInfo" condition="spell" />
		<uint16 name="lid" condition="lang" />
		<uint16 name="altLid" condition="altLang" />
		<int16 name="bidi" condition="fBidi">
			<limitation value="0|1" />
		</int16>
		<uint4 name="pp10runid" condition="fPp10ext" />
		<uint4 name="reserved3a" condition="fPp10ext" />
		<uint16 name="reserved3b" condition="fPp10ext" />
		<uint7 name="reserved3bc" condition="fPp10ext" />
		<bit name="grammarError" condition="fPp10ext" />
		<type name="smartTags" type="SmartTags" condition="smartTag" />
	</struct>
	<struct name="SmartTags">
		<uint32 name="count" />
		<uint32 name="rgSmartTagIndex" count="count" />
	</struct>
	<struct name="TextMasterStyleAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
			<limitation name="recType" value="0x0FA3" />
		</type>
		<uint16 name="cLevels">
			<limitation expression="&lt;=5" />
		</uint16>
		<!--
			level field of TextMasterStyleLevel is put here, because its presence
			depends on this structure and currently child access to parent
			properties is not supported
		-->
		<uint16 name="lstLvl1level" condition="cLevels&gt;0 &amp;&amp; \
rh.recInstance&gt;=5" />  <type name="lstLvl1" type="TextMasterStyleLevel" \
condition="cLevels&gt;0" />  <uint16 name="lstLvl2level" condition="cLevels&gt;1 \
&amp;&amp; rh.recInstance&gt;=5" />  <type name="lstLvl2" type="TextMasterStyleLevel" \
condition="cLevels&gt;1" />  <uint16 name="lstLvl3level" condition="cLevels&gt;2 \
&amp;&amp; rh.recInstance&gt;=5" />  <type name="lstLvl3" type="TextMasterStyleLevel" \
condition="cLevels&gt;2" />  <uint16 name="lstLvl4level" condition="cLevels&gt;3 \
&amp;&amp; rh.recInstance&gt;=5" />  <type name="lstLvl4" type="TextMasterStyleLevel" \
condition="cLevels&gt;3" />  <uint16 name="lstLvl5level" condition="cLevels&gt;4 \
&amp;&amp; rh.recInstance&gt;=5" />  <type name="lstLvl5" type="TextMasterStyleLevel" \
condition="cLevels&gt;4" />  </struct>
	<struct name="TextMasterStyleLevel">
		<type name="pf" type="TextPFException" />
		<type name="cf" type="TextCFException" />
	</struct>
	<struct name="ExOleEmbedAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FCD" />
			<limitation name="recLen" value="0x8" />
		</type>
		<uint32 name="exColorFollow">
			<limitation value="0|1|2" />
		</uint32>
		<uint8 name="fCantLockServer" />
		<uint8 name="fNoSizeToServer" />
		<uint8 name="fIsTable" />
		<uint8 name="unused" />
	</struct>
	<struct name="DocumentAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="1" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03E9" />
			<limitation name="recLen" value="0x28" />
		</type>
		<type name="slideSize" type="PointStruct" />
		<type name="notesSize" type="PointStruct" />
		<type name="serverZoom" type="RatioStruct">
			<limitation expression="numer*denom &gt; 0" />
		</type>
		<uint32 name="notesMasterPersistIdRef" />
		<uint32 name="handoutMasterPersistIdRef" />
		<uint16 name="firstSlideNumber">
			<limitation expression="&lt;10000" />
		</uint16>
		<uint16 name="slideSizeType">
			<limitation value="0|1|2|3|4|5|6" />
		</uint16>
		<uint8 name="fSaveWithFonts" />
		<uint8 name="fOmitTitlePlace" />
		<uint8 name="fRightToLeft" />
		<uint8 name="fShowComments" />
	</struct>
	<struct name="PointStruct">
		<int32 name="x" />
		<int32 name="y" />
	</struct>
	<struct name="RatioStruct">
		<int32 name="numer" />
		<int32 name="denom">
			<limitation expression="!= 0" />
		</int32>
	</struct>
	<struct name="PersistDirectoryAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1772" />
		</type>
		<type name="rgPersistDirEntry" type="PersistDirectoryEntry"
			array="true" size="rh.recLen" />
	</struct>
	<struct name="UnknownDocumentContainerChild">
		<type name="rh" type="RecordHeader">
			<limitation name="recType"
				value="0x416|0x41A|0x101A|0x1773|0x1788|0x178c|0x178d" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="UnknownOfficeArtClientDataChild">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFE8|0x1019" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="UnknownSlideContainerChild">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x101D" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="PersistDirectoryEntry">
		<uint20 name="persistId" />
		<uint12 name="cPersist" />
		<uint32 name="rgPersistOffset" count="cPersist" />
	</struct>
	<struct name="PersistIdRef">
		<uint32 name="anon">
			<!--
				TODO A 4-byte unsigned integer that specifies a reference to a
				persist object. It MUST be 0x00000000 or equal to a persist object
				identifier specified by a PersistDirectoryAtom record. The value
				0x00000000 specifies a null reference.
			-->
		</uint32>
	</struct>
	<struct name="MasterOrSlideContainer">
		<choice name="anon">
			<type type="MainMasterContainer" />
			<type type="SlideContainer" />
		</choice>
	</struct>
	<struct name="MainMasterContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03F8" />
		</type>
		<type name="slideAtom" type="SlideAtom" />
		<!--
			it is not documented that a SlideShowSlideInfoAtom may appear here
		-->
		<type name="unknown" type="SlideShowSlideInfoAtom" optional="true" />
		<type name="rgSchemeListElementColorScheme" type="SchemeListElementColorSchemeAtom"
			array="true" />
		<type name="rgTextMasterStyle" type="TextMasterStyleAtom" array="true" />
		<type name="roundTripOArtTextSTyles12Atom" type="RoundTripOArtTextStyles12Atom"
			optional="true" />
		<type name="slideShowInfoAtom" type="SlideShowSlideInfoAtom"
			optional="true" />
		<type name="perSlideHeadersFootersContainer" type="PerSlideHeadersFootersContainer"
			optional="true" />
		<type name="drawing" type="DrawingContainer" />
		<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
		<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
		<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
			optional="true" />
		<type name="rgRoundTripMainMaster" type="RoundTripMainMasterRecord"
			array="true" />
		<type name="templateNameAtom" type="TemplateNameAtom" optional="true" />
		<!--
			it is not documented that a SlideProgTagsContainer may appear here
		-->
		<type name="unknown3" type="SlideProgTagsContainer" optional="true" />
	</struct>
	<struct name="SchemeListElementColorSchemeAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="6" />
			<limitation name="recType" value="0x7F0" />
			<limitation name="recLen" value="0x20" />
		</type>
		<type name="rgSchemeColor" type="ColorStruct" count="8" />
	</struct>
	<struct name="RoundTripOArtTextStyles12Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x423" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="SlideNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="3" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="slideName" count="rh.recLen/2" />
	</struct>
	<struct name="SlideProgTagsContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1388" />
		</type>
		<type name="rgTypeRec" type="SlideProgTagsSubContainerOrAtom"
			array="true" size="rh.recLen" />
	</struct>
	<struct name="SlideProgTagsSubContainerOrAtom">
		<choice name="anon">
			<type type="ProgStringTagContainer" />
			<type type="SlideProgBinaryTagContainer" />
		</choice>
	</struct>
	<struct name="SlideProgBinaryTagContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138A" />
		</type>
		<type name="rec" type="SlideProgBinaryTagSubContainerOrAtom" />
	</struct>
	<struct name="SlideProgBinaryTagSubContainerOrAtom">
		<choice name="anon">
			<type type="PP9SlideBinaryTagExtension" />
			<type type="PP10SlideBinaryTagExtension" />
			<type type="PP12SlideBinaryTagExtension" />
			<type type="UnknownBinaryTag" />
		</choice>
	</struct>
	<struct name="PP9SlideBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0xE" />
		</type>
		<uint16 name="tagName" count="7">
			<!-- <limitation value='"___PPT9"' /> -->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="rgTextMasterStyleAtom" type="TextMasterStyle9Atom"
			array="true" />
	</struct>
	<struct name="PP10SlideBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint16 name="tagName" count="8">
			<!-- <limitation value='"___PPT10"' />-->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<!--<type name="rgTextMasterStyleAtom" type="TextMasterStyle10Atom"
			array="true" />
		<type name="rgComment10Container" type="Comment10Container"
			array="true" />
		<type name="linkedSlideAtom" type="LinkedSlide10Atom" optional="true" />
		<type name="rgLinkedShape10Atom" type="LinkedShape10Atom" array="true" />
		<type name="slideFlagsAtom" type="SlideFlags10Atom" optional="true" />
		<type name="slideTimeAtom" type="SlideTime10Atom" optional="true" />
		<type name="hashCodeAtom" type="HashCode10Atom" optional="true" />
		<type name="extTimeNodeContainer" type="ExtTimeNodeContainer"
			optional="true" />
		<type name="buildListContainer" type="BuildListContainer"
			optional="true" /> -->
		<uint8 name="todo" count="rhData.recLen" />
	</struct>
	<struct name="Comment10Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EE0" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="Comment10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EE1" />
			<limitation name="recLen" value="0x1C" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="LinkedSlide10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EE7" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="linkedSlideIdRef" />
		<int32 name="clinkedShapes" />
	</struct>
	<struct name="LinkedShape10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EE6" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="shapeIdRef" />
		<uint32 name="linkedShapeIdRef" />
	</struct>
	<struct name="SlideFlags10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EEA" />
			<limitation name="recLen" value="4" />
		</type>
		<bit name="fPreserveMaster" />
		<bit name="fOverrideMasterAnimatino" />
		<uint14 name="unuseda" />
		<uint16 name="unusedb" />
	</struct>
	<struct name="SlideTime10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2EEB" />
			<limitation name="recLen" value="8" />
		</type>
		<type name="fileTime" type="FILETIME" />
	</struct>
	<struct name="HashCode10Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2B00" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="hash" />
	</struct>
	<struct name="ExtTimeNodeContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xF144" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="BuildListContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x2B02" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="PP12SlideBinaryTagExtension">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint16 name="tagName" count="8">
			<!-- <limitation value='"___PPT12"' />-->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="roundTripHeaderFooterDefaultsAtom" \
type="RoundTripHeaderFooterDefaults12Atom"  optional="true" />
	</struct>
	<struct name="RoundTripHeaderFooterDefaults12Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0424" />
			<limitation name="recLen" value="1" />
		</type>
		<bit name="fIncludeDate" />
		<bit name="fIncludeFooter" />
		<bit name="fIncludeHeader" />
		<bit name="fIncludeSlideNumber" />
		<uint4 name="reserved" />
	</struct>
	<struct name="ProgStringTagContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1389" />
		</type>
		<type name="tagNameAtom" type="TagNameAtom" />
		<type name="tagValueAtom" type="TagValueAtom" optional="true" />
	</struct>
	<struct name="TagNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2 == 0 " />
		</type>
		<uint16 name="tagName" count="rh.recLen/2" />
	</struct>
	<struct name="TagValueAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xFBA" />
		</type>
		<uint16 name="tagValue" count="rh.recLen/2" />
	</struct>
	<struct name="RoundTripMainMasterRecord">
		<type name="rh" type="RecordHeader">
			<limitation name="recType"
				value="0x41C|0x40E|0x040F|0x41E|0x0423|0x2B0D|0x2B0B|0x041D|0x2B0C|0x101D" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="TemplateNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="2" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="templateName" count="rh.recLen/2" />
	</struct>
	<struct name="SlideContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03EE" />
		</type>
		<type name="slideAtom" type="SlideAtom" />
		<type name="slideShowSlideInfoAtom" type="SlideShowSlideInfoAtom"
			optional="true" />
		<type name="perSlideHFContainer" type="PerSlideHeadersFootersContainer"
			optional="true" />
		<type name="rtSlideSyncInfo12" type="RoundTripSlideSyncInfo12Container"
			optional="true" />
		<type name="drawing" type="DrawingContainer" />
		<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
		<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
		<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
			optional="true" />
		<!--
			perhaps this undocumented type is part fo the RoundTripSlideRecord
			collection
		-->
		<type name="unknown" type="UnknownSlideContainerChild" optional="true" />
		<type name="rgRoundTripSlide" type="RoundTripSlideRecord" array="true" />
		<!--
			perhaps this undocumented type is part fo the RoundTripSlideRecord
			collection
		-->
		<type name="unknown2" type="UnknownSlideContainerChild" optional="true" />
	</struct>
	<struct name="RoundTripSlideSyncInfo12Container">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3714" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="NotesContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x03F0" />
		</type>
		<type name="notesAtom" type="NotesAtom" />
		<!--
			perSlideHFContainer is not in the documentation
		-->
		<type name="perSlideHFContainer" type="PerSlideHeadersFootersContainer"
			optional="true" />
		<type name="drawing" type="DrawingContainer" />
		<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
		<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
		<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
			optional="true" />
		<!--
			perSlideHFContainer2 is not in the documentation
		-->
		<type name="perSlideHFContainer2" type="PerSlideHeadersFootersContainer"
			optional="true" />
		<type name="rgNotesRoundTripAtom" type="NotesRoundTripAtom"
			array="true" />
	</struct>
	<struct name="NotesAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="1" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x3F1" />
			<limitation name="recLen" value="0x8" />
		</type>
		<uint32 name="slideIdRef" />
		<type name="slideFlags" type="SlideFlags" />
		<uint16 name="unused" />
	</struct>
	<struct name="SlideFlags">
		<bit name="fMasterObjects" />
		<bit name="fMasterScheme" />
		<bit name="fMasterBackground" />
		<uint5 name="unused1" />
		<uint8 name="unused2" />
	</struct>
	<struct name="NotesRoundTripAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x40E|0x40F|0x427" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="HandoutContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FC9" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExControlStg">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0|1" />
			<limitation name="recType" value="0x1011" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExOleObjStg">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1011" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="UserEditAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0FF5" />
			<limitation name="recLen" value="0x1C|0x20" />
		</type>
		<uint32 name="lastSlideIdRef" />
		<uint16 name="version" />
		<uint8 name="minorVersion">
			<limitation value="0" />
		</uint8>
		<uint8 name="majorVersion">
			<limitation value="3" />
		</uint8>
		<uint32 name="offsetLastEdit">
			<!--  TODO: check with offset of this edit -->
		</uint32>
		<uint32 name="offsetPersistDirectory">
			<!-- <limitation expression="&gt;offsetLastEdit" /> -->
			<!--
				TODO: check with offset of this edit
			-->
		</uint32>
		<uint32 name="docPersistIdRef">
			<limitation value="1" />
		</uint32>
		<uint32 name="persistIdSeed" />
		<uint16 name="lastView">
			<limitation expression="&lt;=18" />
		</uint16>
		<uint16 name="unused" />
		<uint32 name="encryptSessionPersistIdRef" condition="rh.recLen==32" />
	</struct>
	<struct name="VbaProjectStg">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0|1" />
			<limitation name="recType" value="0x1011" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="SlideAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x2" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x03EF" />
			<limitation name="recLen" value="0x18" />
		</type>
		<uint32 name="geom" />
		<uint8 name="rgPlaceholderTypes" count="8" />
		<uint32 name="masterIdRef" />
		<uint32 name="notesIdRef" />
		<type name="slideFlags" type="SlideFlags" />
		<uint16 name="unused" />
	</struct>
	<struct name="SlideShowSlideInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x03F9" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint32 name="slidetime" />
		<uint32 name="slideIdRef" />
		<uint8 name="effectDirection" />
		<uint8 name="effectType" />
		<bit name="fManualAdvance" />
		<bit name="reserved" />
		<bit name="fHidden" />
		<bit name="reserved2" />
		<bit name="fSound" />
		<bit name="reserved3" />
		<bit name="fLoopSound" />
		<bit name="reserved4" />
		<bit name="fStopSound" />
		<bit name="freserved5" />
		<bit name="fAutoAdvance" />
		<bit name="reserved6" />
		<bit name="fCursorVisible" />
		<uint3 name="reserved7" />
		<uint8 name="speed" />
		<uint8 name="unused" count="3" />
	</struct>
	<struct name="SlideShowDocInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="1" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0401" />
			<limitation name="recLen" value="0x50" />
		</type>
		<type name="penColor" type="ColorIndexStruct" />
		<int32 name="restartTime" />
		<int16 name="startSlide">
			<limitation expression="&gt;=0" />
		</int16>
		<int16 name="endSlide">
			<limitation expression="&gt;=0" />
		</int16>
		<uint8 name="namedShow" count="64" />
		<bit name="fAutoAdvance" />
		<bit name="fWillSkipBuilds" />
		<bit name="fUseSlideRange" />
		<bit name="fDocUseNamedShow" />
		<bit name="fShowBrowseMode" />
		<bit name="fKioskMode" />
		<bit name="fWillSkipNarration" />
		<bit name="fLoopContinuously" />
		<bit name="fHideScrollBar" />
		<uint7 name="reserved">
			<!--
				This value should be zero, but it is not always zero in practice.
			-->
		</uint7>
		<uint16 name="unused" />
	</struct>
	<struct name="DrawingGroupContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x040B" />
		</type>
		<type name="OfficeArtDgg" type="OfficeArtDggContainer" />
	</struct>
	<struct name="DrawingContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x040C" />
		</type>
		<type name="OfficeArtDg" type="OfficeArtDgContainer" />
	</struct>
	<struct name="SlideSchemeColorSchemeAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0x07F0" />
			<limitation name="recLen" value="0x20" />
		</type>
		<type name="rgSchemeColor" type="ColorStruct" count="8" />
	</struct>
	<struct name="RoundTripSlideRecord">
		<type name="rh" type="RecordHeader">
			<!--  value 0x2b0c is deprecated, but can occur -->
			<limitation name="recType"
				value="0x40E|0x40F|0x41D|0x3714|0x2B0D|0x2B0B|0x2B0C|0x422" />
			<!--
				0x40E|0x40F|0x41C|0x41D|0x41E|0x41F|0x420|0x422|0x423|0x425|0x426|0x427|0x428"
			-->
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="NamedShowsContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x410" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="SummaryContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x402" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="DocRoutingSlipAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x406" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="PrintOptionsAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1770" />
			<limitation name="recLen" value="5" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="RoundTripCustomTableStyles12Atom">
		<type name="rh" type="RecordHeader">
			<!--  value 0xF is not documented -->
			<limitation name="recVer" value="0|0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x428" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="RoundTripCompositeMasterId12Atom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x41D" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="compositeMasterId" />
	</struct>
	<struct name="ColorStruct">
		<uint8 name="red" />
		<uint8 name="green" />
		<uint8 name="blue" />
		<uint8 name="unused" />
	</struct>
	<struct name="ExObjListContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0409" />
			<limitation name="recLen" expression="&gt;=12" />
		</type>
		<type name="exObjListAtom" type="ExObjListAtom" />
		<type name="rgChildRec" type="ExObjListSubContainer" array="true"
			size="rh.recLen-12" />
	</struct>
	<struct name="ExObjListAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x040A" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="exObjIdSeed">
			<limitation expression="&gt;=1" />
			<!--
				TODO:exObjIdSeed (4 bytes): A signed integer that specifies a seed
				for creating a new ExObjId or ExHyperlinkId value. It MUST be
				greater than or equal to the largest ExObjId value in the file as
				specified by the ExMediaAtom record or ExOleObjAtom record and MUST
				be greater than or equal to the largest ExHyperlinkId value in the
				file as specified by the ExHyperlinkAtom record. It MUST be greater
				than or equal to 0x00000001.
			-->
		</int32>
	</struct>
	<struct name="ExObjListSubContainer">
		<choice name="anon">
			<type type="ExAviMovieContainer" />
			<type type="ExCDAudioContainer" />
			<type type="ExControlContainer" />
			<type type="ExHyperlinkContainer" />
			<type type="ExMCIMovieContainer" />
			<type type="ExMIDIAudioContainer" />
			<type type="ExOleEmbedContainer" />
			<type type="ExOleLinkContainer" />
			<type type="ExWAVAudioEmbeddedContainer" />
			<type type="ExWAVAudioLinkContainer" />
			<type type="UnknownExObjListSubContainerChild" />
		</choice>
	</struct>
	<struct name="ExAviMovieContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1006" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExCDAudioContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x100E" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExControlContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFEE" />
		</type>
		<type name="exControlAtom" type="ExControlAtom" />
		<type name="exOleObjAtom" type="ExOleObjAtom" />
		<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
		<type name="progIdAtom" type="ProgIDAtom" optional="true" />
		<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
		<type name="metafile" type="MetafileBlob" optional="true" />
	</struct>
	<struct name="ExControlAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFFB" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="slideIdRef" />
	</struct>
	<struct name="ExHyperlinkContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFD7" />
		</type>
		<type name="exHyperlinkAtom" type="ExHyperlinkAtom" />
		<type name="friendlyNameAtom" type="FriendlyNameAtom" optional="true" />
		<type name="targetAtom" type="TargetAtom" optional="true" />
		<type name="locationAtom" type="LocationAtom" optional="true" />
	</struct>
	<struct name="ExHyperlinkAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFD3" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="exHyperLinkId" />
	</struct>
	<struct name="FriendlyNameAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="friendlyName" count="rh.recLen/2" />
	</struct>
	<struct name="TargetAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="target" count="rh.recLen/2" />
	</struct>
	<struct name="LocationAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="3" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint16 name="location" count="rh.recLen/2" />
	</struct>
	<struct name="ExMCIMovieContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1007" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExMIDIAudioContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x100D" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExWAVAudioEmbeddedContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x100F" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExWAVAudioLinkContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1010" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="UnknownExObjListSubContainerChild">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFEA" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExOleLinkContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FCE" />
		</type>
		<type name="exOleLinkAtom" type="ExOleLinkAtom" />
		<type name="exOleObjAtom" type="ExOleObjAtom" />
		<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
		<type name="progIdAtom" type="ProgIDAtom" optional="true" />
		<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
		<type name="metafile" type="MetafileBlob" optional="true" />
	</struct>
	<struct name="ExOleEmbedContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FCC" />
		</type>
		<type name="exOleEmbedAtom" type="ExOleEmbedAtom" />
		<type name="exOleObjAtom" type="ExOleObjAtom" />
		<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
		<type name="progIdAtom" type="ProgIDAtom" optional="true" />
		<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
		<type name="metafile" type="MetafileBlob" optional="true" />
	</struct>
	<struct name="ExOleLinkAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FD1" />
			<limitation name="recLen" value="0xC" />
		</type>
		<uint32 name="slideIdRef">
			<!--
				A 4-byte unsigned integer that specifies a reference to a
				presentation slide. It MUST be 0x00000000 or equal to the value of
				the slideId field of a SlidePersistAtom record. The value 0x00000000
				specifies a null reference.
			-->
		</uint32>
		<uint32 name="oleUpdateMode" />
		<uint32 name="unused" />
	</struct>
	<struct name="ExOleObjAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x1" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FC3" />
			<limitation name="recLen" value="0x18" />
		</type>
		<uint32 name="drawAspect" />
		<uint32 name="type" />
		<uint32 name="exObjId" />
		<uint32 name="subType" />
		<uint32 name="persistIdRef" />
		<uint32 name="unused" />
	</struct>
	<struct name="MenuNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x1" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="%2 == 0 " />
		</type>
		<uint8 name="menuName" count="rh.recLen" />
	</struct>
	<struct name="ProgIDAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x2" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="%2 == 0 " />
		</type>
		<uint8 name="progId" count="rh.recLen" />
	</struct>
	<struct name="ClipboardNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x3" />
			<limitation name="recType" value="0x0FBA" />
			<limitation name="recLen" expression="%2 == 0 " />
		</type>
		<uint8 name="clipboardName" count="rh.recLen" />
	</struct>
	<struct name="MetafileBlob">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0FC1" />
			<limitation name="recLen" expression="&gt;16" />
		</type>
		<int16 name="mm" />
		<int16 name="xExt" />
		<int16 name="yExt" />
		<uint8 name="data" count="rh.recLen-6" />
	</struct>
	<struct name="OfficeArtDggContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0F000" />
		</type>
		<type name="drawingGroup" type="OfficeArtFDGGBlock" />
		<type name="blipStore" type="OfficeArtBStoreContainer" optional="true" />
		<!--  different from spec -->
		<!--
			MS docs do not list drawingPrimaryOptions as optional
		-->
		<type name="drawingPrimaryOptions" type="OfficeArtFOPT" optional="true" />
		<type name="drawingTertiaryOptions" type="OfficeArtTertiaryFOPT"
			optional="true" />
		<!--
			MS docs do not list colorMRU as optional
		-->
		<type name="colorMRU" type="OfficeArtColorMRUContainer" optional="true" />
		<!--
			MS docs do not list splitColors as optional
		-->
		<type name="splitColors" type="OfficeArtSplitMenuColorContainer" />
		<!--
			sometimes the order is messed up in openoffice generated documents
			This second blipSore takes that into account, but is not according to
			the specification.
		-->
		<type name="blipStore2" type="OfficeArtBStoreContainer" optional="true" />
		<!--
			MS docs do not mention this instance of OfficeArtTertiaryFOPT
		-->
		<type name="unknown" type="OfficeArtTertiaryFOPT" optional="true" />
	</struct>
	<struct name="OfficeArtDgContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0xF002" />
		</type>
		<type name="drawingData" type="OfficeArtFDG" optional="true" />
		<!-- MS documentation does not say regroupItems is optional -->
		<type name="regroupItems" type="OfficeArtFRITContainer" optional="true" />
		<type name="groupShape" type="OfficeArtSpgrContainer" />
		<!-- MS documentation does not say shape is optional -->
		<type name="shape" type="OfficeArtSpContainer" optional="true" />
		<type name="deletedShapes" type="OfficeArtSpgrContainerFileBlock"
			array="true" />
		<!--  according to ms spec, solvers is not optional -->
		<type name="solvers" type="OfficeArtSolverContainer" optional="true" />
	</struct>
	<struct name="OfficeArtFDGGBlock">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x0" />
			<limitation name="recType" value="0x0F006" />
		</type>
		<type name="head" type="OfficeArtFDGG">
			<!-- <limitation expression="cidcl==rh.recLen/8.0-2" /> FIX!-->
		</type>
		<type name="Rgidcl" type="OfficeArtIDCL" count="head.cidcl-1" />
	</struct>
	<struct name="OfficeArtFDGG">
		<uint32 name="spidMax">
			<limitation expression="&lt;67098623" />
		</uint32>
		<uint32 name="cidcl">
			<limitation expression="&lt;268435455" />
		</uint32>
		<uint32 name="cspSaved" />
		<uint32 name="cdgSaved" />
	</struct>
	<struct name="OfficeArtFDG">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" expression="&lt;=4094" />
			<limitation name="recType" value="0x0F008" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="csp" />
		<uint32 name="spidCur" />
	</struct>
	<struct name="OfficeArtFRITContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recType" value="0xF118" />
			<limitation expression="recLen==4*recInstance" />
		</type>
		<type name="rgfrit" type="OfficeArtFRIT" count="rh.recInstance" />
	</struct>
	<struct name="OfficeArtFRIT">
		<uint16 name="fridNew" />
		<uint16 name="fridOld" />
	</struct>
	<struct name="OfficeArtBStoreContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recType" value="0x0F001" />
		</type>
		<!--
			OOo can set number of instances to a wrong value, so use rh.recLen
		-->
		<type name="rgfb" type="OfficeArtBStoreContainerFileBlock" array="true"
			size="rh.recLen" />
	</struct>
	<struct name="OfficeArtSpgrContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0F003" />
		</type>
		<type name="rgfb" type="OfficeArtSpgrContainerFileBlock" array="true"
			size="rh.recLen" />
	</struct>
	<struct name="OfficeArtSpgrContainerFileBlock">
		<choice name="anon">
			<type type="OfficeArtSpContainer" />
			<type type="OfficeArtSpgrContainer" />
		</choice>
	</struct>
	<struct name="OfficeArtSpContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0F004" />
		</type>
		<type name="shapeGroup" type="OfficeArtFSPGR" optional="true" />
		<type name="shapeProp" type="OfficeArtFSP" />
		<type name="deletedshape" type="OfficeArtFPSPL" optional="true" />
		<type name="shapePrimaryOptions" type="OfficeArtFOPT" optional="true" />
		<type name="shapeSecondaryOptions1" type="OfficeArtSecondaryFOPT"
			optional="true" />
		<type name="shapeTertiaryOptions1" type="OfficeArtTertiaryFOPT"
			optional="true" />
		<type name="childAnchor" type="OfficeArtChildAnchor" optional="true" />
		<type name="clientAnchor" type="OfficeArtClientAnchor" optional="true" />
		<type name="clientData" type="OfficeArtClientData" optional="true" />
		<type name="clientTextbox" type="OfficeArtClientTextBox"
			optional="true" />
		<!--
			Only exists if shapeSecondaryOptions1 does not. -->
		<type name="shapeSecondaryOptions2" type="OfficeArtSecondaryFOPT"
			optional="true" />
		<!--
			Only exists if shapeTertiaryOptions1 does not. -->
		<type name="shapeTertiaryOptions2" type="OfficeArtTertiaryFOPT"
			optional="true" />
	</struct>
	<struct name="OfficeArtSolverContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recType" value="0xF005" />
		</type>
		<type name="rgfb" type="OfficeArtSolverContainerFileBlock" array="true" />
	</struct>
	<struct name="OfficeArtSolverContainerFileBlock">
		<choice name="anon">
			<type type="OfficeArtFConnectorRule" />
			<type type="OfficeArtFArcRule" />
			<type type="OfficeArtFCalloutRule" />
		</choice>
	</struct>
	<struct name="OfficeArtFConnectorRule">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="1" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF012" />
			<limitation name="recLen" value="0x18" />
		</type>
		<uint32 name="ruid" />
		<uint32 name="spidA" />
		<uint32 name="spidB" />
		<uint32 name="spidC" />
		<uint32 name="cptiA" />
		<uint32 name="cptiB" />
	</struct>
	<struct name="OfficeArtFArcRule">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF014" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="ruid" />
		<uint32 name="spid" />
	</struct>
	<struct name="OfficeArtFCalloutRule">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF017" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="ruid" />
		<uint32 name="spid" />
	</struct>
	<struct name="OfficeArtFSPGR">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x1" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x0F009" />
			<limitation name="recLen" value="0x10" />
		</type>
		<int32 name="xLeft" />
		<int32 name="yTop" />
		<int32 name="xRight" />
		<int32 name="yBottom" />
	</struct>
	<struct name="OfficeArtFSP">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x2" />
			<limitation name="recInstance" expression="&lt;= 202" />
			<limitation name="recType" value="0x0F00A" />
			<limitation name="recLen" value="8" />
		</type>
		<uint32 name="spid" />
		<bit name="fGroup" />
		<bit name="fChild" />
		<bit name="fPatriarch" />
		<bit name="fDeleted" />
		<bit name="fOleShape" />
		<bit name="fHaveMaster" />
		<bit name="fFlipH" />
		<bit name="fFlipV" />
		<bit name="fConnector" />
		<bit name="fHaveAnchor" />
		<bit name="fBackground" />
		<bit name="fHaveSpt" />
		<uint20 name="unused1" />
	</struct>
	<struct name="OfficeArtFOPT">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x3" />
			<limitation name="recType" value="0x0F00B" />
		</type>
		<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
		<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
	</struct>
	<struct name="OfficeArtSecondaryFOPT">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="3" />
			<limitation name="recType" value="0xF121" />
		</type>
		<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
		<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
	</struct>
	<struct name="OfficeArtTertiaryFOPT">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="3" />
			<limitation name="recType" value="0xF122" />
		</type>
		<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
		<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
	</struct>
	<!-- This type is invented to make OPTE specific parsing possible -->
	<struct name="OfficeArtFOPTEChoice">
		<choice name="anon">
			<type type="ProtectionBooleanProperties" />
			<type type="ITxid" />
			<type type="DiagramBooleanProperties" />
			<type type="DxTextLeft" />
			<type type="DyTextTop" />
			<type type="DxTextRight" />
			<type type="DyTextBottom" />
			<type type="WrapText" />
			<type type="AnchorText" />
			<type type="TextBooleanProperties" />
			<type type="HspNext" />
			<type type="Pib" />
			<type type="PibName" />
			<type type="ShapePath" />
			<type type="AdjustValue" />
			<type type="Adjust2Value" />
			<type type="Adjust3Value" />
			<type type="GeometryBooleanProperties" />
			<type type="FillType" />
			<type type="FillColor" />
			<type type="FillBackColor" />
			<type type="FillBlip" />
			<type type="FillStyleBooleanProperties" />
			<type type="LineColor" />
			<type type="LineOpacity" />
			<type type="LineBackColor" />
			<type type="LineFillBlip" />
			<type type="LineWidth" />
			<type type="LineStyle" />
			<type type="LineDashing" />
			<type type="FillRectRight" />
			<type type="FillRectBottom" />
			<type type="FillDztype" />
			<type type="WzFillId" />
			<type type="LineStyleBooleanProperties" />
			<type type="LineStartArrowhead" />
			<type type="LineEndArrowhead" />
			<type type="LineStartArrowWidth" />
			<type type="LineStartArrowLength" />
			<type type="LineEndArrowWidth" />
			<type type="LineEndArrowLength" />
			<type type="LineJoinStyle" />
			<type type="ShadowColor" />
			<type type="ShadowOpacity" />
			<type type="ShadowOffsetX" />
			<type type="ShadowOffsetY" />
			<type type="ShadowStyleBooleanPropertiesr" />
			<type type="ShapeBooleanProperties" />
			<type type="HspMaster" />
			<type type="Rotation" />
			<type type="CalloutBooleanProperties" />
			<type type="LidRegroup" />
			<type type="BWMode" />
			<type type="TxflTextFlow" />
			<type type="OfficeArtFOPTE" />
		</choice>
	</struct>
	<struct name="ProtectionBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x007F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fLockAgainstGrouping" />
		<bit name="fLockAdjustHandles" />
		<bit name="fLockText" />
		<bit name="fLockVertices" />
		<bit name="fLockCropping" />
		<bit name="fLockAgainstSelect" />
		<bit name="fLockPosition" />
		<bit name="fLockAspectRatio" />
		<bit name="fLockRotation" />
		<bit name="fLockAgainstUngrouping" />
		<uint6 name="unused6" />
		<bit name="fUsefLockAgainstGrouping" />
		<bit name="fUseLockAdjustHandles" />
		<bit name="fUseLockText" />
		<bit name="fUsefLockVertices" />
		<bit name="fUsefLockCropping" />
		<bit name="fUsefLockAgainstSelect" />
		<bit name="fUsefLockPosition" />
		<bit name="fUsefLockAspectRatio" />
		<bit name="fUsefLockRotation" />
		<bit name="fUsefLockAgainstUngrouping" />
		<uint6 name="unused2" />
	</struct>
	<struct name="FixedPoint">
		<!--
			strangely the fraction part seems to come first this conflicts with
			what the spec suggests
		-->
		<uint16 name="fractional" />
		<int16 name="integral" />
	</struct>
	<struct name="Rotation">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0004" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="rotation" type="FixedPoint" />
	</struct>
	<struct name="ITxid">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0080" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="iTxid" />
	</struct>
	<struct name="DiagramBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x053F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fLockAgainstGrouping" />
		<bit name="fLockAdjustHandles" />
		<bit name="fLockText" />
		<bit name="fLockVertices" />
		<bit name="fLockCropping" />
		<bit name="fLockAgainstSelect" />
		<bit name="fLockPosition" />
		<bit name="fLockAspectRatio" />
		<bit name="fLockRotation" />
		<bit name="fLockAgainstUngrouping" />
		<uint6 name="unused6" />
		<bit name="fUsefLockAgainstGrouping" />
		<bit name="fUseLockAdjustHandles" />
		<bit name="fUseLockText" />
		<bit name="fUsefLockVertices" />
		<bit name="fUsefLockCropping" />
		<bit name="fUsefLockAgainstSelect" />
		<bit name="fUsefLockPosition" />
		<bit name="fUsefLockAspectRatio" />
		<bit name="fUsefLockRotation" />
		<bit name="fUsefLockAgainstUngrouping" />
		<uint6 name="unused2" />
	</struct>
	<struct name="DxTextLeft">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0081" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="dxTextLeft" />
	</struct>
	<struct name="DyTextTop">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0082" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="dyTextTop" />
	</struct>
	<struct name="DxTextRight">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0083" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="dxTextRight" />
	</struct>
	<struct name="DyTextBottom">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0084" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="dyTextBottom" />
	</struct>
	<struct name="WrapText">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0085" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="wrapText">
			<limitation expression="&lt;5" />
		</uint32>
	</struct>
	<struct name="AnchorText">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0087" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="anchorText">
			<limitation expression="&lt;=9" />
		</uint32>
	</struct>
	<struct name="TextBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x00BF" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="unused1" />
		<bit name="fFitShapeToText" />
		<bit name="unused2" />
		<bit name="fAutoTextMargin" />
		<bit name="fSelectText" />
		<uint3 name="unused3a" />
		<uint8 name="unused3b" />
		<bit name="unused4" />
		<bit name="fUsefFitShapeToText" />
		<bit name="unused5" />
		<bit name="fUsefAutoTextMargin" />
		<bit name="fUsefSelectText" />
		<uint3 name="unused6a" />
		<uint8 name="unused6b" />
	</struct>
	<struct name="HspNext">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x008A" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="hspNext" />
	</struct>
	<struct name="Pib">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0104" />
		</type>
		<uint32 name="pib" />
	</struct>
	<struct name="PibName">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0105" />
		</type>
		<uint32 name="pibName" />
	</struct>
	<struct name="ShapePath">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0144" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="shapePath">
			<limitation expression="&lt;=4" />
		</uint32>
	</struct>
	<struct name="AdjustValue">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0147" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="adjustvalue" />
	</struct>
	<struct name="Adjust2Value">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0148" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="adjust2value" />
	</struct>
	<struct name="Adjust3Value">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0149" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="adjust3value" />
	</struct>
	<struct name="GeometryBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x017F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fFillOk" />
		<bit name="fFillShadeShapeOK" />
		<bit name="fGtextOK" />
		<bit name="fLineOK" />
		<bit name="f3DOK" />
		<bit name="fShadowOK" />
		<bit name="unuseda" />
		<bit name="unusedb" />
		<uint8 name="unused2" />
		<bit name="fUsefFillOK" />
		<bit name="fUsefFillShadeShapeOK" />
		<bit name="fUsefGtextOK" />
		<bit name="fUsefLineOK" />
		<bit name="fUsef3DOK" />
		<bit name="fUsefShadowOK" />
		<bit name="unused3a" />
		<bit name="unused3b" />
		<uint8 name="unused4" />
	</struct>
	<struct name="FillType">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0180" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="fillType">
			<limitation expression="&lt;=9" />
		</uint32>
	</struct>
	<struct name="FillColor">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0181" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="fillColor" type="OfficeArtCOLORREF" />
	</struct>
	<struct name="FillBackColor">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0183" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="fillBackColor" type="OfficeArtCOLORREF" />
	</struct>
	<struct name="FillBlip">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0186" />
		</type>
		<uint32 name="fillBlip" />
	</struct>
	<struct name="FillRectRight">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0193" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="fillRectRight" />
	</struct>
	<struct name="FillRectBottom">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0194" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="fillRectBottom" />
	</struct>
	<struct name="FillDztype">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0195" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="fillDztype" />
	</struct>
	<struct name="FillStyleBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01BF" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fNoFillHitTest" />
		<bit name="fillUseRect" />
		<bit name="fillShape" />
		<bit name="fHitTestFill" />
		<bit name="fFilled" />
		<bit name="fUseShapeAnchor" />
		<bit name="fRecolorFillAsPicture" />
		<bit name="unused1a" />
		<uint8 name="unused1b" />
		<bit name="fUseNoFillHitTest" />
		<bit name="fUseFillUseRext" />
		<bit name="fUseFillShape" />
		<bit name="fUseHitTestFill" />
		<bit name="fUseFilled" />
		<bit name="fUseUseShapeAnchor" />
		<bit name="fUsefRecolorFillAsPicture" />
		<bit name="unused2a" />
		<uint8 name="unused2b" />
	</struct>
	<struct name="LineColor">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01C0" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="lineColor" type="OfficeArtCOLORREF" />
	</struct>
	<struct name="LineOpacity">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01C1" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="lineOpacity">
			<limitation expression="&gt;=0" />
			<limitation expression="&lt;=65536" />
		</int32>
	</struct>
	<struct name="LineBackColor">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01C2" />
		</type>
		<type name="lineBackColor" type="OfficeArtCOLORREF" />
	</struct>
	<struct name="LineFillBlip">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01C5" />
		</type>
		<uint32 name="lineFillBlip" />
	</struct>
	<struct name="LineWidth">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01CB" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<!--
			default = 0x2535 english metric units. 1587.5 EMUs is 1 Master Units
		-->
		<uint32 name="lineWidth" />
	</struct>
	<struct name="LineStyle">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01CD" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineStyle" />
	</struct>
	<struct name="LineDashing">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01CE" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineDashing" />
	</struct>
	<struct name="LineStartArrowhead">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D0" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineStartArrowhead">
			<limitation expression="&lt;=8" />
		</uint32>
	</struct>
	<struct name="LineEndArrowhead">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D1" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineEndArrowhead">
			<limitation expression="&lt;=8" />
		</uint32>
	</struct>
	<struct name="LineStartArrowWidth">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D2" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineStartArrowWidth" />
	</struct>
	<struct name="LineStartArrowLength">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D3" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineStartArrowLength" />
	</struct>
	<struct name="LineEndArrowWidth">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D4" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineEndArrowWidth" />
	</struct>
	<struct name="LineEndArrowLength">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D5" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineEndArrowLength" />
	</struct>
	<struct name="LineJoinStyle">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01D6" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lineJoinStyle">
			<limitation expression="&lt;=2" />
		</uint32>
	</struct>
	<struct name="LineStyleBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x01FF" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fNoLineDrawDash" />
		<bit name="fLineFillShape" />
		<bit name="fHitTestLine" />
		<bit name="fLine" />
		<bit name="fArrowHeadsOK" />
		<bit name="fInsetPenOK" />
		<bit name="fInsetPen" />
		<bit name="reserved1" />
		<bit name="reserved2" />
		<bit name="fLineOpaqueBackColor" />
		<uint6 name="unused1" />
		<bit name="fUseNoLineDrawDash" />
		<bit name="fUseLineFillShape" />
		<bit name="fUseHitTestLine" />
		<bit name="fUsefLine" />
		<bit name="fUsefArrowHeadsOK" />
		<bit name="fUseInsetPenOK" />
		<bit name="fUseInsetPen" />
		<bit name="unused2" />
		<bit name="unused3" />
		<bit name="fUsefLineOpaqueBackColor" />
		<uint6 name="unused4" />
	</struct>
	<struct name="ShadowColor">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0201" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="shadowColor" type="OfficeArtCOLORREF" />
	</struct>
	<struct name="ShadowOpacity">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0204" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<type name="shadowOpacity" type="FixedPoint" />
	</struct>
	<struct name="ShadowOffsetX">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0205" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="shadowOffsetX" />
	</struct>
	<struct name="ShadowOffsetY">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0206" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<int32 name="shadowOffsetY" />
	</struct>
	<struct name="ShadowStyleBooleanPropertiesr">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x023F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fshadowObscured" />
		<bit name="fShadow" />
		<uint14 name="unused1" />
		<bit name="fUsefshadowObscured" />
		<bit name="fUsefShadow" />
		<uint14 name="unused2" />
	</struct>
	<struct name="HspMaster">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0301" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="hspMaster" />
	</struct>
	<struct name="BWMode">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0304" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="bWMode">
			<limitation expression="&lt;=10" />
		</uint32>
	</struct>
	<struct name="TxflTextFlow">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0088" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="txflTextFlow" />
	</struct>
	<struct name="ShapeBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x033F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fBackground" />
		<bit name="reserved1" />
		<bit name="fInitiator" />
		<bit name="fLockShapeType" />
		<bit name="fPreferRelativeResize" />
		<bit name="fOleIcon" />
		<bit name="fFlipVOverride" />
		<bit name="fFlipHOverride" />
		<bit name="fPolicyBarcode" />
		<bit name="fPolicyLabel" />
		<bit name="unused1" />
		<bit name="unused2" />
		<uint4 name="unused3" />
		<bit name="fUsefBackground" />
		<bit name="unused4" />
		<bit name="fUsefInitiator" />
		<bit name="fUsefLockShapeType" />
		<bit name="fusePreferrelativeResize" />
		<bit name="fUsefOleIcon" />
		<bit name="fUsefFlipVOverride" />
		<bit name="fUsefFlipHOverride" />
		<bit name="fUsefPolicyBarcode" />
		<bit name="fUsefPolicyLabel" />
		<bit name="unused5" />
		<bit name="unused6" />
		<uint4 name="unused7" />
	</struct>
	<struct name="CalloutBooleanProperties">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x037F" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<bit name="fCalloutLengthSpecified" />
		<bit name="fCalloutDropAuto" />
		<bit name="fCalloutMinusY" />
		<bit name="fCalloutMinusX" />
		<bit name="fCalloutTextBorder" />
		<bit name="fCalloutAccentBar" />
		<bit name="fCallout" />
		<bit name="unused1a" />
		<uint8 name="unused1b" />
		<bit name="fUsefCalloutLengthSpecified" />
		<bit name="fUsefCalloutDropAuto" />
		<bit name="fUsefCalloutMinusY" />
		<bit name="fUsefCalloutMinusX" />
		<bit name="fUsefCalloutTextBorder" />
		<bit name="fUsefCalloutAccentBar" />
		<bit name="fUsefCallout" />
		<bit name="unused2a" />
		<uint8 name="unused2b" />
	</struct>
	<struct name="LidRegroup">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0388" />
			<limitation name="fBid" value="false" />
			<limitation name="fComplex" value="false" />
		</type>
		<uint32 name="lidRegroup" />
	</struct>
	<struct name="WzFillId">
		<type name="opid" type="OfficeArtFOPTEOPID">
			<limitation name="opid" value="0x0403" />
		</type>
		<int32 name="wzFillId" />
	</struct>
	<struct name="OfficeArtCOLORREF">
		<uint8 name="red" />
		<uint8 name="green" />
		<uint8 name="blue" />
		<bit name="fPaletteIndex" />
		<bit name="fPaletteRGB" />
		<bit name="fSystemRGB" />
		<bit name="fSchemeIndex" />
		<bit name="fSysIndex" />
		<bit name="unused1" />
		<bit name="unused2" />
		<bit name="unused3" />
	</struct>
	<struct name="OfficeArtChildAnchor">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF00F" />
			<limitation name="recLen" value="0x10" />
		</type>
		<int32 name="xLeft" />
		<int32 name="yTop" />
		<int32 name="xRight" />
		<int32 name="yBottom" />
	</struct>
	<struct name="OfficeArtClientAnchor">
		<choice name="anon">
			<type type="PptOfficeArtClientAnchor" />
			<type type="DocOfficeArtClientAnchor" />
		</choice>
	</struct>
	<struct name="PptOfficeArtClientAnchor">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF010" />
			<limitation name="recLen" value="0x8|0x10" />
		</type>
		<type name="rect1" type="SmallRectStruct" condition="rh.recLen==0x8" />
		<type name="rect2" type="RectStruct" condition="rh.recLen==0x10" />
	</struct>
	<struct name="DocOfficeArtClientAnchor">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF010" />
			<limitation name="recLen" value="0x4" />
		</type>
		<int32 name="clientAnchor" />
	</struct>
	<struct name="OfficeArtFPSPL">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF11D" />
			<limitation name="recLen" value="4" />
		</type>
		<uint30 name="spid" />
		<bit name="reserved1" />
		<bit name="fLast" />
	</struct>
	<struct name="RectStruct">
		<int32 name="top" />
		<int32 name="left" />
		<int32 name="right" />
		<int32 name="bottom" />
	</struct>
	<struct name="SmallRectStruct">
		<int16 name="top" />
		<int16 name="left" />
		<int16 name="right" />
		<int16 name="bottom" />
	</struct>
	<struct name="OfficeArtClientData">
		<choice name="anon">
			<type type="DocOfficeArtClientData" />
			<type type="PptOfficeArtClientData" />
		</choice>
	</struct>
	<struct name="PptOfficeArtClientData">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF011" />
		</type>
		<type name="shapeFlagsAtom" type="ShapeFlagsAtom" optional="true" />
		<type name="shapeFlags10Atom" type="ShapeFlags10Atom" optional="true" />
		<type name="exObjRefAtom" type="ExObjRefAtom" optional="true" />
		<type name="animationInfo" type="AnimationInfoContainer"
			optional="true" />
		<type name="mouseClickInteractiveInfo" type="MouseClickInteractiveInfoContainer"
			optional="true" />
		<type name="mouseOverInteractiveInfo" type="MouseOverInteractiveInfoContainer"
			optional="true" />
		<!--  sometimes this array occurs here -->
		<type name="rgShapeClientRoundtripData0" \
type="ShapeClientRoundtripDataSubcontainerOrAtom"  array="true" />
		<type name="placeholderAtom" type="PlaceholderAtom" optional="true" />
		<type name="recolorInfoAtom" type="RecolorInfoAtom" optional="true" />
		<type name="unknown1" type="UnknownOfficeArtClientDataChild"
			optional="true" />
		<type name="rgShapeClientRoundtripData" \
type="ShapeClientRoundtripDataSubcontainerOrAtom"  array="true" />
		<type name="unknown2" type="UnknownOfficeArtClientDataChild"
			optional="true" />
	</struct>
	<struct name="DocOfficeArtClientData">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF011" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="clientData" />
	</struct>
	<struct name="ShapeFlagsAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xBDB" />
			<limitation name="recLen" value="1" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ShapeFlags10Atom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xBDC" />
			<limitation name="recLen" value="1" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="ExObjRefAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xBC1" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="exObjIdRef" />
	</struct>
	<struct name="AnimationInfoContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x1014" />
		</type>
		<type name="animationAtom" type="AnimationInfoAtom" />
		<type name="animationSound" type="SoundContainer" optional="true" />
	</struct>
	<struct name="AnimationInfoAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x1" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFF1" />
			<limitation name="recLen" value="0x1C" />
		</type>
		<uint8 name="todo" count="0x1C" />
	</struct>
	<struct name="SoundContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x7E6" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="MouseClickInteractiveInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFF2" />
		</type>
		<type name="interactiveInfoAtom" type="InteractiveInfoAtom" />
		<type name="macroNameAtom" type="MacroNameAtom" condition="rh.recLen&gt;24" />
	</struct>
	<struct name="MouseOverInteractiveInfoContainer">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="1" />
			<limitation name="recType" value="0xFF2" />
		</type>
		<type name="interactiveInfoAtom" type="InteractiveInfoAtom" />
		<type name="macroNameAtom" type="MacroNameAtom" condition="rh.recLen&gt;24" />
	</struct>
	<struct name="InteractiveInfoAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<!--  value should be 0xFF3, but value 0xFF2 has been observed too -->
			<limitation name="recType" value="0xFF2|0xFF3" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint32 name="soundIdRef" />
		<uint32 name="exHyperlinkIdRef" />
		<uint8 name="action">
			<limitation expression="&lt;8" />
		</uint8>
		<uint8 name="oleVerb">
			<limitation expression="&lt;3" />
		</uint8>
		<uint8 name="jump">
			<limitation expression="&lt;7" />
		</uint8>
		<bit name="fAnimated" />
		<bit name="fStopSound" />
		<bit name="fCustomSoundReturn" />
		<bit name="fVisited" />
		<uint4 name="reserved" />
		<uint8 name="hyperlinkType" />
		<uint8 name="unused" count="3" />
	</struct>
	<struct name="MacroNameAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="2" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" expression="%2==0" />
		</type>
		<uint8 name="macroName" count="rh.recLen" />
	</struct>
	<struct name="PlaceholderAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xBC3" />
			<limitation name="recLen" value="8" />
		</type>
		<int32 name="position" />
		<uint8 name="placementId" />
		<uint8 name="size" />
		<uint16 name="unused" />
	</struct>
	<struct name="RecolorInfoAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFE7" />
		</type>
		<uint8 name="todo" count="rh.recLen" />
	</struct>
	<struct name="OutlineTextRefAtom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF9E" />
			<limitation name="recLen" value="4" />
		</type>
		<int32 name="index">
			<limitation expression="&gt;=0" />
		</int32>
	</struct>
	<struct name="ShapeClientRoundtripDataSubcontainerOrAtom">
		<!--
			<type name="rh" type="OfficeArtRecordHeader"> <limitation
			name="recType" value="0x1388|0xBDD|0x41F|0x420|0x426" /> </type>
			<uint8 name="todo" count="rh.recLen" />
		-->
		<choice name="anon">
			<type type="ShapeProgsTagContainer" />
			<type type="RoundTripNewPlaceHolderId12Atom" />
			<type type="RoundTripShapeId12Atom" />
			<type type="RoundTripHFPlaceholder12Atom" />
			<type type="RoundTripShapeCheckSumForCustomLayouts12Atom" />
		</choice>
	</struct>
	<struct name="ShapeProgsTagContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0|1|2" />
			<limitation name="recType" value="0x1388" />
		</type>
		<type name="rgChildRec" type="ShapeProgTagsSubContainerOrAtom"
			array="true" />
	</struct>
	<struct name="ShapeProgTagsSubContainerOrAtom">
		<choice name="anon">
			<type type="ProgStringTagContainer" />
			<type type="ShapeProgBinaryTagContainer" />
		</choice>
	</struct>
	<struct name="ShapeProgBinaryTagContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138A" />
		</type>
		<type name="rec" type="ShapeProgBinaryTagSubContainerOrAtom" />
	</struct>
	<struct name="ShapeProgBinaryTagSubContainerOrAtom">
		<choice name="anon">
			<type type="PP9ShapeBinaryTagExtension" />
			<type type="PP10ShapeBinaryTagExtension" />
			<type type="PP11ShapeBinaryTagExtension" />
			<type type="UnknownBinaryTag" />
		</choice>
	</struct>
	<struct name="PP9ShapeBinaryTagExtension">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0xE" />
		</type>
		<uint16 name="tagName" count="7">
			<!-- <limitation value='"___PPT9"' /> -->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<type name="styleTextProp9Atom" type="StyleTextProp9Atom" />
	</struct>
	<struct name="PP10ShapeBinaryTagExtension">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint16 name="tagName" count="8">
			<!-- <limitation value='"___PPT10"' /> -->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<uint8 name="todo" count="rhData.recLen" />
	</struct>
	<struct name="PP11ShapeBinaryTagExtension">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFBA" />
			<limitation name="recLen" value="0x10" />
		</type>
		<uint16 name="tagName" count="8">
			<!-- <limitation value='"___PPT11"' /> -->
		</uint16>
		<type name="rhData" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x138B" />
		</type>
		<uint8 name="todo" count="rhData.recLen" />
	</struct>
	<struct name="RoundTripNewPlaceHolderId12Atom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xBDD" />
			<limitation name="recLen" value="1" />
		</type>
		<uint8 name="newPlaceHolderId" />
	</struct>
	<struct name="RoundTripShapeId12Atom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x41F" />
			<limitation name="recLen" value="4" />
		</type>
		<uint32 name="shapeId" />
	</struct>
	<struct name="RoundTripHFPlaceholder12Atom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x420" />
			<limitation name="recLen" value="1" />
		</type>
		<uint8 name="placeHolderId" />
	</struct>
	<struct name="RoundTripShapeCheckSumForCustomLayouts12Atom">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0x426" />
			<!--  documentations says this field should be size 8 -->
			<limitation name="recLen" value="8|40" />
		</type>
		<uint32 name="shapeCheckSum" />
		<uint32 name="textCheckSum" />
		<uint8 name="unknown" count="rh.recLen-8" />
	</struct>
	<struct name="OfficeArtClientTextBox">
		<choice name="anon">
			<type type="PptOfficeArtClientTextBox" />
			<type type="DocOfficeArtClientTextBox" />
		</choice>
	</struct>
	<struct name="PptOfficeArtClientTextBox">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0|0xF" />
			<!--  documentation says value should be 0 -->
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF00D" />
			<limitation name="recLen" expression="!=4" />
		</type>
		<type name="rgChildRec" array="true" size="rh.recLen"
			type="TextClientDataSubContainerOrAtom" />
	</struct>
	<struct name="DocOfficeArtClientTextBox">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0|0xF" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xF00D" />
			<limitation name="recLen" value="0x4" />
		</type>
		<uint32 name="clientTextBox" />
	</struct>
	<struct name="TextRulerAtom">
		<type name="rh" type="RecordHeader">
			<limitation name="recVer" value="0" />
			<limitation name="recInstance" value="0" />
			<limitation name="recType" value="0xFA6" />
		</type>
		<type name="textRuler" type="TextRuler" />
	</struct>
	<struct name="OfficeArtIDCL">
		<uint32 name="dgid" />
		<uint32 name="cspidCur" />
	</struct>
	<struct name="OfficeArtFOPTE">
		<type name="opid" type="OfficeArtFOPTEOPID" />
		<int32 name="op" />
	</struct>
	<struct name="OfficeArtFOPTEOPID">
		<uint14 name="opid" />
		<bit name="fBid" />
		<bit name="fComplex" />
	</struct>
	<struct name="OfficeArtColorMRUContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recType" value="0xF11A" />
			<limitation expression="recLen==4*recInstance" />
		</type>
		<type name="rgmsocr" type="MSOCR" count="rh.recInstance" />
	</struct>
	<struct name="MSOCR">
		<uint8 name="red" />
		<uint8 name="green" />
		<uint8 name="blue" />
		<uint3 name="unused1" />
		<bit name="fSchemeIndex" />
		<uint4 name="unused2" />
		<!--
			an addition limitation is needed that says that if fSchemeIndex ==1
			then green and blue must be 0
		-->
	</struct>
	<struct name="OfficeArtSplitMenuColorContainer">
		<type name="rh" type="OfficeArtRecordHeader">
			<limitation name="recVer" value="0x0" />
			<limitation name="recInstance" value="0x4" />
			<limitation name="recType" value="0xF11E" />
			<limitation name="recLen" value="0x10" />
		</type>
		<type name="smca" type="MSOCR" count="4" />
	</struct>
	<struct name="todo">
		<!--
			a placeholder for structures that are not in the document
			specification yet
		-->
		<type name="rh" type="RecordHeader">
			<!--
				disallow structures that are implemented <limitation name="recType"
				value="!1000" />
			-->
		</type>
		<uint8 name="anon" count="rh.recLen" />
	</struct>
	<struct name="WordDocument">
		<type name="fib" type="Fib" />
	</struct>
	<struct name="Fib">
		<type name="base" type="FibBase" />
		<uint16 name="csw">
			<limitation value="14" />
		</uint16>
		<type name="fibRgW" type="FibRgW97" />
		<uint16 name="cslw">
			<limitation value="22" />
		</uint16>
		<type name="fibRgLw" type="FibRgLw97" />
		<uint16 name="cbRgFcLcb">
			<limitation value="0x5D|0x6C|0x88|0xA4|0xB7" />
		</uint16>
		<type name="fibRgFcLcbBlob" type="FibRgFcLcb97" />
		<type name="fibRgFcLcbBlob2" type="FibRgFcLcb2000" condition="cbRgFcLcb&gt;=0x6C" \
/>  <type name="fibRgFcLcbBlob3" type="FibRgFcLcb2002" condition="cbRgFcLcb&gt;=0x88" \
/>  <uint16 name="cswNew">
			<limitation value="0|2|5" />
		</uint16>
		<uint8 name="fibRgCswNew" count="2*cswNew" />
		<!--  <type name="fibRgCswNew" type="fibRgCswNew" />-->
		<uint8 name="trail" count="fibRgLw.cbMac-156-8*cbRgFcLcb-2*cswNew" />
	</struct>
	<struct name="FibBase">
		<uint16 name="wIdent">
			<limitation value="0xA5EC" />
		</uint16>
		<uint16 name="nFib">
			<limitation value="0xC0|0xC1|0xC2|0x101|0x10B|0x10C|0x112" />
		</uint16>
		<uint16 name="unused" />
		<uint16 name="lid" />
		<uint16 name="pnNext" />
		<bit name="fDot" />
		<bit name="fGlsy" />
		<bit name="fComplex" />
		<bit name="fHasPic" />
		<uint4 name="cQuickSaves" />
		<bit name="fEncrypted" />
		<bit name="fWhichTblStm" />
		<bit name="fReadOnlyRecommended" />
		<bit name="fWriteReservation" />
		<bit name="fExtChar" />
		<bit name="fLoadOverride" />
		<bit name="fFarEast" />
		<bit name="fObfuscated" />
		<uint16 name="nFibBack">
			<limitation value="0xBF|0xC1" />
		</uint16>
		<uint32 name="IKey" />
		<uint8 name="envr">
			<limitation value="0" />
		</uint8>
		<bit name="fMac">
			<limitation value="false" />
		</bit>
		<bit name="fEmptySpecial" />
		<bit name="fLoadOverridePage" />
		<bit name="reserved1" />
		<bit name="reserved2" />
		<uint3 name="fSpare0" />
		<uint16 name="reserved3">
			<limitation value="0" />
		</uint16>
		<uint16 name="reserved4">
			<limitation value="0" />
		</uint16>
		<uint32 name="reserved5" />
		<uint32 name="reserved6" />
	</struct>
	<struct name="FibRgW97">
		<uint16 name="reserved1" />
		<uint16 name="reserved2" />
		<uint16 name="reserved3" />
		<uint16 name="reserved4" />
		<uint16 name="reserved5" />
		<uint16 name="reserved6" />
		<uint16 name="reserved7" />
		<uint16 name="reserved8" />
		<uint16 name="reserved9" />
		<uint16 name="reserved10" />
		<uint16 name="reserved11" />
		<uint16 name="reserved12" />
		<uint16 name="reserved13" />
		<uint16 name="lidFE" />
	</struct>
	<struct name="FibRgLw97">
		<uint32 name="cbMac" />
		<uint32 name="reserved1" />
		<uint32 name="reserved2" />
		<int32 name="ccpText">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="ccpFtn">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="ccpHdd">
			<limitation expression="&gt;=0" />
		</int32>
		<uint32 name="reserved3">
			<limitation value="0" />
		</uint32>
		<int32 name="ccpAtn">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="ccpEdn">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="ccpTxbx">
			<limitation expression="&gt;=0" />
		</int32>
		<int32 name="ccpHdrTxbx">
			<limitation expression="&gt;=0" />
		</int32>
		<uint32 name="reserved4" />
		<uint32 name="reserved5" />
		<uint32 name="reserved6" />
		<uint32 name="reserved7" />
		<uint32 name="reserved8" />
		<uint32 name="reserved9" />
		<uint32 name="reserved10" />
		<uint32 name="reserved11" />
		<uint32 name="reserved12" />
		<uint32 name="reserved13">
			<limitation value="0" />
		</uint32>
		<uint32 name="reserved14">
			<limitation value="0" />
		</uint32>
	</struct>
	<struct name="FibRgFcLcb97">
		<uint32 name="fcStshfOrig" />
		<uint32 name="lcbStshfOrig" />
		<uint32 name="fcStshf" />
		<uint32 name="lcbStshf" />
		<uint32 name="fcPlcffndRef" />
		<uint32 name="lcbPlcffndRef" />
		<uint32 name="fcPlcffndTxt" />
		<uint32 name="lcbPlcffndTxt" />
		<uint32 name="fcPlcfandRef" />
		<uint32 name="lcbPlcfandRef" />
		<uint32 name="fcPlcfandTxt" />
		<uint32 name="lcbPlcfandTxt" />
		<uint32 name="fcPlcfSed" />
		<uint32 name="lcbPlcfSed" />
		<uint32 name="fcPlcPad" />
		<uint32 name="lcbPlcPad" />
		<uint32 name="fcPlcfPhe" />
		<uint32 name="lcbPlcfPhe" />
		<uint32 name="fcSttbfGlsy" />
		<uint32 name="lcbSttbfGlsy" />
		<uint32 name="fcPlcfGlsy" />
		<uint32 name="lcbPlcfGlsy" />
		<uint32 name="fcPlcfHdd" />
		<uint32 name="lcbPlcfHdd" />
		<uint32 name="fcPlcfBteChpx" />
		<uint32 name="lcbPlcfBteChpx" />
		<uint32 name="fcPlcfBtePapx" />
		<uint32 name="lcbPlcfBtePapx" />
		<uint32 name="fcPlcfSea" />
		<uint32 name="lcbPlcfSea" />
		<uint32 name="fcSttbfFfn" />
		<uint32 name="lcbSttbfFfn" />
		<uint32 name="fcPlcfFldMom" />
		<uint32 name="lcbPlcfFldMom" />
		<uint32 name="fcPlcfFldHdr" />
		<uint32 name="lcbPlcfFldHdr" />
		<uint32 name="fcPlcfFldFtn" />
		<uint32 name="lcbPlcfFldFtn" />
		<uint32 name="fcPlcfFldAtn" />
		<uint32 name="lcbPlcfFldAtn" />
		<uint32 name="fcPlcfFldMcr" />
		<uint32 name="lcbPlcfFldMcr" />
		<uint32 name="fcSttbfBkmk" />
		<uint32 name="lcbSttbfBkmk" />
		<uint32 name="fcPlcfBkf" />
		<uint32 name="lcbPlcfBkf" />
		<uint32 name="fcPlcfBkl" />
		<uint32 name="lcbPlcfBkl" />
		<uint32 name="fcCmds" />
		<uint32 name="lcbCmds" />
		<uint32 name="fcUnused1" />
		<uint32 name="lcbUnused1" />
		<uint32 name="fcSttbfMcr" />
		<uint32 name="lcbSttbfMcr" />
		<uint32 name="fcPrDrvr" />
		<uint32 name="lcbPrDrvr" />
		<uint32 name="fcPrEnvPort" />
		<uint32 name="lcbPrEnvPort" />
		<uint32 name="fcPrEnvLand" />
		<uint32 name="lcbPrEnvLand" />
		<uint32 name="fcWss" />
		<uint32 name="lcbWss" />
		<uint32 name="fcDop" />
		<uint32 name="lcbDop" />
		<uint32 name="fcSttbfAssoc" />
		<uint32 name="lcbSttbfAssoc" />
		<uint32 name="fcClx" />
		<uint32 name="lcbClx" />
		<uint32 name="fcPlcfPgdFtn" />
		<uint32 name="lcbPlcfPgdFtn" />
		<uint32 name="fcAutosaveSource" />
		<uint32 name="lcbAutosaveSource" />
		<uint32 name="fcGrpXstAtnOwners" />
		<uint32 name="lcbGrpXstAtnOwners" />
		<uint32 name="fcSttbfAtnBkmk" />
		<uint32 name="lcbSttbfAtnBkmk" />
		<uint32 name="fcUnused2" />
		<uint32 name="lcbUnused2" />
		<uint32 name="fcUnused3" />
		<uint32 name="lcbUnused3" />
		<uint32 name="fcPlcSpaMom" />
		<uint32 name="lcbPlcSpaMom" />
		<uint32 name="fcPlcSpaHdr" />
		<uint32 name="lcbPlcSpaHdr" />
		<uint32 name="fcPlcfAtnBkf" />
		<uint32 name="lcbPlcfAtnBkf" />
		<uint32 name="fcPlcfAtnBkl" />
		<uint32 name="lcbPlcfAtnBkl" />
		<uint32 name="fcPms" />
		<uint32 name="lcbPms" />
		<uint32 name="fcFormFldSttbs" />
		<uint32 name="lcbFormFldSttbs" />
		<uint32 name="fcPlcfendRef" />
		<uint32 name="lcbPlcfendRef" />
		<uint32 name="fcPlcfendTxt" />
		<uint32 name="lcbPlcfendTxt" />
		<uint32 name="fcPlcfFldEdn" />
		<uint32 name="lcbPlcfFldEdn" />
		<uint32 name="fcUnused4" />
		<uint32 name="lcbUnused4" />
		<uint32 name="fcDggInfo" />
		<uint32 name="lcbDggInfo" />
		<uint32 name="fcSttbfRMark" />
		<uint32 name="lcbSttbfRMark" />
		<uint32 name="fcSttbfCaption" />
		<uint32 name="lcbSttbfCaption" />
		<uint32 name="fcSttbfAutoCaption" />
		<uint32 name="lcbSttbfAutoCaption" />
		<uint32 name="fcPlcfWkb" />
		<uint32 name="lcbPlcfWkb" />
		<uint32 name="fcPlcfSpl" />
		<uint32 name="lcbPlcfSpl" />
		<uint32 name="fcPlcftxbxTxt" />
		<uint32 name="lcbPlcftxbxTxt" />
		<uint32 name="fcPlcfFldTxbx" />
		<uint32 name="lcbPlcfFldTxbx" />
		<uint32 name="fcPlcfHdrtxbxTxt" />
		<uint32 name="lcbPlcfHdrtxbxTxt" />
		<uint32 name="fcPlcffldHdrTxbx" />
		<uint32 name="lcbPlcffldHdrTxbx" />
		<uint32 name="fcStwUser" />
		<uint32 name="lcbStwUser" />
		<uint32 name="fcSttbTtmbd" />
		<uint32 name="lcbSttbTtmbd" />
		<uint32 name="fcCookieData" />
		<uint32 name="lcbCookieData" />
		<uint32 name="fcPgdMotherOldOld" />
		<uint32 name="lcbPgdMotherOldOld" />
		<uint32 name="fcBkdMotherOldOld" />
		<uint32 name="lcbBkdMotherOldOld" />
		<uint32 name="fcPgdFtnOldOld" />
		<uint32 name="lcbPgdFtnOldOld" />
		<uint32 name="fcBkdFtnOldOld" />
		<uint32 name="lcbBkdFtnOldOld" />
		<uint32 name="fcPgdEdnOldOld" />
		<uint32 name="lcbPgdEdnOldOld" />
		<uint32 name="fcBkdEdnOldOld" />
		<uint32 name="lcbBkdEdnOldOld" />
		<uint32 name="fcSttbfIntlFld" />
		<uint32 name="lcbSttbfIntlFld" />
		<uint32 name="fcRouteSlip" />
		<uint32 name="lcbRouteSlip" />
		<uint32 name="fcSttbSavedBy" />
		<uint32 name="lcbSttbSavedBy" />
		<uint32 name="fcSttbFnm" />
		<uint32 name="lcbSttbFnm" />
		<uint32 name="fcPlfLst" />
		<uint32 name="lcbPlfLst" />
		<uint32 name="fcPlfLfo" />
		<uint32 name="lcbPlfLfo" />
		<uint32 name="fcPlcfTxbxBkd" />
		<uint32 name="lcbPlcfTxbxBkd" />
		<uint32 name="fcPlcfTxbxHdrBkd" />
		<uint32 name="lcbPlcfTxbxHdrBkd" />
		<uint32 name="fcDocUndoWord9" />
		<uint32 name="lcbDocUndoWord9" />
		<uint32 name="fcRgbUse" />
		<uint32 name="lcbRgbUse" />
		<uint32 name="fcUsp" />
		<uint32 name="lcbUsp" />
		<uint32 name="fcUskf" />
		<uint32 name="lcbUskf" />
		<uint32 name="fcPlcupcRgbUse" />
		<uint32 name="lcbPlcupcRgbUse" />
		<uint32 name="fcPlcupcUsp" />
		<uint32 name="lcbPlcupcUsp" />
		<uint32 name="fcSttbGlsyStyle" />
		<uint32 name="lcbSttbGlsyStyle" />
		<uint32 name="fcPlgosl" />
		<uint32 name="lcbPlgosl" />
		<uint32 name="fcPlcocx" />
		<uint32 name="lcbPlcocx" />
		<uint32 name="fcPlcfBteLvc" />
		<uint32 name="lcbPlcfBteLvc" />
		<uint32 name="dwLowDateTime" />
		<uint32 name="dwHighDateTime" />
		<uint32 name="fcPlcfLvcPre10" />
		<uint32 name="lcbPlcfLvcPre10" />
		<uint32 name="fcPlcfAsumy" />
		<uint32 name="lcbPlcfAsumy" />
		<uint32 name="fcPlcfGram" />
		<uint32 name="lcbPlcfGram" />
		<uint32 name="fcSttbListNames" />
		<uint32 name="lcbSttbListNames" />
		<uint32 name="fcSttbfUssr" />
		<uint32 name="lcbSttbfUssr" />
	</struct>
	<struct name="FibRgFcLcb2000">
		<uint32 name="fcPlcfTch" />
		<uint32 name="lcbPlcfTch" />
		<uint32 name="fcRmdThreading" />
		<uint32 name="lcbRmdThreading" />
		<uint32 name="fcMid" />
		<uint32 name="lcbMid" />
		<uint32 name="fcSttbRgtplc" />
		<uint32 name="lcbSttbRgtplc" />
		<uint32 name="fcMsoEnvelope" />
		<uint32 name="lcbMsoEnvelope" />
		<uint32 name="fcPlcfLad" />
		<uint32 name="lcbPlcfLad" />
		<uint32 name="fcRgDofr" />
		<uint32 name="lcbRgDofr" />
		<uint32 name="fcPlcosl" />
		<uint32 name="lcbPlcosl" />
		<uint32 name="fcPlcfCookieOld" />
		<uint32 name="lcbPlcfCookieOld" />
		<uint32 name="fcPgdMotherOld" />
		<uint32 name="lcbPgdMotherOld" />
		<uint32 name="fcBkdMotherOld" />
		<uint32 name="lcbBkdMotherOld" />
		<uint32 name="fcPgdFtnOld" />
		<uint32 name="lcbPgdFtnOld" />
		<uint32 name="fcBkdFtnOld" />
		<uint32 name="lcbBkdFtnOld" />
		<uint32 name="fcPgdEdnOld" />
		<uint32 name="lcbPgdEdnOld" />
		<uint32 name="fcBkdEdnOld" />
		<uint32 name="lcbBkdEdnOld" />
	</struct>
	<struct name="FibRgFcLcb2002">
		<uint32 name="fcUnused1" />
		<uint32 name="lcbUnused1" />
		<uint32 name="fcPlcfPgp" />
		<uint32 name="lcbPlcfPgp" />
		<uint32 name="fcPlcfuim" />
		<uint32 name="lcbPlcfuim" />
		<uint32 name="fcPlfguidUim" />
		<uint32 name="lcbPlfguidUim" />
		<uint32 name="fcAtrdExtra" />
		<uint32 name="lcbAtrdExtra" />
		<uint32 name="fcPlrsid" />
		<uint32 name="lcbPlrsid" />
		<uint32 name="fcSttbfBkmkFactoid" />
		<uint32 name="lcbSttbfBkmkFactoid" />
		<uint32 name="fcPlcfBkfFactoid" />
		<uint32 name="lcbPlcfBkfFactoid" />
		<uint32 name="fcPlcfcookie" />
		<uint32 name="lcbPlcfcookie" />
		<uint32 name="fcPlcfBklFactoid" />
		<uint32 name="lcbPlcfBklFactoid" />
		<uint32 name="fcFactoidData" />
		<uint32 name="lcbFactoidData" />
		<uint32 name="fcDocUndo" />
		<uint32 name="lcbDocUndo" />
		<uint32 name="fcSttbfBkmkFcc" />
		<uint32 name="lcbSttbfBkmkFcc" />
		<uint32 name="fcPlcfBkfFcc" />
		<uint32 name="lcbPlcfBkfFcc" />
		<uint32 name="fcPlcfBklFcc" />
		<uint32 name="lcbPlcfBklFcc" />
		<uint32 name="fcSttbfbkmkBPRepairs" />
		<uint32 name="lcbSttbfbkmkBPRepairs" />
		<uint32 name="fcPlcfbkfBPRepairs" />
		<uint32 name="lcbPlcfbkfBPRepairs" />
		<uint32 name="fcPlcfbklBPRepairs" />
		<uint32 name="lcbPlcfbklBPRepairs" />
		<uint32 name="fcPmsNew" />
		<uint32 name="lcbPmsNew" />
		<uint32 name="fcODSO" />
		<uint32 name="lcbODSO" />
		<uint32 name="fcPlcfpmiOldXP" />
		<uint32 name="lcbPlcfpmiOldXP" />
		<uint32 name="fcPlcfpmiNewXP" />
		<uint32 name="lcbPlcfpmiNewXP" />
		<uint32 name="fcPlcfpmiMixedXP" />
		<uint32 name="lcbPlcfpmiMixedXP" />
		<uint32 name="fcUnused2" />
		<uint32 name="lcbUnused2" />
		<uint32 name="fcPlcffactoid" />
		<uint32 name="lcbPlcffactoid" />
	</struct>
	<struct name="Table">
		<type name="stsh" type="STSH" size="468" />
		<type name="plcfSed" type="PlcfSed" size="20" />
		<!--
			size should be gotten from lcbPlcfSed
		-->
		<type name="plcfHdd" type="Plcfhdd" size="52" />
		<type name="plcfBteChpx" type="PlcBteChpx" size="12" />
		<type name="plcfBtePapx" type="PlcfBtePapx" size="12" />
		<type name="cmds" type="Tcg" size="12" />
		<type name="clx" type="Clx" size="21" />
		<type name="sttbfFfn" type="SttbfFfn" size="246" />
		<uint8 name="dop" count="600" />
	</struct>
	<struct name="STSH">
		<type name="lpstshi" type="LPStshi" />
		<type name="rglpstd" type="LPStd" count="20" />
	</struct>
	<struct name="LPStshi">
		<uint16 name="cbSthi" />
		<uint8 name="stshi" count="cbSthi" />
	</struct>
	<struct name="LPStd">
		<uint16 name="cbStd" />
		<uint8 name="std" count="cbStd" />
		<uint8 name="padding" condition="cbStd%2==1" />
	</struct>
	<struct name="PlcfSed">
		<uint32 name="aCP" count="2" />
		<type name="aSed" type="Sed" count="1" />
	</struct>
	<struct name="Sed">
		<uint16 name="fn" />
		<int32 name="fcSepx" />
		<uint16 name="fnMpr" />
		<uint32 name="fcMpr" />
	</struct>
	<struct name="Plcfhdd">
		<uint32 name="aCP" count="13" />
	</struct>
	<struct name="PlcBteChpx">
		<uint32 name="aCP" count="2" />
		<uint32 name="aPnBteChpx" count="1" />
	</struct>
	<struct name="PlcfBtePapx">
		<uint32 name="aCP" count="2" />
		<uint32 name="aPnBteChpx" count="1" />
	</struct>
	<struct name="Tcg">
		<uint8 name="nTcgVer">
			<limitation value="0" />
		</uint8>
		<uint8 name="todo" count="11" />
	</struct>
	<struct name="Clx">
		<type name="RgPrc" type="Pcr" array="true" />
		<type name="pcdt" type="Pcdt" />
	</struct>
	<struct name="Pcr">
		<uint8 name="clxt">
			<limitation value="1" />
		</uint8>
		<type name="prcData" type="PrcData" />
	</struct>
	<struct name="PrcData">
		<int16 name="cbGrpprl">
			<limitation expression="&gt;=0" />
			<limitation expression="&lt;=16290" />
			<limitation expression="%2==0" />
		</int16>
		<type name="GrpPrl" type="Sprm" count="cbGrpprl/2" />
	</struct>
	<struct name="Sprm">
		<uint9 name="ispmd" />
		<bit name="fSpec" />
		<uint3 name="sgc" />
		<uint3 name="spra" />
	</struct>
	<struct name="Pcdt">
		<uint8 name="clxt">
			<limitation value="2" />
		</uint8>
		<uint32 name="lcb" />
		<type name="PlcPcd" type="Pcd" count="lcb/8" />
	</struct>
	<struct name="Pcd">
		<bit name="fNoParaLast" />
		<bit name="fR1" />
		<bit name="fDirtly">
			<limitation value="false" />
		</bit>
		<bit name="fR2" />
		<uint12 name="fR3" />
		<type name="fc" type="FCompressed" />
		<type name="prm" type="Prm" />
	</struct>
	<struct name="FCompressed">
		<uint30 name="fc" />
		<bit name="fCompressed" />
		<bit name="r1" />
	</struct>
	<struct name="Prm">
		<choice name="prm">
			<type type="Prm0" />
			<type type="Prm1" />
		</choice>
	</struct>
	<struct name="Prm0">
		<bit name="fComplex">
			<limitation value="false" />
		</bit>
		<uint7 name="isprm" />
		<uint8 name="val" />
	</struct>
	<struct name="Prm1">
		<bit name="fComplex">
			<limitation value="true" />
		</bit>
		<uint15 name="igrpprl" />
	</struct>
	<struct name="SttbfFfn">
		<uint16 name="cData" />
		<uint16 name="cbExtra">
			<limitation value="0" />
		</uint16>
		<type name="data" type="SttbfFfnEntry" count="cData" />
	</struct>
	<struct name="SttbfFfnEntry">
		<uint8 name="cchData" />
		<uint8 name="Data" count="cchData" />
	</struct>
	<struct name="CodePageString">
		<!--  limitation here is complicated: todo -->
		<uint32 name="size">
			<!--  <limitation expression="%2==0" /> -->
		</uint32>
		<!--  needs padding to a multiple of 4 -->
		<uint8 name="characters" count="4*(size/4)+((size%4!=0)?4:0)" />
	</struct>
	<struct name="FILETIME">
		<uint32 name="dwLowDateTime" />
		<uint32 name="dwHighDateTime" />
	</struct>
	<struct name="ClipboardData">
		<uint32 name="size" />
		<uint32 name="format" />
		<!--  needs padding to a multiple of 4 -->
		<uint8 name="data" count="4*(size/4)+((size%4!=0)?4:0)-4" />
	</struct>
	<struct name="PropertyIdentifierAndOffset">
		<uint32 name="propertyIdentifier" />
		<uint32 name="offset" />
	</struct>
	<struct name="TypedPropertyValue">
		<!--
			size="../PropertySetStream._count()"">
		-->
		<uint16 name="type" />
		<uint16 name="padding">
			<!-- 	<limitation value="0" />-->
		</uint16>
		<uint16 name="vt_I2" condition="type==2" />
		<uint16 name="paddingI2" condition="type==2" />
		<uint32 name="vg_ERROR" condition="type==10" />
		<type name="vt_lpstr" type="CodePageString" condition="type==30" />
		<type name="vg_FILETIME" type="FILETIME" condition="type==64" />
		<type name="vg_CF" type="ClipboardData" condition="type==71" />
		<!--
			<uint8 name="padding"
			count="../PropertySetStream[position()=this._arraypos]" />
		-->
	</struct>
	<struct name="PropertySet">
		<uint32 name="size" />
		<uint32 name="numProperties" />
		<type name="propertyIdentifierAndOffset" type="PropertyIdentifierAndOffset"
			count="numProperties" />
		<type name="property" type="TypedPropertyValue" count="numProperties" />
	</struct>
	<struct name="PropertySetStream">
		<uint16 name="byteOrder">
			<limitation value="0xFFFE" />
		</uint16>
		<uint16 name="version" />
		<uint32 name="systemIdentifier" />
		<uint8 name="clsID" count="16" />
		<uint32 name="numPropertySets">
			<limitation value="1|2" />
		</uint32>
		<uint8 name="fmtID0" count="16" />
		<uint32 name="offset0" />
		<uint8 name="fmtID1" count="16" condition="numPropertySets==2" />
		<uint32 name="offset1" condition="numPropertySets==2" />
		<type name="propertySet1" type="PropertySet" />
		<type name="propertySet2" type="PropertySet" condition="numPropertySets==2" />
		<type name="padding" type="Byte" array="true" />
	</struct>
	<struct name="SummaryInformationPropertySetStream">
		<type name="propertySet" type="PropertySetStream">
			<limitation name="version" value="0" />
		</type>
	</struct>
	<struct name="DocumentSummaryInformationPropertySetStream">
		<type name="propertySet" type="PropertySetStream">
			<limitation name="version" value="0" />
		</type>
	</struct>
	<stream name="PowerPointDocument" key="PowerPoint Document"
		type="PowerPointStructs" />
	<stream name="CurrentUser" key="Current User" type="CurrentUserStream" />
	<stream name="Pictures" key="Pictures" type="OfficeArtBStoreDelay" />
	<stream name="WordDocument" key="WordDocument" type="WordDocument" />
	<stream name="1Table" key="1Table" type="Table" />
	<stream name="SummaryInformation" key="SummaryInformation"
		type="SummaryInformationPropertySetStream" />
	<stream name="DocumentSummaryInformation" key="DocumentSummaryInformation"
		type="DocumentSummaryInformationPropertySetStream" />
	<!--
		two temporary streams to work around the fact that we cannot parse
		StyleTextPropAtom
	-->
	<stream name="textPFRun" key="textPFRun" type="TextPFRun" />
	<stream name="textCFRun" key="textCFRun" type="TextCFRun" />
</mso>



_______________________________________________
koffice-devel mailing list
koffice-devel@kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic