AI Sections: Difference between revisions

Formatted for wiki display.
(Created page with "=== AISectionsData === {| class="wikitable" ! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments |- | 0x0 || 0x4 || AISection * || mpaSections || || AISection format || |- | 0x4 || 0x4 || SectionResetPair * || mpaSectionResetPairs || || SectionResetPair format || |- | 0x8 || 0x14 || float32_t[5] || mafSectionMinSpeeds || || || |- | 0x1C || 0x14 || float32_t[5] || mafSectionMaxSpeeds || || || |- | 0x30 || 0x4 || uint32_t || muNumSectio...")
 
(Formatted for wiki display.)
Line 1:
The AI sections resource encompasses the routes the AI takes along with details on each section such as speed and shortcut information.
=== AISectionsData ===
 
= Structures =
=== BrnAI::AISectionsData ===
==== 32-bit ====
{| class="wikitable"
! Offset !! SizeLength !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x4 || [[#BrnAI::AISection | AISection]]* || mpaSections || || AISection format ||
|-
| 0x4 || 0x4 || [[#BrnAI::SectionResetPair | SectionResetPair]]* || mpaSectionResetPairs || || SectionResetPair format ||
|-
| 0x8 || 0x14 || float32_t[5] || mafSectionMinSpeeds || || ||
|-
| 0x1C || 0x14 || float32_t[5] || mafSectionMaxSpeeds || || ||
|-
| 0x30 || 0x4 || uint32_t || muNumSections || || ||
|-
| 0x34 || 0x4 || uint32_t || muNumSectionResetPairs || || ||
|-
| 0x38 || 0x4 || uint32_t || muVersion || || 12 ||
|-
| 0x3C || 0x4 || uint32_t || muSizeInBytes || || ||
|}
 
=== AISection ===
==== 64-bit ====
{| class="wikitable"
! Offset !! SizeLength !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x40x8 || Portal[[#BrnAI::AISection * || mpaPortalsAISection]]* || mpaSections || Portal format ||
|-
| 0x40x8 || 0x40x8 || BoundaryLine[[#BrnAI::SectionResetPair * || mpaNoGoLinesSectionResetPair]]* || mpaSectionResetPairs || BoundaryLine format ||
|-
| 0x80x10 || 0x40x14 || Vector2 * || mpaCornersfloat32_t[5] || mafSectionMinSpeeds || ||
|-
| 0xC0x24 || 0x40x14 || AISectionIdfloat32_t[5] || mId || Section GameDB IDmafSectionMaxSpeeds || ||
|-
| 0x100x38 || 0x20x4 || SpanIndex || miSpanIndexuint32_t || muNumSections || ||
|-
| 0x120x3C || 0x20x4 || uint16_t || muNumNoGoLinesuint32_t || muNumSectionResetPairs || ||
|-
| 0x140x40 || 0x10x4 || uint8_t || mu8NumPortalsuint32_t || muVersion || || 12
|-
| 0x150x44 || 0x10x4 || uint8_tuint32_t || muSpeedmuSizeInBytes || SectionSpeed || 0x0 = E_SECTION_SPEED_VERY_SLOW ||
|}
 
=== BrnAI::AISection ===
==== 32-bit ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || [[#BrnAI::Portal || Portal]]* || mpaPortals || 0x1 = E_SECTION_SPEED_SLOW ||
|-
| 0x4 || 0x4 || [[#BrnAI::BoundaryLine || BoundaryLine]]* || mpaNoGoLines || 0x2 = E_SECTION_SPEED_NORMAL ||
|-
| 0x8 || 0x4 || [[Common ||Data Types (Burnout Paradise)#Vector2 || Vector2]]* || 0x3mpaCorners =|| E_SECTION_SPEED_FAST ||
|-
| 0xC || 0x4 || [[#BrnAI::AISection::AISectionId || AISectionId]] || mId || 0x4Section =GameDB E_SECTION_SPEED_VERY_FASTID ||
|-
| 0x10 || 0x2 || [[#BrnStreetData::Road::SpanIndex || SpanIndex]] || miSpanIndex || 0x5 = E_SECTION_SPEED_COUNT ||
|-
| 0x160x12 || 0x10x2 || uint8_tuint16_t || mu8eDistrictmuNumNoGoLines || District || || Always null
|-
| 0x170x14 || 0x1 || uint8_t || mx8Flags || 0x01 (Bit 0) = IsShortcutmu8NumPortals || ||
|-
| 0x15 || 0x1 || uint8_t || muSpeed || 0x02 (Bit 1) = IsNoResetSectionSpeed || NoSee reset[[#BrnAI::SectionSpeed on track point || SectionSpeed]]
|-
| 0x16 || 0x1 || uint8_t || mu8eDistrict || 0x04 (Bit 2) = IsInAirDistrict || Typically right before jumps ||Always null
|-
| 0x17 || 0x1 || uint8_t || mx8Flags || Flags || See [[#AISection flags | flags]]
| || || || || 0x08 (Bit 3) = IsTerminator || Indicates walls etc. May not be end of the road ||
|}
 
==== 64-bit ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x8 || [[#BrnAI::Portal || Portal]]* || 0x10 (Bit 4) = IsJunctionmpaPortals || Likely required for events ||
|-
| 0x8 || 0x8 || [[#BrnAI::BoundaryLine | BoundaryLine]]* || mpaNoGoLines || ||
| || || || || 0x20 (Bit 5) = IsSplit || Road split, like at Moore/E. Crawford ||
|-
| 0x10 || 0x8 || [[Common ||Data || 0x40Types (BitBurnout 6Paradise)#Vector2 =| Vector2]]* || IsAIShortcutmpaCorners || ||
|-
| 0x18 || 0x4 || [[#BrnAI::AISection::AISectionId || AISectionId]] || 0x80mId (Bit|| 7)Section = IsInterstateExit ||GameDB ID ||
|}
=== Portal ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x00x1C || 0x40x2 || float32_t[[#BrnStreetData::Road::SpanIndex || mPositionXSpanIndex]] || miSpanIndex || ||
|-
| 0x40x1E || 0x40x2 || float32_t || mPositionYuint16_t || muNumNoGoLines || ||
|-
| 0x80x20 || 0x40x1 || float32_t || mPositionZuint8_t || mu8NumPortals || ||
|-
| 0xC0x21 || 0x40x1 || BoundaryLine *uint8_t || mpaBoundaryLinesmuSpeed || SectionSpeed || BoundaryLineSee format[[#BrnAI::SectionSpeed || SectionSpeed]]
|-
| 0x100x22 || 0x20x1 || uint16_tuint8_t || mu16LinkSectionmu8eDistrict || Section indexDistrict || Always || null
|-
| 0x120x23 || 0x1 || uint8_t || mu8NumBoundaryLinesmx8Flags || Flags || See [[#AISection flags || flags]]
|-
| 0x130x24 || 0x10x4 || uint8_t[1] || mau8Pad || padding || ||
|}
 
=== BoundaryLine ===
=== BrnAI::Portal ===
==== 32-bit ====
{| class="wikitable"
! Offset !! SizeLength !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x100x4 || Vector4 || mVertsfloat32_t || mPositionX || ||
|}
=== SectionResetPair ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x00x4 || 0x4 || uint32_tfloat32_t || meResetSpeedmPositionY || EResetSpeedType || 0x00 = E_RESET_SPEED_TYPE_CUSTOM ||
|-
| 0x8 || 0x4 || float32_t || mPositionZ || || 0x01 = E_RESET_SPEED_TYPE_NONE ||
|-
| 0xC || 0x4 || [[#BrnAI::BoundaryLine || BoundaryLine]]* || mpaBoundaryLines || 0x02 = E_RESET_SPEED_TYPE_SLOW ||
|-
| 0x10 || 0x2 || uint16_t || mu16LinkSection || Section || 0x03 = E_RESET_SPEED_TYPE_FASTindex ||
|-
| 0x12 || 0x1 || uint8_t || mu8NumBoundaryLines || || 0x04 = E_RESET_SPEED_TYPE_SLOW_NORTH_FACE ||
|-
| 0x13 || 0x1 || uint8_t[1] || mau8Pad || || 0x05 = E_RESET_SPEED_TYPE_SLOW_SOUTH_FACEpadding ||
|}
 
==== 64-bit ====
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x4 || float32_t || mPositionX || || 0x06 = E_RESET_SPEED_TYPE_SLOW_EAST_FACE ||
|-
| 0x4 || 0x4 || float32_t || mPositionY || || 0x07 = E_RESET_SPEED_TYPE_SLOW_WEST_FACE ||
|-
| 0x8 || 0x4 || float32_t || mPositionZ || || 0x08 = E_RESET_SPEED_TYPE_SLOW_REVERSE ||
|-
| 0xC || 0x4 || || || || 0x09 = E_RESET_SPEED_TYPE_STOP_REVERSEpadding ||
|-
| 0x10 || 0x8 || [[#BrnAI::BoundaryLine | BoundaryLine]]* || mpaBoundaryLines || ||
| || || || || || 0x0A = E_RESET_SPEED_TYPE_STOP_NORTH_FACE ||
|-
| 0x18 || 0x2 || uint16_t || mu16LinkSection || Section || 0x0B = E_RESET_SPEED_TYPE_STOP_SOUTH_FACEindex ||
|-
| 0x1A || 0x1 || uint8_t || mu8NumBoundaryLines || || 0x0C = E_RESET_SPEED_TYPE_STOP_EAST_FACE ||
|-
| 0x1B || 0x1 || uint8_t[1] || mau8Pad || || 0x0D = E_RESET_SPEED_TYPE_STOP_WEST_FACEpadding ||
|-
| 0x1C || 0x4 || || || || 0x0E = E_RESET_SPEED_TYPE_STOP_NORTH_EAST_FACEpadding ||
|}
 
=== BrnAI::BoundaryLine ===
{| class="wikitable"
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| 0x0 || 0x10 || [[#Common Data Types (Burnout Paradise)#Vector3Plus/Vector4 | Vector4]] || mVerts || ||
| || || || || || 0x0F = E_RESET_SPEED_TYPE_STOP_SOUTH_WEST_FACE ||
|-}
 
| || || || || || 0x10 = E_RESET_SPEED_TYPE_NONE_AND_IGNORE ||
=== BrnAI::SectionResetPair ===
|-
{| class="wikitable"
| || || || || || 0x11 = E_RESET_SPEED_TYPE_WEST_AND_IGNORE ||
! Offset !! Length !! Type !! Name !! Description !! Comments
|-
| || || || || || 0x12 = E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE ||
|-
| || || || || || 0x13 = E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE_SLOW ||
|-
| 0x0 || 0x4 || uint32_t || meResetSpeed || || 0x14See =[[#BrnAI::EResetSpeedType E_RESET_SPEED_TYPE_COUNT || EResetSpeedType]]
|-
| 0x4 || 0x2 || uint16_t || muStartSectionIndex || || ||
Line 141 ⟶ 158:
| 0x6 || 0x2 || uint16_t || muResetSectionIndex || || ||
|}
 
=== AISectionPointMap ===
= Typedefs =
=== BrnAI::AISection::AISectionId ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
! Name !! Type !! Length !! Comments
| 0x0 || 0x4 || int32_t || miGridWidth || || || AISectionPointMap unused in file
|-
| 0x4 || 0x4 || int32_t || miGridHeightAISectionId || uint32_t || 0x4 ||
|-
| 0x8 || 0x8 || || || padding || ||
|-
| 0x10 || 0x10 || Vector2 || mvGridUnitSize || || ||
|-
| 0x20 || 0x10 || Vector2 || mvGridMin || || ||
|-
| 0x30 || 0x4 || Vector3 * || mpPoints || || ||
|-
| 0x34 || 0x4 || uint16_t * || mpuSections || || ||
|-
| 0x38 || 0x4 || uint16_t * || mpuGridUnitMap || || ||
|-
| 0x3C || 0x4 || uint16_t * || mpuGridUnitPointIndices || || ||
|-
| 0x40 || 0x4 || uint16_t * || mpuGridUnitPointCount || || ||
|-
| 0x44 || 0xC || || || padding || ||
|}
 
=== BoundingBox ===
=== BrnStreetData::Road::SpanIndex ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
! Name !! Type !! Length !! Comments
| 0x0 || 0x80 || Vector3[8] || maCorners || || || BoundingBox unused in file
|}
=== DrivingCollisionTriangle ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| SpanIndex || int16_t || 0x4 ||
| 0x0 || 0x30 || Vector3[3] || maVerts || || || DrivingCollisionTriangle unused in file
|}
 
== PS4 ==
= Enumerations =
=== AISectionsData ===
=== BrnAI::SectionSpeed ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
! Name !! Value !! Comments
| 0x0 || 0x8 || AISection * || mpaSections || || AISection format ||
|-
| E_SECTION_SPEED_VERY_SLOW || 0 ||
| 0x8 || 0x8 || SectionResetPair * || mpaSectionResetPairs || || SectionResetPair format ||
|-
| E_SECTION_SPEED_SLOW || 1 ||
| 0x10 || 0x14 || float32_t[5] || mafSectionMinSpeeds || || ||
|-
| E_SECTION_SPEED_NORMAL || 2 ||
| 0x24 || 0x14 || float32_t[5] || mafSectionMaxSpeeds || || ||
|-
| E_SECTION_SPEED_FAST || 3 ||
| 0x38 || 0x4 || uint32_t || muNumSections || || ||
|-
| E_SECTION_SPEED_VERY_FAST || 4 ||
| 0x3C || 0x4 || uint32_t || muNumSectionResetPairs || || ||
|-
| E_SECTION_SPEED_COUNT || 5 ||
| 0x40 || 0x4 || uint32_t || muVersion || || 12 ||
|-
| 0x44 || 0x4 || uint32_t || muSizeInBytes || || ||
|}
 
=== AISection ===
=== AISection flags ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
! Name !! Value !! Comments
| 0x0 || 0x8 || Portal * || mpaPortals || || Portal format ||
|-
| IsShortcut || 0x1 ||
| 0x8 || 0x8 || BoundaryLine * || mpaNoGoLines || || BoundaryLine format ||
|-
| 0x10IsNoReset || 0x80x2 || Vector2No *reset ||on mpaCorners || || ||track point
|-
| 0x18IsInAir || 0x4 || AISectionIdTypically ||right mId || Section GameDB ID || ||before jumps
|-
| 0x1CIsTerminator || 0x20x8 || SpanIndexIndicates ||walls miSpanIndexetc. ||May not ||be end ||of the road
|-
| IsJunction || 0x10 || Likely required for events
| 0x1E || 0x2 || uint16_t || muNumNoGoLines || || ||
|-
| 0x20IsSplit || 0x10x20 || uint8_tRoad ||split, mu8NumPortalslike ||at Moore/E. || || Crawford
|-
| IsAIShortcut || 0x40 ||
| 0x21 || 0x1 || uint8_t || muSpeed || SectionSpeed || 0x0 = E_SECTION_SPEED_VERY_SLOW ||
|-
| IsInterstateExit || 0x80 ||
| || || || || || 0x1 = E_SECTION_SPEED_SLOW ||
|-
| || || || || || 0x2 = E_SECTION_SPEED_NORMAL ||
|-
| || || || || || 0x3 = E_SECTION_SPEED_FAST ||
|-
| || || || || || 0x4 = E_SECTION_SPEED_VERY_FAST ||
|-
| || || || || || 0x5 = E_SECTION_SPEED_COUNT ||
|-
| 0x22 || 0x1 || uint8_t || mu8eDistrict || District || || Always null
|-
| 0x23 || 0x1 || uint8_t || mx8Flags || 0x01 (Bit 0) = IsShortcut || ||
|-
| || || || || 0x02 (Bit 1) = IsNoReset || No reset on track point ||
|-
| || || || || 0x04 (Bit 2) = IsInAir || Typically right before jumps ||
|-
| || || || || 0x08 (Bit 3) = IsTerminator || Indicates walls etc. May not be end of the road ||
|-
| || || || || 0x10 (Bit 4) = IsJunction || Likely required for events ||
|-
| || || || || 0x20 (Bit 5) = IsSplit || Road split, like at Moore/E. Crawford ||
|-
| || || || || 0x40 (Bit 6) = IsAIShortcut || ||
|-
| || || || || 0x80 (Bit 7) = IsInterstateExit || ||
|-
| 0x24 || 0x4 || || || padding || ||
|}
 
=== Portal ===
=== BrnAI::EResetSpeedType ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
! Name !! Value !! Comments
| 0x0 || 0x4 || float32_t || mPositionX || || ||
|-
| E_RESET_SPEED_TYPE_CUSTOM || 0 ||
| 0x4 || 0x4 || float32_t || mPositionY || || ||
|-
| E_RESET_SPEED_TYPE_NONE || 1 ||
| 0x8 || 0x4 || float32_t || mPositionZ || || ||
|-
| 0xC || 0x4 || || || paddingE_RESET_SPEED_TYPE_SLOW || 2 ||
|-
| E_RESET_SPEED_TYPE_FAST || 3 ||
| 0x10 || 0x8 || BoundaryLine * || mpaBoundaryLines || || BoundaryLine format ||
|-
| 0x18 || 0x4 || || || paddingE_RESET_SPEED_TYPE_SLOW_NORTH_FACE || 4 ||
|-
| E_RESET_SPEED_TYPE_SLOW_SOUTH_FACE || 5 ||
| 0x1C || 0x2 || uint16_t || mu16LinkSection || Section index || ||
|-
| E_RESET_SPEED_TYPE_SLOW_EAST_FACE || 6 ||
| 0x1E || 0x1 || uint8_t || mu8NumBoundaryLines || || ||
|-
| E_RESET_SPEED_TYPE_SLOW_WEST_FACE || 7 ||
| 0x1F || 0x1 || uint8_t[1] || mau8Pad || padding || ||
|}
=== BoundaryLine ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x10 || Vector4 || mVerts || E_RESET_SPEED_TYPE_SLOW_REVERSE || 8 ||
|}
=== SectionResetPair ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information
|-
| E_RESET_SPEED_TYPE_STOP_REVERSE || 9 ||
| 0x0 || 0x4 || uint32_t || meResetSpeed || EResetSpeedType || 0x00 = E_RESET_SPEED_TYPE_CUSTOM
|-
| E_RESET_SPEED_TYPE_STOP_NORTH_FACE || 10 ||
| || || || || || 0x01 = E_RESET_SPEED_TYPE_NONE
|-
| E_RESET_SPEED_TYPE_STOP_SOUTH_FACE || 11 ||
| || || || || || 0x02 = E_RESET_SPEED_TYPE_SLOW
|-
| E_RESET_SPEED_TYPE_STOP_EAST_FACE || 12 ||
| || || || || || 0x03 = E_RESET_SPEED_TYPE_FAST
|-
| E_RESET_SPEED_TYPE_STOP_WEST_FACE || 13 ||
| || || || || || 0x04 = E_RESET_SPEED_TYPE_SLOW_NORTH_FACE
|-
| E_RESET_SPEED_TYPE_STOP_NORTH_EAST_FACE || 14 ||
| || || || || || 0x05 = E_RESET_SPEED_TYPE_SLOW_SOUTH_FACE
|-
| E_RESET_SPEED_TYPE_STOP_SOUTH_WEST_FACE || 15 ||
| || || || || || 0x06 = E_RESET_SPEED_TYPE_SLOW_EAST_FACE
|-
| E_RESET_SPEED_TYPE_NONE_AND_IGNORE || 16 ||
| || || || || || 0x07 = E_RESET_SPEED_TYPE_SLOW_WEST_FACE
|-
| E_RESET_SPEED_TYPE_WEST_AND_IGNORE || 17 ||
| || || || || || 0x08 = E_RESET_SPEED_TYPE_SLOW_REVERSE
|-
| E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE || 18 ||
| || || || || || 0x09 = E_RESET_SPEED_TYPE_STOP_REVERSE
|-
| E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE_SLOW || 19 ||
| || || || || || 0x0A = E_RESET_SPEED_TYPE_STOP_NORTH_FACE
|-
| || || || || || 0x0B = E_RESET_SPEED_TYPE_STOP_SOUTH_FACE
|-
| || || || || || 0x0C = E_RESET_SPEED_TYPE_STOP_EAST_FACE
|-
| || || || || || 0x0D = E_RESET_SPEED_TYPE_STOP_WEST_FACE
|-
| || || || || || 0x0E = E_RESET_SPEED_TYPE_STOP_NORTH_EAST_FACE
|-
| || || || || || 0x0F = E_RESET_SPEED_TYPE_STOP_SOUTH_WEST_FACE
|-
| || || || || || 0x10 = E_RESET_SPEED_TYPE_NONE_AND_IGNORE
|-
| || || || || || 0x11 = E_RESET_SPEED_TYPE_WEST_AND_IGNORE
|-
| || || || || || 0x12 = E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE
|-
| || || || || || 0x13 = E_RESET_SPEED_TYPE_REVERSE_AND_IGNORE_SLOW
|-
| || || || || || 0x14 = E_RESET_SPEED_TYPE_COUNT
|-
| 0x4 || 0x2 || uint16_t || muStartSectionIndex || ||
|-
| 0x6 || 0x2 || uint16_t || muResetSectionIndex || ||
|}
=== AISectionPointMap ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x4 || int32_t || miGridWidth || || || AISectionPointMap unused in file, PS4 structure guessed
|-
| 0x4 || 0x4 || int32_t || miGridHeight || || ||
|-
| 0x8 || 0x8 || || || padding || ||
|-
| 0x10 || 0x10 || Vector2 || mvGridUnitSize || || ||
|-
| 0x20 || 0x10 || Vector2 || mvGridMin || || ||
|-
| 0x30 || 0x8 || Vector3 * || mpPoints || || ||
|-
| 0x38 || 0x8 || uint16_t * || mpuSections || || ||
|-
| 0x40 || 0x8 || uint16_t * || mpuGridUnitMap || || ||
|-
| 0x48 || 0x8 || uint16_t * || mpuGridUnitPointIndices || || ||
|-
| 0x50 || 0x8 || uint16_t * || mpuGridUnitPointCount || || ||
|-
| 0x58 || 0x8 || || || padding || ||
|}
=== BoundingBox ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| 0x0 || 0x80 || Vector3[8] || maCorners || || || BoundingBox unused in file
|}
=== DrivingCollisionTriangle ===
{| class="wikitable"
! Offset !! Size !! Type !! Name !! Description !! More Information !! Comments
|-
| E_RESET_SPEED_TYPE_COUNT || 20 ||
| 0x0 || 0x30 || Vector3[3] || maVerts || || || DrivingCollisionTriangle unused in file
|}